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. |