Commit 89692bfc3f5ed44e00437747b34334126ea639b9

Authored by Perry Werneck
1 parent 57622f88
Exists in master and in 1 other branch develop

Fixing MSVC autoptr issue.

client/src/include/lib3270/ipc.h
@@ -100,6 +100,42 @@ @@ -100,6 +100,42 @@
100 */ 100 */
101 TN3270_PUBLIC std::vector<const LIB3270_ACTION *> getActions(); 101 TN3270_PUBLIC std::vector<const LIB3270_ACTION *> getActions();
102 102
  103 + /**
  104 + * @brief Lib3270 dynamic memory block wrapper.
  105 + *
  106 + */
  107 + template<typename T>
  108 + class lib3270_auto_cleanup {
  109 + private:
  110 + T *data;
  111 +
  112 + public:
  113 + lib3270_auto_cleanup(T *data) {
  114 + this->data = data;
  115 + }
  116 +
  117 + ~lib3270_auto_cleanup() {
  118 + lib3270_free((void *) this->data);
  119 + }
  120 +
  121 + operator bool() const noexcept {
  122 + return this->data != NULL;
  123 + }
  124 +
  125 + T * operator->() {
  126 + return this->data;
  127 + }
  128 +
  129 + operator T *() const noexcept {
  130 + return this->data;
  131 + }
  132 +
  133 + };
  134 +
  135 + /**
  136 + * @brief TN3270 Event.
  137 + *
  138 + */
103 class TN3270_PUBLIC Event { 139 class TN3270_PUBLIC Event {
104 public: 140 public:
105 141
client/src/session/local/get.cc
@@ -46,39 +46,39 @@ @@ -46,39 +46,39 @@
46 46
47 std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); 47 std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);
48 48
49 - lib3270_autoptr(char) text = lib3270_get_string_at_address(hSession, 0, -1, '\n'); 49 + lib3270_auto_cleanup<char> text = lib3270_get_string_at_address(hSession, 0, -1, '\n');
50 50
51 if(!text) { 51 if(!text) {
52 throw std::runtime_error( _("Can't get screen contents") ); 52 throw std::runtime_error( _("Can't get screen contents") );
53 } 53 }
54 54
55 - return std::string(text); 55 + return std::string((char *) text);
56 } 56 }
57 57
58 std::string Local::Session::get(int baddr, int len, char lf) const { 58 std::string Local::Session::get(int baddr, int len, char lf) const {
59 59
60 std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); 60 std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);
61 61
62 - lib3270_autoptr(char) text = lib3270_get_string_at_address(hSession, baddr, len, lf); 62 + lib3270_auto_cleanup<char> text = lib3270_get_string_at_address(hSession, baddr, len, lf);
63 63
64 if(!text) { 64 if(!text) {
65 throw std::runtime_error( _("Can't get screen contents") ); 65 throw std::runtime_error( _("Can't get screen contents") );
66 } 66 }
67 67
68 - return std::string(text); 68 + return std::string((char *) text);
69 } 69 }
70 70
71 std::string Local::Session::get(unsigned int row, unsigned int col, int len, char lf) const { 71 std::string Local::Session::get(unsigned int row, unsigned int col, int len, char lf) const {
72 72
73 std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync); 73 std::lock_guard<std::mutex> lock(const_cast<Local::Session *>(this)->sync);
74 74
75 - lib3270_autoptr(char) text = lib3270_get_string_at(hSession, row, col, len, lf); 75 + lib3270_auto_cleanup<char> text = lib3270_get_string_at(hSession, row, col, len, lf);
76 76
77 if(!text) { 77 if(!text) {
78 throw std::runtime_error( _("Can't get screen contents") ); 78 throw std::runtime_error( _("Can't get screen contents") );
79 } 79 }
80 80
81 - return std::string(text); 81 + return std::string((char *) text);
82 82
83 } 83 }
84 84
client/src/testprogram/testprogram.cc
@@ -171,7 +171,7 @@ @@ -171,7 +171,7 @@
171 171
172 int main(int argc, char **argv) { 172 int main(int argc, char **argv) {
173 173
174 - const char * session = ":a"; 174 + const char * session = ""; // ":a";
175 175
176 #pragma GCC diagnostic push 176 #pragma GCC diagnostic push
177 #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" 177 #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"