Overview
| Comment: | Set errno to 0 before calling strto*
It is not guaranteed that errno is set to 0 when there is no |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
04bb18457a87d3d890ffd7f808432b4e |
| User & Date: | js on 2020-08-13 19:43:33 |
| Other Links: | manifest | tags |
Context
|
2020-08-13
| ||
| 19:49 | Work around amiga-gcc missing strto(u)ll (check-in: 138410a925 user: js tags: trunk) | |
| 19:43 | Set errno to 0 before calling strto* (check-in: 04bb18457a user: js tags: trunk) | |
| 19:27 | Always cast argument to isspace() to unsigned char (check-in: ce5dfd4a83 user: js tags: trunk) | |
Changes
Modified src/OFString.m from [fbf885bed7] to [3a36a1ae89].
| ︙ | |||
2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 | 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 | + |
- (long long)longLongValueWithBase: (int)base
{
void *pool = objc_autoreleasePoolPush();
const char *UTF8String = self.UTF8String;
char *endPointer = NULL;
long long value;
errno = 0;
value = strtoll(UTF8String, &endPointer, base);
if ((value == LLONG_MIN || value == LLONG_MAX) && errno == ERANGE)
@throw [OFOutOfRangeException exception];
/* Check if there are any invalid chars left */
if (endPointer != NULL)
|
| ︙ | |||
2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 | 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 | + | /* Use isspace since strtoull uses the same. */ while (isspace((unsigned char)*UTF8String)) UTF8String++; if (*UTF8String == '-') @throw [OFInvalidFormatException exception]; errno = 0; value = strtoull(UTF8String, &endPointer, base); if (value == ULLONG_MAX && errno == ERANGE) @throw [OFOutOfRangeException exception]; /* Check if there are any invalid chars left */ if (endPointer != NULL) |
| ︙ | |||
2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 | 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 | + | const char *UTF8String = [self stringByReplacingOccurrencesOfString: @"." withString: decimalPoint].UTF8String; #endif char *endPointer = NULL; float value; errno = 0; #ifdef HAVE_STRTOF_L value = strtof_l(UTF8String, &endPointer, cLocale); #else value = strtof(UTF8String, &endPointer); #endif if (value == HUGE_VALF) |
| ︙ | |||
2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 | 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 | + | const char *UTF8String = [self stringByReplacingOccurrencesOfString: @"." withString: decimalPoint].UTF8String; #endif char *endPointer = NULL; double value; errno = 0; #ifdef HAVE_STRTOD_L value = strtod_l(UTF8String, &endPointer, cLocale); #else value = strtod(UTF8String, &endPointer); #endif if (value == HUGE_VAL) |
| ︙ |