Commit 47b964ab20db7a7e69dded4b21570f43b96cfb73
1 parent
e3de3fcb
Exists in
master
and in
2 other branches
Adding utility functions.
Showing
4 changed files
with
98 additions
and
41 deletions
Show diff stats
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. |