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 258 H3270FT * ftHandle = (H3270FT *) session->ft;
259 259 FILE * ft_local_file = NULL;
260 260 int f;
261   -// unsigned long length = 0L;
262 261  
263   -// trace("%s(%s)",__FUNCTION__,local);
264 262 if(!lib3270_is_connected(session))
265   - {
266 263 return ft_creation_failed(session,ENOTCONN,message,_( "Disconnected from host." ));
267   - }
268 264  
269 265 if(ftHandle)
270   - {
271 266 return ft_creation_failed(session,EBUSY,message,_( "File transfer is already active in this session." ));
272   - }
273 267  
274 268 // Check remote file
275 269 if(!*remote)
276   - {
277 270 return ft_creation_failed(session,EINVAL,message,_( "The remote file name is invalid." ));
278   - }
279 271  
280 272 // Open local file
281 273 #ifdef _WIN32
... ... @@ -285,9 +277,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
285 277 #endif // _WIN32
286 278  
287 279 if(!ft_local_file)
288   - {
289 280 return ft_creation_failed(session,errno,message,strerror(errno));
290   - }
291 281  
292 282 // Set options
293 283 lib3270_set_dft_buffersize(session, dft);
... ... @@ -296,14 +286,15 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
296 286 ftHandle = lib3270_malloc(sizeof(H3270FT)+strlen(local)+strlen(remote)+3);
297 287  
298 288 ftHandle->host = session;
  289 + session->ft = ftHandle;
299 290  
300 291 ftHandle->ft_last_cr = 0;
  292 + ftHandle->ft_is_cut = 0;
301 293  
302 294 ftHandle->ascii_flag = (flags & LIB3270_FT_OPTION_ASCII) ? 1 : 0;
303 295 ftHandle->cr_flag = (flags & LIB3270_FT_OPTION_CRLF) ? 1 : 0;
304 296 ftHandle->remap_flag = (flags & LIB3270_FT_OPTION_REMAP) ? 1 : 0;
305 297 ftHandle->unix_text = (flags & LIB3270_FT_OPTION_UNIX) ? 1 : 0;
306   - ftHandle->ft_is_cut = 0;
307 298 ftHandle->flags = flags;
308 299 ftHandle->local_file = ft_local_file;
309 300 ftHandle->state = LIB3270_FT_STATE_AWAIT_ACK;
... ... @@ -331,7 +322,6 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state);
331 322 ftHandle->remote = ftHandle->local + strlen(ftHandle->local)+1;
332 323 strcpy((char *) ftHandle->remote,remote);
333 324  
334   - session->ft = ftHandle;
335 325  
336 326 lib3270_reset_ft_callbacks(session);
337 327  
... ...
src/core/session.c
... ... @@ -465,14 +465,12 @@ void check_session_handle(H3270 **hSession)
465 465 if(*hSession)
466 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 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 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 60 #if defined(HAVE_VASPRINTF)
61 61  
62 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 65 #else
66 66  
... ... @@ -70,7 +70,7 @@ char * lib3270_vsprintf(const char *fmt, va_list args)
70 70 nc = vsnprintf(buf, sizeof(buf), fmt, args);
71 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 75 else if (nc < sizeof(buf))
76 76 {
... ... @@ -82,7 +82,11 @@ char * lib3270_vsprintf(const char *fmt, va_list args)
82 82 {
83 83 r = lib3270_malloc(nc + 1);
84 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 180 LIB3270_EXPORT void * lib3270_realloc(void *p, int len)
177 181 {
178 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 183 return p;
182 184 }
183 185  
... ... @@ -192,41 +194,62 @@ LIB3270_EXPORT void * lib3270_calloc(int elsize, int nelem, void *ptr)
192 194  
193 195 if(ptr)
194 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 198 return ptr;
199 199 }
200 200  
201 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 207 return r;
214 208 }
215 209  
216 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 253 LIB3270_EXPORT const char * lib3270_get_version(void)
231 254 {
232 255 return PACKAGE_VERSION;
... ...
src/include/lib3270.h
... ... @@ -1404,11 +1404,57 @@
1404 1404 */
1405 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 1415 LIB3270_EXPORT void * lib3270_malloc(int len);
  1416 +
1408 1417 LIB3270_EXPORT void * lib3270_realloc(void *p, int len);
1409 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 1458 * @brief Release allocated memory.
1413 1459 *
1414 1460 * @param p Memory block to release (can be NULL)
... ... @@ -1425,7 +1471,7 @@
1425 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 1477 * Get library version.
... ...