Commit 309193200c6b3f0710c6968beb88f300f70839af

Authored by Perry Werneck
1 parent 28be8394

Verificando possível segfault no módulo hllapi.

@@ -167,7 +167,6 @@ case "$host" in @@ -167,7 +167,6 @@ case "$host" in
167 167
168 AC_CONFIG_FILES(nsi/runtime-init.nsi) 168 AC_CONFIG_FILES(nsi/runtime-init.nsi)
169 169
170 - AC_CONFIG_FILES(src/plugins/hllapi/Makefile)  
171 AC_CONFIG_FILES(makegtkruntime.sh) 170 AC_CONFIG_FILES(makegtkruntime.sh)
172 171
173 ;; 172 ;;
@@ -203,6 +202,9 @@ case "$host" in @@ -203,6 +202,9 @@ case "$host" in
203 202
204 esac 203 esac
205 204
  205 +# It's easier to test hllapi on linux
  206 +AC_CONFIG_FILES(src/plugins/hllapi/Makefile)
  207 +
206 #--[ Check gettext ]------------------------------------------------------------------------------------------------------------------------------------------ 208 #--[ Check gettext ]------------------------------------------------------------------------------------------------------------------------------------------
207 209
208 AC_PATH_TOOL([XGETTEXT], [xgettext], [no]) 210 AC_PATH_TOOL([XGETTEXT], [xgettext], [no])
src/include/pw3270/hllapi.h
@@ -113,23 +113,21 @@ extern "C" { @@ -113,23 +113,21 @@ extern "C" {
113 113
114 #else 114 #else
115 115
116 - #define HLLAPI_API_CALL __attribute__((visibility("default"))) extern  
117 -  
118 // From wtypesbase.h 116 // From wtypesbase.h
119 - typedef byte BYTE;  
120 - typedef unsigned short WORD; 117 + typedef uint8_t BYTE;
  118 + typedef uint16_t WORD;
121 typedef unsigned int UINT; 119 typedef unsigned int UINT;
122 typedef int INT; 120 typedef int INT;
  121 + typedef uint32_t LONG;
123 typedef LONG WINBOOL; 122 typedef LONG WINBOOL;
124 - typedef LONG LONG;  
125 - typedef ULONG DWORD; 123 + typedef uint32_t DWORD;
126 typedef void *HANDLE; 124 typedef void *HANDLE;
127 typedef WORD *LPWORD; 125 typedef WORD *LPWORD;
128 typedef DWORD *LPDWORD; 126 typedef DWORD *LPDWORD;
129 typedef char CHAR; 127 typedef char CHAR;
130 typedef CHAR *LPSTR; 128 typedef CHAR *LPSTR;
131 typedef const CHAR *LPCSTR; 129 typedef const CHAR *LPCSTR;
132 - typedef wchar_t WCHAR; 130 + typedef char WCHAR;
133 typedef WCHAR TCHAR; 131 typedef WCHAR TCHAR;
134 typedef WCHAR *LPWSTR; 132 typedef WCHAR *LPWSTR;
135 typedef TCHAR *LPTSTR; 133 typedef TCHAR *LPTSTR;
@@ -142,6 +140,8 @@ extern "C" { @@ -142,6 +140,8 @@ extern "C" {
142 #define LPSTR char * 140 #define LPSTR char *
143 #define HANDLE int 141 #define HANDLE int
144 142
  143 + #define HLLAPI_API_CALL __attribute__((visibility("default"))) extern DWORD
  144 +
145 #endif // WIN32 145 #endif // WIN32
146 146
147 HLLAPI_API_CALL hllapi(const LPWORD func, LPSTR str, LPWORD length, LPWORD rc); 147 HLLAPI_API_CALL hllapi(const LPWORD func, LPSTR str, LPWORD length, LPWORD rc);
@@ -179,8 +179,6 @@ extern "C" { @@ -179,8 +179,6 @@ extern "C" {
179 179
180 HLLAPI_API_CALL hllapi_print(void); 180 HLLAPI_API_CALL hllapi_print(void);
181 181
182 - HLLAPI_API_CALL hllapi(const LPWORD func, LPSTR str, LPWORD length, LPWORD rc);  
183 -  
184 HLLAPI_API_CALL hllapi_init(LPSTR mode); 182 HLLAPI_API_CALL hllapi_init(LPSTR mode);
185 HLLAPI_API_CALL hllapi_deinit(void); 183 HLLAPI_API_CALL hllapi_deinit(void);
186 184
src/plugins/hllapi/Makefile.in
@@ -36,6 +36,7 @@ EXTAPI_SRC=calls.c hllapi.c @@ -36,6 +36,7 @@ EXTAPI_SRC=calls.c hllapi.c
36 #---[ Include plugin rules ]--------------------------------------------------- 36 #---[ Include plugin rules ]---------------------------------------------------
37 37
38 CLASSLIBDIR=../../classlib 38 CLASSLIBDIR=../../classlib
  39 +LIBS=@LIBS@
39 40
40 include ../../include/plugin.mak 41 include ../../include/plugin.mak
41 include $(CLASSLIBDIR)/class.mak 42 include $(CLASSLIBDIR)/class.mak
@@ -47,7 +48,7 @@ $(BINRLS)/$(PLUGIN_NAME): \ @@ -47,7 +48,7 @@ $(BINRLS)/$(PLUGIN_NAME): \
47 48
48 @echo " CCLD `basename $@`" 49 @echo " CCLD `basename $@`"
49 @$(MKDIR) `dirname $@` 50 @$(MKDIR) `dirname $@`
50 - @$(CXX) $(DLL_FLAGS) @LDSOFLAGS@ $(LDFLAGS) @RLS_LDFLAGS@ -o $@ $^ $(LIBS) $(LIB3270_LIBS) $(GTK_LIBS) $(GLIB_LIBS) $(PW3270_LIBS) 51 + @$(CXX) $(DLL_FLAGS) @LDSOFLAGS@ $(LDFLAGS) @RLS_LDFLAGS@ -o $@ $^ $(LIBS) $(LIB3270_LIBS) $(CLASS_LIBS)
51 52
52 $(BINRLS)$(DLL_NAME).$(VERSION): \ 53 $(BINRLS)$(DLL_NAME).$(VERSION): \
53 $(foreach SRC, $(basename $(EXTAPI_SRC)), $(OBJRLS)/$(SRC).o) $(CLASS_RELEASE_OBJECTS) 54 $(foreach SRC, $(basename $(EXTAPI_SRC)), $(OBJRLS)/$(SRC).o) $(CLASS_RELEASE_OBJECTS)
@@ -65,7 +66,7 @@ $(BINDBG)/$(PLUGIN_NAME): \ @@ -65,7 +66,7 @@ $(BINDBG)/$(PLUGIN_NAME): \
65 66
66 @echo " CCLD `basename $@`" 67 @echo " CCLD `basename $@`"
67 @$(MKDIR) `dirname $@` 68 @$(MKDIR) `dirname $@`
68 - @$(CXX) $(DLL_FLAGS) @LDSOFLAGS@ @DBGRPATH@ $(LDFLAGS) -o $@ $^ $(LIBS) $(LIB3270_LIBS) $(GTK_LIBS) $(GLIB_LIBS) $(PW3270_LIBS) 69 + @$(CXX) $(DLL_FLAGS) @LDSOFLAGS@ @DBGRPATH@ $(LDFLAGS) -o $@ $^ $(LIBS) $(LIB3270_LIBS) $(CLASS_LIBS)
69 70
70 $(BINDBG)$(DLL_NAME).$(VERSION): \ 71 $(BINDBG)$(DLL_NAME).$(VERSION): \
71 $(foreach SRC, $(basename $(EXTAPI_SRC)), $(OBJDBG)/$(SRC)@OBJEXT@) $(CLASS_DEBUG_OBJECTS) 72 $(foreach SRC, $(basename $(EXTAPI_SRC)), $(OBJDBG)/$(SRC)@OBJEXT@) $(CLASS_DEBUG_OBJECTS)
@@ -85,5 +86,5 @@ $(BINDBG)/test@EXEEXT@: \ @@ -85,5 +86,5 @@ $(BINDBG)/test@EXEEXT@: \
85 86
86 @echo " CCLD `basename $@`" 87 @echo " CCLD `basename $@`"
87 @$(MKDIR) `dirname $@` 88 @$(MKDIR) `dirname $@`
88 - @$(LD) -o $@ $^ $(LIBS) $(BINDBG)$(DLL_NAME).$(VERSION) 89 + $(LD) -o $@ $^ -Wl,-rpath,$(BINDBG)/lib $(LIBS) $(BINDBG)$(DLL_NAME).$(VERSION)
89 90
src/plugins/hllapi/calls.cc
@@ -28,6 +28,9 @@ @@ -28,6 +28,9 @@
28 */ 28 */
29 29
30 #include <exception> 30 #include <exception>
  31 + #include <cstdlib>
  32 + #include <cstring>
  33 +
31 #include <pw3270/class.h> 34 #include <pw3270/class.h>
32 #include <pw3270/hllapi.h> 35 #include <pw3270/hllapi.h>
33 #include "client.h" 36 #include "client.h"
@@ -232,6 +235,7 @@ @@ -232,6 +235,7 @@
232 235
233 HLLAPI_API_CALL hllapi_get_datadir(LPSTR datadir) 236 HLLAPI_API_CALL hllapi_get_datadir(LPSTR datadir)
234 { 237 {
  238 + #ifdef _WIN32
235 HKEY hKey = 0; 239 HKEY hKey = 0;
236 unsigned long datalen = strlen(datadir); 240 unsigned long datalen = strlen(datadir);
237 241
@@ -244,6 +248,7 @@ @@ -244,6 +248,7 @@
244 *datadir = 0; 248 *datadir = 0;
245 RegCloseKey(hKey); 249 RegCloseKey(hKey);
246 } 250 }
  251 +#endif // _WIN32
247 252
248 return *datadir; 253 return *datadir;
249 } 254 }
src/plugins/hllapi/hllapi.c
@@ -85,7 +85,7 @@ @@ -85,7 +85,7 @@
85 85
86 /*--[ Implement ]------------------------------------------------------------------------------------*/ 86 /*--[ Implement ]------------------------------------------------------------------------------------*/
87 87
88 -HLLAPI_API_CALL hllapi(LPWORD func, LPSTR buffer, LPWORD length, LPWORD rc) 88 +HLLAPI_API_CALL hllapi(const LPWORD func, LPSTR buffer, LPWORD length, LPWORD rc)
89 { 89 {
90 unsigned int f; 90 unsigned int f;
91 91
src/plugins/hllapi/hllapi.cbp
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 </Linker> 37 </Linker>
38 </Target> 38 </Target>
39 <Target title="test"> 39 <Target title="test">
40 - <Option output=".bin/Debug/testprogram" prefix_auto="1" extension_auto="1" /> 40 + <Option output=".bin/Debug/test" prefix_auto="1" extension_auto="1" />
41 <Option object_output=".obj/Debug/" /> 41 <Option object_output=".obj/Debug/" />
42 <Option type="1" /> 42 <Option type="1" />
43 <Option compiler="gcc" /> 43 <Option compiler="gcc" />
src/plugins/hllapi/testprogram.c
@@ -28,17 +28,42 @@ @@ -28,17 +28,42 @@
28 */ 28 */
29 29
30 #include <stdio.h> 30 #include <stdio.h>
  31 + #include <string.h>
31 #include <time.h> 32 #include <time.h>
32 #include <pw3270/hllapi.h> 33 #include <pw3270/hllapi.h>
33 34
34 - #define BUFFER_LENGTH 8000 35 + #define MAX_DATA_SIZE 8000 //< Maximum data size for this application.
  36 +
  37 + static CHAR hllapi_data[MAX_DATA_SIZE];
35 38
36 /*---[ Implement ]--------------------------------------------------------------------------------*/ 39 /*---[ Implement ]--------------------------------------------------------------------------------*/
37 40
  41 + static void connect(const char *session)
  42 + {
  43 + WORD len;
  44 + WORD fn = HLLAPI_CMD_CONNECTPS;
  45 + WORD rc = 0;
  46 +
  47 + strncpy(hllapi_data,session,MAX_DATA_SIZE);
  48 +
  49 + len = strlen(session);
  50 + hllapi(&fn,hllapi_data,&len,&rc);
  51 +
  52 + if(rc)
  53 + {
  54 + fprintf(stderr,"HLLAPI_CMD_CONNECTPS exits with rc=%d",(int) rc);
  55 + }
  56 +
  57 + }
  58 +
38 int main(int numpar, char *param[]) 59 int main(int numpar, char *param[])
39 { 60 {
40 const char *session = "pw3270:a"; 61 const char *session = "pw3270:a";
41 62
  63 + connect(session);
  64 +
  65 + /*
  66 +
42 printf("init(%s)=%d\n",session,(int) hllapi_init((LPSTR) session)); 67 printf("init(%s)=%d\n",session,(int) hllapi_init((LPSTR) session));
43 printf("revision=%d\n",(int) hllapi_get_revision()); 68 printf("revision=%d\n",(int) hllapi_get_revision());
44 printf("connect=%d\n",(int) hllapi_connect((char *) "fandezhi.efglobe.com:23",1)); 69 printf("connect=%d\n",(int) hllapi_connect((char *) "fandezhi.efglobe.com:23",1));
@@ -50,7 +75,6 @@ @@ -50,7 +75,6 @@
50 75
51 printf("deinit=%d\n",(int) hllapi_deinit()); 76 printf("deinit=%d\n",(int) hllapi_deinit());
52 77
53 -/*  
54 DWORD revision; 78 DWORD revision;
55 int rc; 79 int rc;
56 80