Changeset 0260034 in mainline for uspace/lib/c/generic/strtol.c
- Timestamp:
- 2019-05-27T16:17:33Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- dd0502ae
- Parents:
- 31a566b
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2019-05-27 15:44:21)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2019-05-27 16:17:33)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/strtol.c
r31a566b r0260034 77 77 78 78 if (nptr[1] == 'x' || nptr[1] == 'X') { 79 *nptrptr += 2; 80 return 16; 79 if (_digit_value(nptr[2]) < 16) { 80 *nptrptr += 2; 81 return 16; 82 } 81 83 } 82 84 … … 85 87 case 'b': 86 88 case 'B': 87 *nptrptr += 2; 88 return 2; 89 if (_digit_value(nptr[2]) < 2) { 90 *nptrptr += 2; 91 return 2; 92 } 93 break; 89 94 case 'o': 90 95 case 'O': 91 *nptrptr += 2; 92 return 8; 96 if (_digit_value(nptr[2]) < 8) { 97 *nptrptr += 2; 98 return 8; 99 } 100 break; 93 101 case 'd': 94 102 case 'D': 95 103 case 't': 96 104 case 'T': 97 *nptrptr += 2; 98 return 10; 105 if (_digit_value(nptr[2]) < 10) { 106 *nptrptr += 2; 107 return 10; 108 } 109 break; 99 110 } 100 111 } … … 109 120 assert(nptr != NULL); 110 121 assert(sgn != NULL); 122 123 const char *first = nptr; 111 124 112 125 /* Skip leading whitespace. */ … … 138 151 * present when base is explicitly set to 16. 139 152 * Our nonstandard str_* functions don't allow it. 153 * I don't know if that is intended, just matching the original 154 * functionality here. 140 155 */ 141 156 142 if (nptr[0] == '0' && (nptr[1] == 'x' || nptr[1] == 'X')) 157 if (nptr[0] == '0' && (nptr[1] == 'x' || nptr[1] == 'X') && 158 _digit_value(nptr[2]) < base) 143 159 nptr += 2; 144 160 } … … 149 165 } 150 166 151 /* Read the value. */ 167 /* Must be at least one digit. */ 168 169 if (_digit_value(*nptr) >= base) { 170 /* No digits on input. */ 171 if (endptr != NULL) 172 *endptr = (char *) first; 173 return 0; 174 } 175 176 /* Read the value. */ 152 177 153 178 uintmax_t result = 0;
Note:
See TracChangeset
for help on using the changeset viewer.