Commit 66d31e1f048e8d90d614c19fbcdabc028c431bc7

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

Fixing load of delayed library.

client/src/session/local/session.cc
... ... @@ -69,6 +69,8 @@
69 69  
70 70 HANDLE hEventLog = RegisterEventSource(NULL, PACKAGE_NAME);
71 71  
  72 + debug(msg," rc=",rc);
  73 +
72 74 if(hEventLog) {
73 75  
74 76 char username[UNLEN + 1];
... ... @@ -142,8 +144,7 @@
142 144 if(!initialized) {
143 145  
144 146 // Get application DATADIR
145   -
146   - // https://github.com/curl/curl/blob/master/lib/system_win32.c
  147 + LSTATUS rc;
147 148  
148 149 char datadir[4096];
149 150 HKEY hKey = openKey();
... ... @@ -155,55 +156,48 @@
155 156  
156 157 unsigned long datatype; // #defined in winnt.h (predefined types 0-11)
157 158  
158   - if(RegQueryValueExA(hKey,"InstallLocation",NULL,&datatype,(LPBYTE) datadir,&datalen) != ERROR_SUCCESS) {
  159 + rc = RegQueryValueExA(hKey,"InstallLocation",NULL,&datatype,(LPBYTE) datadir,&datalen);
  160 + if(rc != ERROR_SUCCESS) {
159 161  
160 162 // Can't get DATADIR
  163 + write_log("Can't get Install Location", (int) rc);
161 164  
162 165 *datadir = 0;
163 166 }
164   -
165 167 RegCloseKey(hKey);
166 168  
167 169 }
168 170  
169   - if(*datadir) {
170   -
171   - HMODULE kernel =
172   - LoadLibrary("kernel32.dll");
173   -
174   - if(kernel) {
175   -
176   - HANDLE WINAPI (*AddDllDirectory)(PCWSTR) =
177   - (HANDLE WINAPI (*)(PCWSTR)) GetProcAddress(kernel,"AddDllDirectory");
178   -
179   - //BOOL WINAPI (*RemoveDllDirectory)(HANDLE) =
180   - // (BOOL WINAPI (*)(HANDLE)) GetProcAddress(kernel,"RemoveDllDirectory");
181   -
182   - if(AddDllDirectory) {
183   -
184   - wchar_t *path = (wchar_t *) malloc(sizeof(datadir)*sizeof(wchar_t));
185   - mbstowcs(path, datadir, 4095);
186   -
187   - if(!AddDllDirectory(path)) {
188   - write_log("AddDllDirectory has failed");
189   - }
190   -
191   - free(path);
192   -
193   - } else {
194   -
195   - write_log("Can't find AddDllDirectory@kernel32.dll");
196   -
197   - }
198   -
199   - FreeLibrary(kernel);
  171 +#ifdef DEBUG
  172 + debug("Datadir=\"",datadir,"\"");
  173 +#endif // DEBUG
200 174  
  175 + if(*datadir) {
201 176  
202   - } else {
  177 + wchar_t *path = (wchar_t *) malloc(sizeof(datadir)*sizeof(wchar_t));
  178 + mbstowcs(path, datadir, 4095);
203 179  
204   - write_log("Can't load kernel32.dll");
  180 + if(!SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_USER_DIRS)) {
  181 + write_log("SetDefaultDllDirectories has failed");
  182 + }
  183 +#ifdef DEBUG
  184 + else {
  185 + debug("SetDefaultDllDirectories has suceeded");
  186 + }
  187 +#endif
205 188  
  189 + if(!AddDllDirectory(path)) {
  190 + string msg = "Can't add ";
  191 + msg += datadir;
  192 + msg += " to directory path";
  193 + write_log(msg.c_str());
206 194 }
  195 +#ifdef DEBUG
  196 + else {
  197 + debug("AddDllDirectory has suceeded");
  198 + }
  199 +#endif
  200 + free(path);
207 201  
208 202 }
209 203  
... ... @@ -215,6 +209,7 @@
215 209 #endif // _WIN32
216 210  
217 211 this->hSession = lib3270_session_new("");
  212 +
218 213 lib3270_set_user_data(this->hSession,(void *) this);
219 214 setCharSet(lib3270_get_display_charset(this->hSession));
220 215  
... ...
client/src/testprogram/testprogram.cc
... ... @@ -46,7 +46,7 @@
46 46  
47 47 int main(int argc, char **argv) {
48 48  
49   - const char * session = "pw3270:a";
  49 + const char * session = ""; // "pw3270:a";
50 50  
51 51 #pragma GCC diagnostic push
52 52 #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
... ...
configure.ac
... ... @@ -80,7 +80,7 @@ case "$host" in
80 80 *-mingw32|*-pc-msys)
81 81 app_cv_osname="windows"
82 82 CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0600"
83   - LIBS="$LIBS -lws2_32 -lwtsapi32 -lcomdlg32"
  83 + LIBS="$LIBS -lws2_32 -lwtsapi32 -lcomdlg32 -lkernel32"
84 84 LDFLAGS="$LDFLAGS"
85 85 STATIC_LDFLAGS="-static -static-libgcc -static-libstdc++"
86 86 DLLEXT=".dll"
... ...