Changeset 9d8307a in mainline for uspace/lib/c/generic/stdio/scanf.c
- Timestamp:
- 2018-07-19T11:55:19Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0d83cf6f
- Parents:
- 42f5860
- git-author:
- Jiri Svoboda <jiri@…> (2018-07-18 17:54:45)
- git-committer:
- Jiri Svoboda <jiri@…> (2018-07-19 11:55:19)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/stdio/scanf.c
r42f5860 r9d8307a 46 46 #include <stdio.h> 47 47 #include <stdlib.h> 48 49 #include "../private/scanf.h" 48 50 49 51 typedef enum { … … 348 350 * @return EOK on success, ENOMEM if out of memory 349 351 */ 350 static int strbuf_init(strbuf_t *strbuf, cvtspec_t *spec, va_encaps_t *va)352 static errno_t strbuf_init(strbuf_t *strbuf, cvtspec_t *spec, va_encaps_t *va) 351 353 { 352 354 if (spec->noassign) { … … 393 395 * @return EOK on sucess, ENOMEM if out of memory 394 396 */ 395 static int strbuf_write(strbuf_t *strbuf, size_t idx, char c)397 static errno_t strbuf_write(strbuf_t *strbuf, size_t idx, char c) 396 398 { 397 399 if (strbuf->memalloc && idx >= strbuf->size) { … … 449 451 450 452 /* Skip whitespace in input stream */ 451 static int vfscanf_skip_ws(FILE *f, int *numchar)453 static errno_t vfscanf_skip_ws(FILE *f, int *numchar) 452 454 { 453 455 int c; … … 471 473 472 474 /* Match whitespace. */ 473 static int vfscanf_match_ws(FILE *f, int *numchar, const char **fmt)474 { 475 int rc;475 static errno_t vfscanf_match_ws(FILE *f, int *numchar, const char **fmt) 476 { 477 errno_t rc; 476 478 477 479 rc = vfscanf_skip_ws(f, numchar); … … 492 494 * @return EOK on success, EIO on I/O error, EINVAL if input is not valid 493 495 */ 494 static int __fstrtoimax(FILE *f, int *numchar, int base, size_t width,496 static errno_t __fstrtoimax(FILE *f, int *numchar, int base, size_t width, 495 497 intmax_t *dest) 496 498 { 499 errno_t rc; 497 500 int c; 498 501 intmax_t v; 499 502 int digit; 500 503 int sign; 504 505 rc = vfscanf_skip_ws(f, numchar); 506 if (rc == EIO) 507 return EIO; 501 508 502 509 c = __fgetc(f, numchar); … … 579 586 * @return EOK on success, EIO on I/O error, EINVAL if input is not valid 580 587 */ 581 static int __fstrtoumax(FILE *f, int *numchar, int base, size_t width,588 static errno_t __fstrtoumax(FILE *f, int *numchar, int base, size_t width, 582 589 uintmax_t *dest) 583 590 { 591 errno_t rc; 584 592 int c; 585 593 uintmax_t v; 586 594 int digit; 595 596 rc = vfscanf_skip_ws(f, numchar); 597 if (rc == EIO) 598 return EIO; 587 599 588 600 c = __fgetc(f, numchar); … … 653 665 * @return EOK on success, EIO on I/O error, EINVAL if input is not valid 654 666 */ 655 static int __fstrtold(FILE *f, int *numchar, size_t width, long double *dest) 656 { 667 errno_t __fstrtold(FILE *f, int *numchar, size_t width, 668 long double *dest) 669 { 670 errno_t rc; 657 671 int c; 658 672 long double v; … … 665 679 int exp; 666 680 int expsign; 681 682 rc = vfscanf_skip_ws(f, numchar); 683 if (rc == EIO) 684 return EIO; 667 685 668 686 c = __fgetc(f, numchar); … … 823 841 824 842 /* Read characters from stream */ 825 static int __fgetchars(FILE *f, int *numchar, size_t width, strbuf_t *strbuf,826 s ize_t *nread)843 static errno_t __fgetchars(FILE *f, int *numchar, size_t width, 844 strbuf_t *strbuf, size_t *nread) 827 845 { 828 846 size_t cnt; 829 847 int c; 830 int rc; 831 848 errno_t rc; 849 850 *nread = 0; 832 851 for (cnt = 0; cnt < width; cnt++) { 833 852 c = __fgetc(f, numchar); … … 849 868 850 869 /* Read non-whitespace string from stream */ 851 static int __fgetstr(FILE *f, int *numchar, size_t width, strbuf_t *strbuf,870 static errno_t __fgetstr(FILE *f, int *numchar, size_t width, strbuf_t *strbuf, 852 871 size_t *nread) 853 872 { 854 873 size_t cnt; 855 874 int c; 856 int rc; 857 int rc2; 875 errno_t rc; 876 errno_t rc2; 877 878 *nread = 0; 879 880 rc = vfscanf_skip_ws(f, numchar); 881 if (rc == EIO) 882 return EIO; 858 883 859 884 rc = EOK; … … 949 974 950 975 /* Read string of characters from scanset from stream */ 951 static int __fgetscanstr(FILE *f, int *numchar, size_t width,976 static errno_t __fgetscanstr(FILE *f, int *numchar, size_t width, 952 977 const char *scanset, strbuf_t *strbuf, size_t *nread) 953 978 { 954 979 size_t cnt; 955 980 int c; 956 int rc;957 int rc2;981 errno_t rc; 982 errno_t rc2; 958 983 959 984 rc = EOK; … … 990 1015 991 1016 /** Perform a single conversion. */ 992 static int vfscanf_cvt(FILE *f, const char **fmt, va_encaps_t *va,1017 static errno_t vfscanf_cvt(FILE *f, const char **fmt, va_encaps_t *va, 993 1018 int *numchar, unsigned *ncvt) 994 1019 { 995 int rc;1020 errno_t rc; 996 1021 int c; 997 1022 intmax_t ival; … … 1027 1052 cvtspec_parse(fmt, &cvtspec); 1028 1053 1029 if (cvtspec.spcr != cs_set && cvtspec.spcr != cs_char &&1030 cvtspec.spcr != cs_numchar) {1031 /* Skip whitespace */1032 rc = vfscanf_skip_ws(f, numchar);1033 if (rc == EIO)1034 return EIO;1035 1036 assert(rc == EOK);1037 }1038 1039 1054 width = cvtspec.have_width ? cvtspec.width : SIZE_MAX; 1040 1055 … … 1042 1057 case cs_percent: 1043 1058 /* Match % character */ 1059 rc = vfscanf_skip_ws(f, numchar); 1060 if (rc == EOF) 1061 return EIO; 1062 1044 1063 c = __fgetc(f, numchar); 1045 1064 if (c == EOF)
Note:
See TracChangeset
for help on using the changeset viewer.