Commit 47b964ab20db7a7e69dded4b21570f43b96cfb73

Authored by Perry Werneck
1 parent e3de3fcb
Exists in master and in 2 other branches develop, macos

Adding utility functions.

src/core/ft/ft.c
@@ -258,24 +258,16 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -258,24 +258,16 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
258 H3270FT * ftHandle = (H3270FT *) session->ft; 258 H3270FT * ftHandle = (H3270FT *) session->ft;
259 FILE * ft_local_file = NULL; 259 FILE * ft_local_file = NULL;
260 int f; 260 int f;
261 -// unsigned long length = 0L;  
262 261
263 -// trace("%s(%s)",__FUNCTION__,local);  
264 if(!lib3270_is_connected(session)) 262 if(!lib3270_is_connected(session))
265 - {  
266 return ft_creation_failed(session,ENOTCONN,message,_( "Disconnected from host." )); 263 return ft_creation_failed(session,ENOTCONN,message,_( "Disconnected from host." ));
267 - }  
268 264
269 if(ftHandle) 265 if(ftHandle)
270 - {  
271 return ft_creation_failed(session,EBUSY,message,_( "File transfer is already active in this session." )); 266 return ft_creation_failed(session,EBUSY,message,_( "File transfer is already active in this session." ));
272 - }  
273 267
274 // Check remote file 268 // Check remote file
275 if(!*remote) 269 if(!*remote)
276 - {  
277 return ft_creation_failed(session,EINVAL,message,_( "The remote file name is invalid." )); 270 return ft_creation_failed(session,EINVAL,message,_( "The remote file name is invalid." ));
278 - }  
279 271
280 // Open local file 272 // Open local file
281 #ifdef _WIN32 273 #ifdef _WIN32
@@ -285,9 +277,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -285,9 +277,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
285 #endif // _WIN32 277 #endif // _WIN32
286 278
287 if(!ft_local_file) 279 if(!ft_local_file)
288 - {  
289 return ft_creation_failed(session,errno,message,strerror(errno)); 280 return ft_creation_failed(session,errno,message,strerror(errno));
290 - }  
291 281
292 // Set options 282 // Set options
293 lib3270_set_dft_buffersize(session, dft); 283 lib3270_set_dft_buffersize(session, dft);
@@ -296,14 +286,15 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -296,14 +286,15 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
296 ftHandle = lib3270_malloc(sizeof(H3270FT)+strlen(local)+strlen(remote)+3); 286 ftHandle = lib3270_malloc(sizeof(H3270FT)+strlen(local)+strlen(remote)+3);
297 287
298 ftHandle->host = session; 288 ftHandle->host = session;
  289 + session->ft = ftHandle;
299 290
300 ftHandle->ft_last_cr = 0; 291 ftHandle->ft_last_cr = 0;
  292 + ftHandle->ft_is_cut = 0;
301 293
302 ftHandle->ascii_flag = (flags & LIB3270_FT_OPTION_ASCII) ? 1 : 0; 294 ftHandle->ascii_flag = (flags & LIB3270_FT_OPTION_ASCII) ? 1 : 0;
303 ftHandle->cr_flag = (flags & LIB3270_FT_OPTION_CRLF) ? 1 : 0; 295 ftHandle->cr_flag = (flags & LIB3270_FT_OPTION_CRLF) ? 1 : 0;
304 ftHandle->remap_flag = (flags & LIB3270_FT_OPTION_REMAP) ? 1 : 0; 296 ftHandle->remap_flag = (flags & LIB3270_FT_OPTION_REMAP) ? 1 : 0;
305 ftHandle->unix_text = (flags & LIB3270_FT_OPTION_UNIX) ? 1 : 0; 297 ftHandle->unix_text = (flags & LIB3270_FT_OPTION_UNIX) ? 1 : 0;
306 - ftHandle->ft_is_cut = 0;  
307 ftHandle->flags = flags; 298 ftHandle->flags = flags;
308 ftHandle->local_file = ft_local_file; 299 ftHandle->local_file = ft_local_file;
309 ftHandle->state = LIB3270_FT_STATE_AWAIT_ACK; 300 ftHandle->state = LIB3270_FT_STATE_AWAIT_ACK;
@@ -331,7 +322,6 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); @@ -331,7 +322,6 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
331 ftHandle->remote = ftHandle->local + strlen(ftHandle->local)+1; 322 ftHandle->remote = ftHandle->local + strlen(ftHandle->local)+1;
332 strcpy((char *) ftHandle->remote,remote); 323 strcpy((char *) ftHandle->remote,remote);
333 324
334 - session->ft = ftHandle;  
335 325
336 lib3270_reset_ft_callbacks(session); 326 lib3270_reset_ft_callbacks(session);
337 327
src/core/session.c
@@ -465,14 +465,12 @@ void check_session_handle(H3270 **hSession) @@ -465,14 +465,12 @@ void check_session_handle(H3270 **hSession)
465 if(*hSession) 465 if(*hSession)
466 return; 466 return;
467 467
468 - *hSession = lib3270_get_default_session_handle(); 468 +// *hSession = lib3270_get_default_session_handle();
469 469
470 -#if defined(ANDROID)  
471 - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "%s called with empty session\n", __FUNCTION__);  
472 -#elif defined(DEBUG)  
473 - lib3270_write_log(*hSession, "lib3270", "%s called with empty session from %s",__FUNCTION__,fname); 470 +#if defined(DEBUG)
  471 + lib3270_write_log(NULL, "lib3270", "%s called with empty session from %s",__FUNCTION__,fname);
