Commit 4b647f996b520943832ece617a55132c6d3308da
1 parent
8df67fe2
Exists in
master
and in
5 other branches
Trabalhando no bug relativo à transferência de arquivos binários
Showing
1 changed file
with
21 additions
and
8 deletions
Show diff stats
src/lib3270/ft_dft.c
| ... | ... | @@ -391,16 +391,20 @@ static void dft_get_request(H3270 *hSession) |
| 391 | 391 | { |
| 392 | 392 | if (ft->ascii_flag && ft->cr_flag) |
| 393 | 393 | { |
| 394 | + // ASCII text file | |
| 395 | + | |
| 394 | 396 | int c; |
| 395 | 397 | |
| 396 | 398 | /* Read one byte and do CR/LF translation. */ |
| 397 | 399 | c = fgetc(ft->local_file); |
| 398 | - if (c == EOF) { | |
| 400 | + if (c == EOF) | |
| 401 | + { | |
| 399 | 402 | break; |
| 400 | 403 | } |
| 401 | 404 | if (!ft->ft_last_cr && c == '\n') |
| 402 | 405 | { |
| 403 | - if (numbytes < 2) { | |
| 406 | + if (numbytes < 2) | |
| 407 | + { | |
| 404 | 408 | /* |
| 405 | 409 | * Not enough room to expand NL to |
| 406 | 410 | * CR/LF. |
| ... | ... | @@ -416,14 +420,20 @@ static void dft_get_request(H3270 *hSession) |
| 416 | 420 | *bufptr++ = ft->remap_flag ? ft->charset.asc2ebc[c]: c; |
| 417 | 421 | numbytes--; |
| 418 | 422 | total_read++; |
| 419 | - } else { | |
| 423 | + } | |
| 424 | + else | |
| 425 | + { | |
| 420 | 426 | /* Binary read. */ |
| 421 | 427 | numread = fread(bufptr, 1, numbytes, ft->local_file); |
| 422 | - if (numread <= 0) { | |
| 428 | + if (numread <= 0) | |
| 429 | + { | |
| 430 | + lib3270_write_log(hSession,"Error %s reading source file (rc=%d)",strerror(errno),errno); | |
| 423 | 431 | break; |
| 424 | 432 | } |
| 433 | + | |
| 425 | 434 | if (ft->ascii_flag && ft->remap_flag) |
| 426 | 435 | { |
| 436 | + // Remap charset | |
| 427 | 437 | unsigned char *s = bufptr; |
| 428 | 438 | int i = numread; |
| 429 | 439 | |
| ... | ... | @@ -434,10 +444,11 @@ static void dft_get_request(H3270 *hSession) |
| 434 | 444 | i--; |
| 435 | 445 | } |
| 436 | 446 | } |
| 437 | - bufptr += numread; | |
| 438 | - numbytes -= numread; | |
| 439 | - total_read += numread; | |
| 447 | + bufptr += numread; | |
| 448 | + numbytes -= numread; | |
| 449 | + total_read += numread; | |
| 440 | 450 | } |
| 451 | + | |
| 441 | 452 | if (feof(ft->local_file) || ferror(ft->local_file)) |
| 442 | 453 | { |
| 443 | 454 | break; |
| ... | ... | @@ -476,7 +487,9 @@ static void dft_get_request(H3270 *hSession) |
| 476 | 487 | ft->dft_eof = 1; |
| 477 | 488 | } |
| 478 | 489 | |
| 479 | - } else { | |
| 490 | + } | |
| 491 | + else | |
| 492 | + { | |
| 480 | 493 | trace_ds(hSession,"> WriteStructuredField FileTransferData EOF\n"); |
| 481 | 494 | *hSession->obptr++ = HIGH8(TR_GET_REQ); |
| 482 | 495 | *hSession->obptr++ = TR_ERROR_REPLY; | ... | ... |