diff options
Diffstat (limited to 'gl/printf-parse.c')
| -rw-r--r-- | gl/printf-parse.c | 55 |
1 files changed, 20 insertions, 35 deletions
diff --git a/gl/printf-parse.c b/gl/printf-parse.c index 23cacc1d..3040749a 100644 --- a/gl/printf-parse.c +++ b/gl/printf-parse.c | |||
| @@ -1,18 +1,18 @@ | |||
| 1 | /* Formatted output to strings. | 1 | /* Formatted output to strings. |
| 2 | Copyright (C) 1999-2000, 2002-2003, 2006-2013 Free Software Foundation, Inc. | 2 | Copyright (C) 1999-2000, 2002-2003, 2006-2023 Free Software Foundation, Inc. |
| 3 | 3 | ||
| 4 | This program is free software; you can redistribute it and/or modify | 4 | This file is free software: you can redistribute it and/or modify |
| 5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU Lesser General Public License as |
| 6 | the Free Software Foundation; either version 3, or (at your option) | 6 | published by the Free Software Foundation; either version 2.1 of the |
| 7 | any later version. | 7 | License, or (at your option) any later version. |
| 8 | 8 | ||
| 9 | This program is distributed in the hope that it will be useful, | 9 | This file is distributed in the hope that it will be useful, |
| 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 | GNU General Public License for more details. | 12 | GNU Lesser General Public License for more details. |
| 13 | 13 | ||
| 14 | You should have received a copy of the GNU General Public License along | 14 | You should have received a copy of the GNU Lesser General Public License |
| 15 | with this program; if not, see <http://www.gnu.org/licenses/>. */ | 15 | along with this program. If not, see <https://www.gnu.org/licenses/>. */ |
| 16 | 16 | ||
| 17 | /* This file can be parametrized with the following macros: | 17 | /* This file can be parametrized with the following macros: |
| 18 | CHAR_T The element type of the format string. | 18 | CHAR_T The element type of the format string. |
| @@ -48,16 +48,7 @@ | |||
| 48 | #include <stddef.h> | 48 | #include <stddef.h> |
| 49 | 49 | ||
| 50 | /* Get intmax_t. */ | 50 | /* Get intmax_t. */ |
| 51 | #if defined IN_LIBINTL || defined IN_LIBASPRINTF | 51 | #include <stdint.h> |
| 52 | # if HAVE_STDINT_H_WITH_UINTMAX | ||
| 53 | # include <stdint.h> | ||
| 54 | # endif | ||
| 55 | # if HAVE_INTTYPES_H_WITH_UINTMAX | ||
| 56 | # include <inttypes.h> | ||
| 57 | # endif | ||
| 58 | #else | ||
| 59 | # include <stdint.h> | ||
| 60 | #endif | ||
| 61 | 52 | ||
| 62 | /* malloc(), realloc(), free(). */ | 53 | /* malloc(), realloc(), free(). */ |
| 63 | #include <stdlib.h> | 54 | #include <stdlib.h> |
| @@ -419,7 +410,7 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
| 419 | cp++; | 410 | cp++; |
| 420 | } | 411 | } |
| 421 | #endif | 412 | #endif |
| 422 | #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ | 413 | #if defined _WIN32 && ! defined __CYGWIN__ |
| 423 | /* On native Windows, PRIdMAX is defined as "I64d". | 414 | /* On native Windows, PRIdMAX is defined as "I64d". |
| 424 | We cannot change it to "lld" because PRIdMAX must also | 415 | We cannot change it to "lld" because PRIdMAX must also |
| 425 | be understood by the system's printf routines. */ | 416 | be understood by the system's printf routines. */ |
| @@ -447,14 +438,12 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
| 447 | switch (c) | 438 | switch (c) |
| 448 | { | 439 | { |
| 449 | case 'd': case 'i': | 440 | case 'd': case 'i': |
| 450 | #if HAVE_LONG_LONG_INT | 441 | /* If 'long long' is larger than 'long': */ |
| 451 | /* If 'long long' exists and is larger than 'long': */ | ||
| 452 | if (flags >= 16 || (flags & 4)) | 442 | if (flags >= 16 || (flags & 4)) |
| 453 | type = TYPE_LONGLONGINT; | 443 | type = TYPE_LONGLONGINT; |
| 454 | else | 444 | else |
| 455 | #endif | 445 | /* If 'long long' is the same as 'long', we parse "lld" into |
| 456 | /* If 'long long' exists and is the same as 'long', we parse | 446 | TYPE_LONGINT. */ |
| 457 | "lld" into TYPE_LONGINT. */ | ||
| 458 | if (flags >= 8) | 447 | if (flags >= 8) |
| 459 | type = TYPE_LONGINT; | 448 | type = TYPE_LONGINT; |
| 460 | else if (flags & 2) | 449 | else if (flags & 2) |
| @@ -465,14 +454,12 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
| 465 | type = TYPE_INT; | 454 | type = TYPE_INT; |
| 466 | break; | 455 | break; |
| 467 | case 'o': case 'u': case 'x': case 'X': | 456 | case 'o': case 'u': case 'x': case 'X': |
| 468 | #if HAVE_LONG_LONG_INT | 457 | /* If 'unsigned long long' is larger than 'unsigned long': */ |
| 469 | /* If 'long long' exists and is larger than 'long': */ | ||
| 470 | if (flags >= 16 || (flags & 4)) | 458 | if (flags >= 16 || (flags & 4)) |
| 471 | type = TYPE_ULONGLONGINT; | 459 | type = TYPE_ULONGLONGINT; |
| 472 | else | 460 | else |
| 473 | #endif | 461 | /* If 'unsigned long long' is the same as 'unsigned long', we |
| 474 | /* If 'unsigned long long' exists and is the same as | 462 | parse "llu" into TYPE_ULONGINT. */ |
| 475 | 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ | ||
| 476 | if (flags >= 8) | 463 | if (flags >= 8) |
| 477 | type = TYPE_ULONGINT; | 464 | type = TYPE_ULONGINT; |
| 478 | else if (flags & 2) | 465 | else if (flags & 2) |
| @@ -525,14 +512,12 @@ PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) | |||
| 525 | type = TYPE_POINTER; | 512 | type = TYPE_POINTER; |
| 526 | break; | 513 | break; |
| 527 | case 'n': | 514 | case 'n': |
| 528 | #if HAVE_LONG_LONG_INT | 515 | /* If 'long long' is larger than 'long': */ |
| 529 | /* If 'long long' exists and is larger than 'long': */ | ||
| 530 | if (flags >= 16 || (flags & 4)) | 516 | if (flags >= 16 || (flags & 4)) |
| 531 | type = TYPE_COUNT_LONGLONGINT_POINTER; | 517 | type = TYPE_COUNT_LONGLONGINT_POINTER; |
| 532 | else | 518 | else |
| 533 | #endif | 519 | /* If 'long long' is the same as 'long', we parse "lln" into |
| 534 | /* If 'long long' exists and is the same as 'long', we parse | 520 | TYPE_COUNT_LONGINT_POINTER. */ |
| 535 | "lln" into TYPE_COUNT_LONGINT_POINTER. */ | ||
| 536 | if (flags >= 8) | 521 | if (flags >= 8) |
| 537 | type = TYPE_COUNT_LONGINT_POINTER; | 522 | type = TYPE_COUNT_LONGINT_POINTER; |
| 538 | else if (flags & 2) | 523 | else if (flags & 2) |