474 #else 472 #else
475 - lib3270_write_log(*hSession, "lib3270", "%s called with empty session",__FUNCTION__); 473 + lib3270_write_log(NULL, "lib3270", "%s called with empty session",__FUNCTION__);
476 #endif // ANDROID 474 #endif // ANDROID
477 } 475 }
478 476
src/core/util.c
@@ -60,7 +60,7 @@ char * lib3270_vsprintf(const char *fmt, va_list args) @@ -60,7 +60,7 @@ char * lib3270_vsprintf(const char *fmt, va_list args)
60 #if defined(HAVE_VASPRINTF) 60 #if defined(HAVE_VASPRINTF)
61 61
62 if(vasprintf(&r, fmt, args) < 0 || !r) 62 if(vasprintf(&r, fmt, args) < 0 || !r)
63 - lib3270_popup_dialog(lib3270_get_default_session_handle(),LIB3270_NOTIFY_ERROR,_("Internal error"),"Out of memory",NULL); 63 + lib3270_write_log(NULL, "lib3270", "Error in vasprintf");
64 64
65 #else 65 #else
66 66
@@ -70,7 +70,7 @@ char * lib3270_vsprintf(const char *fmt, va_list args) @@ -70,7 +70,7 @@ char * lib3270_vsprintf(const char *fmt, va_list args)
70 nc = vsnprintf(buf, sizeof(buf), fmt, args); 70 nc = vsnprintf(buf, sizeof(buf), fmt, args);
71 if(nc < 0) 71 if(nc < 0)
72 { 72 {
73 - lib3270_popup_dialog(lib3270_get_default_session_handle(),LIB3270_NOTIFY_ERROR,_("Internal error"),"Out of memory",NULL); 73 + lib3270_write_log(NULL, "lib3270", "Error on vsnprintf");
74 } 74 }
75 else if (nc < sizeof(buf)) 75 else if (nc < sizeof(buf))
76 { 76 {
@@ -82,7 +82,11 @@ char * lib3270_vsprintf(const char *fmt, va_list args) @@ -82,7 +82,11 @@ char * lib3270_vsprintf(const char *fmt, va_list args)
82 { 82 {
83 r = lib3270_malloc(nc + 1); 83 r = lib3270_malloc(nc + 1);
84 if(vsnprintf(r, nc, fmt, args) < 0) 84 if(vsnprintf(r, nc, fmt, args) < 0)
85 - lib3270_popup_dialog(lib3270_get_default_session_handle(),LIB3270_NOTIFY_ERROR,_("Internal error"),"Out of memory",NULL); 85 + {
  86 + lib3270_write_log(NULL, "lib3270", "Error on vsnprintf");
  87 + free(r);
  88 + return NULL;
  89 + }
86 90
87 } 91 }
88 92
@@ -176,8 +180,6 @@ LIB3270_EXPORT void lib3270_autoptr_cleanup_LIB3270_POPUP(LIB3270_POPUP **ptr) @@ -176,8 +180,6 @@ LIB3270_EXPORT void lib3270_autoptr_cleanup_LIB3270_POPUP(LIB3270_POPUP **ptr)
176 LIB3270_EXPORT void * lib3270_realloc(void *p, int len) 180 LIB3270_EXPORT void * lib3270_realloc(void *p, int len)
177 { 181 {
178 p = realloc(p, len); 182 p = realloc(p, len);
179 - if(!p)  
180 - lib3270_popup_dialog(lib3270_get_default_session_handle(),LIB3270_NOTIFY_ERROR,_("Internal error"),"Out of memory",NULL);  
181 return p; 183 return p;
182 } 184 }
183 185
@@ -192,41 +194,62 @@ LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr) @@ -192,41 +194,62 @@ LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr)
192 194
193 if(ptr) 195 if(ptr)
194 memset(ptr,0,sz); 196 memset(ptr,0,sz);
195 - else  
196 - lib3270_popup_dialog(lib3270_get_default_session_handle(),LIB3270_NOTIFY_ERROR,_("Internal error"),"Out of memory",NULL);  
197 197
198 return ptr; 198 return ptr;
199 } 199 }
200 200
201 LIB3270_EXPORT void * lib3270_malloc(int len) 201 LIB3270_EXPORT void * lib3270_malloc(int len)
202 { 202 {
203 - char *r;  
204 -  
205 - r = malloc(len);  
206 - if (r == (char *)NULL)  
207 - {  
208 - lib3270_popup_dialog(lib3270_get_default_session_handle(),LIB3270_NOTIFY_ERROR,_("Internal error"),"Out of memory",NULL);  
209 - return 0;  
210 - } 203 + char *r = malloc(len);
  204 + if(r)
  205 + memset(r,0,len);
211 206
212 - memset(r,0,len);  
213 return r; 207 return r;
214 } 208 }
215 209
216 LIB3270_EXPORT void * lib3270_strdup(const char *str) 210 LIB3270_EXPORT void * lib3270_strdup(const char *str)
217 { 211 {
218 - char *r; 212 + return strdup(str);
  213 +}
  214 +
  215 +LIB3270_EXPORT char * lib3270_chomp(char *str)
  216 +{
219 217
220 - r = strdup(str);  
221 - if (r == (char *)NULL) 218 + size_t len = strlen(str);
  219 +
  220 + while(len--)
222 { 221 {
223 - lib3270_popup_dialog(lib3270_get_default_session_handle(),LIB3270_NOTIFY_ERROR,_("Internal error"),"Out of memory",NULL);  
224 - return 0; 222 +
  223 + if(isspace(str[len]))
  224 + {
  225 + str[len] = 0;
  226 + } else {
  227 + break;
  228 + }
225 } 229 }
226 230
227 - return r; 231 + return str;
  232 +
228 } 233 }
229 234
  235 +LIB3270_EXPORT char * lib3270_chug(char *str)
  236 +{
  237 +
  238 + char *start;
  239 +
  240 + for (start = (char*) str; *start && isspace(*start); start++);
  241 +
  242 + memmove(str, start, strlen ((char *) start) + 1);
  243 +
  244 + return str;
  245 +}
  246 +
  247 +LIB3270_EXPORT char * lib3270_strip(char *str)
  248 +{
  249 + return lib3270_chomp(lib3270_chug(str));
  250 +}
  251 +
  252 +
