Commit e0256fd4ebd386113ccf7ab2d87e140b82aeb2d6
1 parent
538f302a
Exists in
master
and in
3 other branches
Removing warnings, adding macro for test online mode in API calls.
Showing
4 changed files
with
42 additions
and
12 deletions
Show diff stats
src/include/lib3270.h
| ... | ... | @@ -1035,7 +1035,7 @@ |
| 1035 | 1035 | * @param c Pointer to character. |
| 1036 | 1036 | * @param attr Pointer to attribute. |
| 1037 | 1037 | * |
| 1038 | - * @return 0 if ok or error code. | |
| 1038 | + * @return 0 if ok, -1 if fails (sets errno). | |
| 1039 | 1039 | * |
| 1040 | 1040 | */ |
| 1041 | 1041 | LIB3270_EXPORT int lib3270_get_element(H3270 *h, int baddr, unsigned char *c, unsigned short *attr); | ... | ... |
src/lib3270/private.h
| ... | ... | @@ -633,6 +633,11 @@ LIB3270_INTERNAL int lib3270_default_event_dispatcher(H3270 *hSession, int block |
| 633 | 633 | LIB3270_INTERNAL void check_session_handle(H3270 **hSession); |
| 634 | 634 | #endif // DEBUG |
| 635 | 635 | |
| 636 | +LIB3270_INTERNAL int check_online_session(H3270 *hSession); | |
| 637 | + | |
| 638 | +/// @brief Returns -1 if the session is invalid or not online (sets errno). | |
| 639 | +#define FAIL_IF_NOT_ONLINE(x) if(check_online_session(x)) return -1; | |
| 640 | + | |
| 636 | 641 | LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on); |
| 637 | 642 | |
| 638 | 643 | #if defined(HAVE_LIBSSL) /*[*/ | ... | ... |
src/lib3270/screen.c
| ... | ... | @@ -98,15 +98,18 @@ static void addch(H3270 *session, int baddr, unsigned char c, unsigned short att |
| 98 | 98 | session->cbk.update(session,baddr,c,attr,baddr == session->cursor_addr); |
| 99 | 99 | } |
| 100 | 100 | |
| 101 | -LIB3270_EXPORT int lib3270_get_element(H3270 *h, int baddr, unsigned char *c, unsigned short *attr) | |
| 101 | +LIB3270_EXPORT int lib3270_get_element(H3270 *hSession, int baddr, unsigned char *c, unsigned short *attr) | |
| 102 | 102 | { |
| 103 | - CHECK_SESSION_HANDLE(h); | |
| 103 | + FAIL_IF_NOT_ONLINE(hSession); | |
| 104 | 104 | |
| 105 | - if(!h->text || baddr < 0 || baddr > (h->rows*h->cols)) | |
| 106 | - return EINVAL; | |
| 105 | + if(!hSession->text || baddr < 0 || baddr > (hSession->rows*hSession->cols)) | |
| 106 | + { | |
| 107 | + errno = EINVAL; | |
| 108 | + return -1; | |
| 109 | + } | |
| 107 | 110 | |
| 108 | - *c = h->text[baddr].chr; | |
| 109 | - *attr = h->text[baddr].attr; | |
| 111 | + *c = hSession->text[baddr].chr; | |
| 112 | + *attr = hSession->text[baddr].attr; | |
| 110 | 113 | |
| 111 | 114 | return 0; |
| 112 | 115 | } |
| ... | ... | @@ -394,7 +397,7 @@ LIB3270_EXPORT int lib3270_get_cursor_address(H3270 *h) |
| 394 | 397 | */ |
| 395 | 398 | LIB3270_EXPORT int lib3270_translate_to_address(H3270 *hSession, int row, int col) |
| 396 | 399 | { |
| 397 | - CHECK_SESSION_HANDLE(hSession); | |
| 400 | + FAIL_IF_NOT_ONLINE(hSession); | |
| 398 | 401 | |
| 399 | 402 | row--; |
| 400 | 403 | col--; |
| ... | ... | @@ -423,7 +426,7 @@ LIB3270_EXPORT int lib3270_translate_to_address(H3270 *hSession, int row, int co |
| 423 | 426 | */ |
| 424 | 427 | LIB3270_EXPORT int lib3270_set_cursor_address(H3270 *hSession, int baddr) |
| 425 | 428 | { |
| 426 | - CHECK_SESSION_HANDLE(hSession); | |
| 429 | + FAIL_IF_NOT_ONLINE(hSession); | |
| 427 | 430 | |
| 428 | 431 | trace("%s(%d)",__FUNCTION__,baddr); |
| 429 | 432 | |
| ... | ... | @@ -877,10 +880,10 @@ LIB3270_ACTION( testpattern ) |
| 877 | 880 | |
| 878 | 881 | static const unsigned char gr[] = { 0, GR_UNDERLINE, GR_BLINK }; |
| 879 | 882 | |
| 880 | - int row = 0; | |
| 883 | + unsigned int row = 0; | |
| 881 | 884 | int max; |
| 882 | 885 | int pos = 0; |
| 883 | - int grpos = 0; | |
| 886 | + unsigned int grpos = 0; | |
| 884 | 887 | int f; |
| 885 | 888 | int fg = COLOR_BLUE; |
| 886 | 889 | |
| ... | ... | @@ -933,10 +936,13 @@ LIB3270_EXPORT int lib3270_is_protected(H3270 *h, unsigned int baddr) |
| 933 | 936 | { |
| 934 | 937 | unsigned char fa; |
| 935 | 938 | |
| 936 | - CHECK_SESSION_HANDLE(h); | |
| 939 | + FAIL_IF_NOT_ONLINE(h); | |
| 937 | 940 | |
| 938 | 941 | if(baddr > (h->rows * h->cols)) |
| 942 | + { | |
| 943 | + errno = EINVAL; | |
| 939 | 944 | return -1; |
| 945 | + } | |
| 940 | 946 | |
| 941 | 947 | fa = get_field_attribute(h,baddr); |
| 942 | 948 | ... | ... |
src/lib3270/session.c
| ... | ... | @@ -388,6 +388,25 @@ void check_session_handle(H3270 **hSession) |
| 388 | 388 | #endif // ANDROID |
| 389 | 389 | } |
| 390 | 390 | |
| 391 | +LIB3270_INTERNAL int check_online_session(H3270 *hSession) { | |
| 392 | + | |
| 393 | + // Is the session valid? | |
| 394 | + if(!hSession) | |
| 395 | + { | |
| 396 | + errno = EINVAL; | |
| 397 | + return -1; | |
| 398 | + } | |
| 399 | + | |
| 400 | + // Is it connected? | |
| 401 | + if((int) hSession->cstate < (int)LIB3270_CONNECTED_INITIAL) | |
| 402 | + { | |
| 403 | + errno = ENOTCONN; | |
| 404 | + return -1; | |
| 405 | + } | |
| 406 | + | |
| 407 | + return 0; | |
| 408 | +} | |
| 409 | + | |
| 391 | 410 | LIB3270_EXPORT H3270 * lib3270_get_default_session_handle(void) |
| 392 | 411 | { |
| 393 | 412 | if(default_session) | ... | ... |