Commit adbd6ec9ec36d5a4c45ee3d9c8854a7aca07a8a6

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

Setting local charset on the constructor because python is always UTF-8,

even on windows.
client/src/core/abstract.cc
... ... @@ -98,7 +98,7 @@
98 98 if(this->converter.host != (iconv_t) (-1))
99 99 iconv_close(converter.host);
100 100  
101   - if(strcmp(local,remote)) {
  101 + if(remote && strcmp(local,remote)) {
102 102  
103 103 // Local and remote charsets aren't the same, setup conversion
104 104 converter.local = iconv_open(local, remote);
... ...
client/src/core/session.cc
... ... @@ -44,10 +44,10 @@
44 44  
45 45 namespace TN3270 {
46 46  
47   - Session * Session::getInstance(const char *id) {
  47 + Session * Session::getInstance(const char *id, const char *charset) {
48 48  
49 49 if(!(id && *id)) {
50   - return Local::getSessionInstance();
  50 + return Local::getSessionInstance(charset);
51 51 }
52 52  
53 53 if(*id == ':') {
... ... @@ -55,11 +55,11 @@
55 55 std::string name{LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME)};
56 56 name += id;
57 57  
58   - return IPC::getSessionInstance(name.c_str());
  58 + return IPC::getSessionInstance(name.c_str(), charset);
59 59  
60 60 }
61 61  
62   - return IPC::getSessionInstance(id);
  62 + return IPC::getSessionInstance(id, charset);
63 63  
64 64 }
65 65  
... ...
client/src/core/windows/attribute.cc
... ... @@ -58,7 +58,7 @@
58 58 attributes.push_back((const LIB3270_PROPERTY *) prop);
59 59 }
60 60  
61   - for(auto prop = lib3270_get_toggle_list(); prop->name; prop++) {
  61 + for(auto prop = lib3270_get_toggles(); prop->name; prop++) {
62 62 attributes.push_back((const LIB3270_PROPERTY *) prop);
63 63 }
64 64  
... ...
client/src/host/init.cc
... ... @@ -40,12 +40,12 @@
40 40  
41 41 /*---[ Implement ]----------------------------------------------------------------------------------*/
42 42  
43   -TN3270::Host::Host(const char *id, const char *url, time_t timeout) {
  43 +TN3270::Host::Host(const char *id, const char *url, time_t timeout, const char *charset) {
44 44  
45 45 debug("Creating host id=\"", id);
46 46  
47 47 this->timeout = timeout;
48   - this->session = Session::getInstance(id);
  48 + this->session = Session::getInstance(id, charset);
49 49 if(url) {
50 50 this->connect(url);
51 51 }
... ...
client/src/include/ipc-client-internals.h
... ... @@ -203,14 +203,14 @@
203 203 /// @brief lib3270 direct access objects (no IPC);
204 204 namespace Local {
205 205  
206   - TN3270_PRIVATE Session * getSessionInstance();
  206 + TN3270_PRIVATE Session * getSessionInstance(const char *charset = nullptr);
207 207  
208 208 }
209 209  
210 210 /// @brief IPC Based acess (Access an active instance of pw3270 or pw3270d)
211 211 namespace IPC {
212 212  
213   - TN3270_PRIVATE TN3270::Session * getSessionInstance(const char *id);
  213 + TN3270_PRIVATE TN3270::Session * getSessionInstance(const char *id, const char *charset = nullptr);
214 214 class Session;
215 215  
216 216 }
... ...
client/src/include/lib3270/ipc.h
... ... @@ -451,7 +451,7 @@
451 451 public:
452 452  
453 453 /// @brief Get an instance of the TN3270 session based on the supplied ID.
454   - static Session * getInstance(const char *id = nullptr);
  454 + static Session * getInstance(const char *id = nullptr, const char *charset = nullptr);
455 455 virtual ~Session();
456 456  
457 457 // States
... ... @@ -675,7 +675,7 @@
675 675 */
676 676  
677 677 public:
678   - Host(const char *id = nullptr, const char *url = nullptr, time_t timeout = DEFAULT_TIMEOUT);
  678 + Host(const char *id = nullptr, const char *url = nullptr, time_t timeout = DEFAULT_TIMEOUT, const char *charset = nullptr);
679 679 ~Host();
680 680  
681 681 inline bool operator==(ConnectionState state) const noexcept {
... ...
client/src/session/local/init.cc
... ... @@ -55,11 +55,11 @@
55 55  
56 56 namespace TN3270 {
57 57  
58   - Session * Local::getSessionInstance() {
59   - return new Local::Session();
  58 + Session * Local::getSessionInstance(const char *charset) {
  59 + return new Local::Session(charset);
60 60 }
61 61  
62   - Local::Session::Session() : Abstract::Session() {
  62 + Local::Session::Session(const char *charset) : Abstract::Session() {
63 63  
64 64 std::lock_guard<std::mutex> lock(sync);
65 65  
... ... @@ -67,7 +67,7 @@
67 67  
68 68 lib3270_set_user_data(this->hSession,(void *) this);
69 69  
70   - setCharSet();
  70 + this->setCharSet(charset);
71 71  
72 72 lib3270_set_popup_handler(this->hSession, popupHandler);
73 73  
... ...
client/src/session/local/private.h
... ... @@ -105,7 +105,7 @@
105 105  
106 106 public:
107 107  
108   - Session();
  108 + Session(const char *charset = nullptr);
109 109 virtual ~Session();
110 110  
111 111 // Actions
... ...
client/src/session/remote/linux/session.cc
... ... @@ -60,7 +60,7 @@
60 60  
61 61 namespace TN3270 {
62 62  
63   - IPC::Session::Session(const char *id) : Abstract::Session() {
  63 + IPC::Session::Session(const char *id, const char *charset) : Abstract::Session() {
64 64  
65 65 // Create D-Bus session.
66 66 DBusError err;
... ... @@ -92,7 +92,7 @@
92 92  
93 93 debug("D-Bus Object name=\"",this->name,"\" D-Bus Object path=\"",this->path,"\"");
94 94  
95   - setCharSet();
  95 + setCharSet(charset);
96 96  
97 97 }
98 98  
... ...
client/src/session/remote/private.h
... ... @@ -104,7 +104,7 @@
104 104  
105 105 public:
106 106  
107   - Session(const char *id);
  107 + Session(const char *id, const char *charset = nullptr);
108 108 virtual ~Session();
109 109  
110 110 // Actions
... ...
client/src/session/remote/tools.cc
... ... @@ -42,8 +42,8 @@
42 42  
43 43 namespace TN3270 {
44 44  
45   - Session * IPC::getSessionInstance(const char *id) {
46   - return new IPC::Session(id);
  45 + Session * IPC::getSessionInstance(const char *id, const char *charset) {
  46 + return new IPC::Session(id,charset);
47 47 }
48 48  
49 49  
... ...
client/src/session/remote/windows/session.cc
... ... @@ -48,7 +48,7 @@
48 48  
49 49 namespace TN3270 {
50 50  
51   - IPC::Session::Session(const char *id) : Abstract::Session() {
  51 + IPC::Session::Session(const char *id, const char *charset) : Abstract::Session() {
52 52  
53 53 const char *ptr = strchr(id,':');
54 54  
... ... @@ -86,7 +86,7 @@
86 86 throw std::runtime_error("Can't set IPC Channel mode");
87 87 }
88 88  
89   - setCharSet();
  89 + this->setCharSet(charset);
90 90 }
91 91  
92 92 IPC::Session::~Session() {
... ...