230 LIB3270_EXPORT const char * lib3270_get_version(void) 253 LIB3270_EXPORT const char * lib3270_get_version(void)
231 { 254 {
232 return PACKAGE_VERSION; 255 return PACKAGE_VERSION;
src/include/lib3270.h
@@ -1404,11 +1404,57 @@ @@ -1404,11 +1404,57 @@
1404 */ 1404 */
1405 LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr); 1405 LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr);
1406 1406
  1407 + /**
  1408 + * @brief Get a block of memory, fill it with zeros.
  1409 + *
  1410 + * @param len Length of memory block to get.
  1411 + *
  1412 + * @return Pointer to new memory block.
  1413 + *
  1414 + */
1407 LIB3270_EXPORT void * lib3270_malloc(int len); 1415 LIB3270_EXPORT void * lib3270_malloc(int len);
  1416 +
1408 LIB3270_EXPORT void * lib3270_realloc(void *p, int len); 1417 LIB3270_EXPORT void * lib3270_realloc(void *p, int len);
1409 LIB3270_EXPORT void * lib3270_strdup(const char *str); 1418 LIB3270_EXPORT void * lib3270_strdup(const char *str);
1410 1419
1411 /** 1420 /**
  1421 + * @brief Removes trailing white space from a string.
  1422 + *
  1423 + * This function doesn't allocate or reallocate any memory;
  1424 + * it modifies in place. Therefore, it cannot be used
  1425 + * on statically allocated strings.
  1426 + *
  1427 + * Reference: <https://git.gnome.org/browse/glib/tree/glib/gstrfuncs.c>
  1428 + *
  1429 + * @see chug() and strip().
  1430 + *
  1431 + * @return pointer to string.
  1432 + *
  1433 + */
  1434 + LIB3270_EXPORT char * lib3270_chomp(char *str);
  1435 +
  1436 + /**
  1437 + * @brief Remove the leading white space from the string.
  1438 + *
  1439 + * Removes leading white space from a string, by moving the rest
  1440 + * of the characters forward.
  1441 + *
  1442 + * This function doesn't allocate or reallocate any memory;
  1443 + * it modifies the string in place. Therefore, it cannot be used on
  1444 + * statically allocated strings.
  1445 + *
  1446 + * Reference: <https://git.gnome.org/browse/glib/tree/glib/gstrfuncs.c>
  1447 + *
  1448 + * @see chomp() and strip().
  1449 + *
  1450 + * @return pointer to string.
  1451 + *
  1452 + */
  1453 + LIB3270_EXPORT char * lib3270_chug(char *str);
  1454 +
  1455 + LIB3270_EXPORT char * lib3270_strip(char *str);
  1456 +
  1457 + /**
1412 * @brief Release allocated memory. 1458 * @brief Release allocated memory.
1413 * 1459 *
1414 * @param p Memory block to release (can be NULL) 1460 * @param p Memory block to release (can be NULL)
@@ -1425,7 +1471,7 @@ @@ -1425,7 +1471,7 @@
1425 * @return Internal's lib3270 session handle. 1471 * @return Internal's lib3270 session handle.
1426 * 1472 *
1427 */ 1473 */
1428 - LIB3270_EXPORT H3270 * lib3270_get_default_session_handle(void); 1474 + LIB3270_EXPORT H3270 * LIB3270_DEPRECATED(lib3270_get_default_session_handle(void));
1429 1475
1430 /** 1476 /**
1431 * Get library version. 1477 * Get library version.