Commit 3da753a3f7023389c492e8ad1ce61ced613db3a3
1 parent
c29be795
Exists in
master
and in
2 other branches
Fixing windows build.
Showing
4 changed files
with
36 additions
and
25 deletions
Show diff stats
configure.ac
| ... | ... | @@ -539,6 +539,7 @@ AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG,,[do we have syslog.h?])) |
| 539 | 539 | AC_CHECK_FUNCS(getaddrinfo, AC_DEFINE(HAVE_GETADDRINFO) ) |
| 540 | 540 | AC_CHECK_FUNC(vasprintf, AC_DEFINE(HAVE_VASPRINTF) ) |
| 541 | 541 | AC_CHECK_FUNC(strtok_r, AC_DEFINE(HAVE_STRTOK_R) ) |
| 542 | +AC_CHECK_FUNC(localtime_r, AC_DEFINE(HAVE_LOCALTIME_R) ) | |
| 542 | 543 | |
| 543 | 544 | AC_ARG_WITH([inet-ntop], [AS_HELP_STRING([--with-inet-ntop], [Assume that inet_nto() is available])], [ app_cv_inet_ntop="$withval" ],[ app_cv_inet_ntop="auto" ]) |
| 544 | 545 | ... | ... |
src/core/rpq.c
| ... | ... | @@ -273,9 +273,7 @@ void do_qr_rpqnames(H3270 *hSession) |
| 273 | 273 | rpq_dump_warnings(hSession); |
| 274 | 274 | } |
| 275 | 275 | |
| 276 | -/** | |
| 277 | - * @brief Utility function used by the RPQNAMES query reply. | |
| 278 | - */ | |
| 276 | +/// @brief Utility function used by the RPQNAMES query reply. | |
| 279 | 277 | static Boolean select_rpq_terms(H3270 *hSession) |
| 280 | 278 | { |
| 281 | 279 | int i,j,k,len; |
| ... | ... | @@ -438,6 +436,8 @@ static int get_rpq_timezone(H3270 *hSession) |
| 438 | 436 | } |
| 439 | 437 | |
| 440 | 438 | |
| 439 | +#ifdef HAVE_LOCALTIME_R | |
| 440 | + | |
| 441 | 441 | localtime_r(&here,&here_tm); |
| 442 | 442 | |
| 443 | 443 | if(gmtime_r(&here,&utc_tm) == NULL) |
| ... | ... | @@ -446,23 +446,27 @@ static int get_rpq_timezone(H3270 *hSession) |
| 446 | 446 | return 2; |
| 447 | 447 | } |
| 448 | 448 | |
| 449 | - /* | |
| 449 | +#else | |
| 450 | + | |
| 450 | 451 | memcpy(&here_tm, localtime(&here), sizeof(struct tm)); |
| 452 | + struct tm * _tm = gmtime(&here); | |
| 451 | 453 | |
| 452 | - if ((utc_tm = gmtime(&here)) == NULL) | |
| 454 | + if(_tm == NULL) | |
| 453 | 455 | { |
| 454 | 456 | rpq_warning(hSession, _("RPQ: Unable to determine workstation UTC time")); |
| 455 | 457 | return 2; |
| 456 | 458 | } |
| 457 | - */ | |
| 458 | 459 | |
| 459 | - /* | |
| 460 | - * Do not take Daylight Saving Time into account. | |
| 461 | - * We just want the "raw" time difference. | |
| 462 | - */ | |
| 460 | + memcpy(&utc_tm,_tm,sizeof(struct tm)); | |
| 461 | + | |
| 462 | +#endif // HAVE_LOCALTIME_R | |
| 463 | + | |
| 464 | + // Do not take Daylight Saving Time into account. | |
| 465 | + // We just want the "raw" time difference. | |
| 463 | 466 | here_tm.tm_isdst = 0; |
| 464 | 467 | utc_tm.tm_isdst = 0; |
| 465 | 468 | delta = difftime(mktime(&here_tm), mktime(&utc_tm)) / 60L; |
| 469 | + | |
| 466 | 470 | } |
| 467 | 471 | |
| 468 | 472 | // sanity check: difference cannot exceed +/- 12 hours |
| ... | ... | @@ -480,20 +484,20 @@ static int get_rpq_timezone(H3270 *hSession) |
| 480 | 484 | */ |
| 481 | 485 | static int get_rpq_user(H3270 *hSession, unsigned char buf[], const int buflen) |
| 482 | 486 | { |
| 483 | - /* | |
| 484 | - * Text may be specified in one of two ways, but not both. | |
| 485 | - * An environment variable provides the user interface: | |
| 486 | - * - X3270RPQ: Keyword USER= | |
| 487 | - * | |
| 488 | - * NOTE: If the string begins with 0x then no ASCII/EBCDIC | |
| 489 | - * translation is done. The hex characters will be sent as true hex | |
| 490 | - * data. E.g., X3270RPQ="user=0x ab 12 EF" will result in 3 bytes | |
| 491 | - * sent as 0xAB12EF. White space is optional in hex data format. | |
| 492 | - * When hex format is required, the 0x prefix must be the first two | |
| 493 | - * characters of the string. E.g., X3270RPQ="user= 0X AB" will | |
| 494 | - * result in 6 bytes sent as 0x40F0E740C1C2 because the text is | |
| 495 | - * accepted "as is" then translated from ASCII to EBCDIC. | |
| 496 | - */ | |
| 487 | + // | |
| 488 | + // Text may be specified in one of two ways, but not both. | |
| 489 | + // An environment variable provides the user interface: | |
| 490 | + // - X3270RPQ: Keyword USER= | |
| 491 | + // | |
| 492 | + // NOTE: If the string begins with 0x then no ASCII/EBCDIC | |
| 493 | + // translation is done. The hex characters will be sent as true hex | |
| 494 | + // data. E.g., X3270RPQ="user=0x ab 12 EF" will result in 3 bytes | |
| 495 | + // sent as 0xAB12EF. White space is optional in hex data format. | |
| 496 | + // When hex format is required, the 0x prefix must be the first two | |
| 497 | + // characters of the string. E.g., X3270RPQ="user= 0X AB" will | |
| 498 | + // result in 6 bytes sent as 0x40F0E740C1C2 because the text is | |
| 499 | + // accepted "as is" then translated from ASCII to EBCDIC. | |
| 500 | + // | |
| 497 | 501 | const char *rpqtext = CN; |
| 498 | 502 | int x; |
| 499 | 503 | struct rpq_keyword *kw; | ... | ... |
src/core/telnet.c
| ... | ... | @@ -2154,9 +2154,14 @@ void trace_netdata(H3270 *hSession, char direction, unsigned const char *buf, in |
| 2154 | 2154 | |
| 2155 | 2155 | { |
| 2156 | 2156 | time_t ltime; |
| 2157 | - struct tm tm; | |
| 2158 | 2157 | time(<ime); |
| 2158 | + | |
| 2159 | +#ifdef HAVE_LOCALTIME_R | |
| 2160 | + struct tm tm; | |
| 2159 | 2161 | strftime(l1, 81, "%x %X", localtime_r(<ime,&tm)); |
| 2162 | +#else | |
| 2163 | + strftime(l1, 81, "%x %X", localtime(<ime)); | |
| 2164 | +#endif // HAVE_LOCALTIME_R | |
| 2160 | 2165 | } |
| 2161 | 2166 | |
| 2162 | 2167 | lib3270_write_nettrace(hSession,"%c %s %s data len=%d\n\n",direction,l1,direction == '>' ? "SEND" : "RECV", len); | ... | ... |