From e5b9ad7e39b2b3fc7c3bf502075a60cc2a35af61 Mon Sep 17 00:00:00 2001 From: Antonio Giovanni Colombo Date: Sun, 12 Mar 2023 10:19:43 +0100 Subject: Update to it.po --- po/ChangeLog | 4 + po/it.po | 433 ++++++++++++++++++++++++++++------------------------------- 2 files changed, 208 insertions(+), 229 deletions(-) diff --git a/po/ChangeLog b/po/ChangeLog index 9473af72..7f1c6657 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,7 @@ +2023-03-12 Antonio Giovanni Colombo + + * it.po: Updated. + 2023-02-25 Arnold D. Robbins * sr.po: Updated. diff --git a/po/it.po b/po/it.po index 198bd07e..7f4953c2 100644 --- a/po/it.po +++ b/po/it.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: GNU Awk 5.1.1, API: 3.0\n" +"Project-Id-Version: GNU Awk 5.2.1, API: 3.0\n" "Report-Msgid-Bugs-To: bug-gawk@gnu.org\n" -"POT-Creation-Date: 2023-03-09 20:17+0200\n" -"PO-Revision-Date: 2022-11-15 09:15+0100\n" +"POT-Creation-Date: 2023-03-12 09:11+0100\n" +"PO-Revision-Date: 2023-03-12 09:35+0100\n" "Last-Translator: Antonio Colombo \n" "Language-Team: Italian \n" "Language: it\n" @@ -61,7 +61,7 @@ msgstr "%s: il primo argomento non è un vettore" msgid "%s: second argument is not an array" msgstr "%s: il secondo argomento non è un vettore" -#: array.c:834 field.c:1006 field.c:1100 +#: array.c:834 field.c:1136 field.c:1239 #, c-format msgid "%s: cannot use %s as second argument" msgstr "%s: non consentito usare %s come secondo argomento" @@ -388,7 +388,7 @@ msgstr "operatore `%s' non supportato nel vecchio awk" msgid "unterminated string" msgstr "stringa non delimitata" -#: awkgram.y:4069 main.c:1284 +#: awkgram.y:4069 main.c:1260 msgid "POSIX does not allow physical newlines in string values" msgstr "" "POSIX non consente dei caratteri di ritorno a capo nei valori assegnati a " @@ -2460,128 +2460,126 @@ msgid "sleep: not supported on this platform" msgstr "sleep: non supportato in questa architettura" #: extension/time.c:223 -#, fuzzy -#| msgid "%s: called with %d arguments" msgid "strptime: called with no arguments" -msgstr "%s: chiamata con %d argomenti" +msgstr "strptime: chiamata senza alcun argomento" #: extension/time.c:231 -#, fuzzy, c-format -#| msgid "stat: first argument is not a string" msgid "do_strptime: argument 1 is not a string\n" -msgstr "stat: il primo argomento non è una stringa" +msgstr "do_strptime: il primo argomento non è una stringa\n" #: extension/time.c:236 -#, fuzzy, c-format -#| msgid "stat: first argument is not a string" msgid "do_strptime: argument 2 is not a string\n" -msgstr "stat: il primo argomento non è una stringa" +msgstr "do_strptime: il secondo argomento non è una stringa\n" -#: field.c:287 +#: field.c:311 msgid "input record too large" msgstr "record in input troppo lungo" -#: field.c:408 +#: field.c:432 msgid "NF set to negative value" msgstr "NF impostato a un valore negativo" -#: field.c:413 +#: field.c:437 msgid "decrementing NF is not portable to many awk versions" msgstr "diminuire NF è non-portabile a molte versioni awk" -#: field.c:861 +#: field.c:991 msgid "accessing fields from an END rule may not be portable" msgstr "utilizzare campi da una regola END può essere non-portabile" -#: field.c:988 field.c:997 +#: field.c:1118 field.c:1127 msgid "split: fourth argument is a gawk extension" msgstr "split: il quarto argomento è un'estensione gawk" -#: field.c:992 +#: field.c:1122 msgid "split: fourth argument is not an array" msgstr "split: il quarto argomento non è un vettore" -#: field.c:994 field.c:1093 +#: field.c:1124 field.c:1232 #, c-format msgid "%s: cannot use %s as fourth argument" msgstr "%s: non consentito usare %s come quarto argomento" -#: field.c:1004 +#: field.c:1134 msgid "split: second argument is not an array" msgstr "split: il secondo argomento non è un vettore" -#: field.c:1010 +#: field.c:1140 msgid "split: cannot use the same array for second and fourth args" msgstr "" "split: non si può usare un unico vettore come secondo e quarto argomento" -#: field.c:1015 +#: field.c:1145 msgid "split: cannot use a subarray of second arg for fourth arg" msgstr "" "split: non consentito un quarto argomento che sia un sottovettore del " "secondo argomento" -#: field.c:1018 +#: field.c:1148 msgid "split: cannot use a subarray of fourth arg for second arg" msgstr "" "split: non consentito un secondo argomento che sia un sottovettore del " "quarto argomento" -#: field.c:1052 +#: field.c:1182 msgid "split: null string for third arg is a non-standard extension" msgstr "split: la stringa nulla come terzo arg. è un'estensione non-standard" -#: field.c:1091 +#: field.c:1194 +msgid "split: CSV parsing is a non-standard extension" +msgstr "split: analisi CSV è un'estensione non-standard" + +#: field.c:1230 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: il quarto argomento non è un vettore" -#: field.c:1098 +#: field.c:1237 msgid "patsplit: second argument is not an array" msgstr "patsplit: il secondo argomento non è un vettore" -#: field.c:1109 +#: field.c:1248 msgid "patsplit: third argument must be non-null" msgstr "patsplit: il terzo argomento non può essere nullo" -#: field.c:1113 +#: field.c:1252 msgid "patsplit: cannot use the same array for second and fourth args" msgstr "" "patsplit: non si può usare un unico vettore come secondo e quarto argomento" -#: field.c:1118 +#: field.c:1257 msgid "patsplit: cannot use a subarray of second arg for fourth arg" msgstr "" "patsplit: non consentito un quarto argomento che sia un sottovettore del " "secondo argomento" -#: field.c:1121 +#: field.c:1260 msgid "patsplit: cannot use a subarray of fourth arg for second arg" msgstr "" "patsplit: non consentito un secondo argomento che sia un sottovettore del " "quarto argomento" -#: field.c:1171 +#: field.c:1310 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "`FIELDWIDTHS' è un'estensione gawk" -#: field.c:1240 +#: field.c:1379 msgid "`*' must be the last designator in FIELDWIDTHS" msgstr "`*' deve essere l'ultimo elemento specificato per FIELDWIDTHS" -#: field.c:1261 +#: field.c:1400 #, c-format msgid "invalid FIELDWIDTHS value, for field %d, near `%s'" msgstr "valore di FIELDWIDTHS non valido, per il campo %d, vicino a `%s'" -#: field.c:1334 +#: field.c:1474 msgid "null string for `FS' is a gawk extension" msgstr "la stringa nulla usata come `FS' è un'estensione gawk" -#: field.c:1338 +#: field.c:1478 msgid "old awk does not support regexps as value of `FS'" msgstr "il vecchio awk non supporta espressioni come valori di `FS'" -#: field.c:1464 +#: field.c:1606 msgid "`FPAT' is a gawk extension" msgstr "`FPAT' è un'estensione gawk" @@ -2665,91 +2663,91 @@ msgstr "non riesco a trovare la fine di una regola BEGINFILE" msgid "cannot open unrecognized file type `%s' for `%s'" msgstr "non riesco ad aprire file di tipo non riconosciuto `%s' per `%s'" -#: io.c:406 +#: io.c:407 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "l'argomento in riga comando `%s' è una directory: ignorata" -#: io.c:409 io.c:523 +#: io.c:410 io.c:524 #, c-format msgid "cannot open file `%s' for reading: %s" msgstr "non riesco ad aprire file `%s' in lettura: %s" -#: io.c:652 +#: io.c:653 #, c-format msgid "close of fd %d (`%s') failed: %s" msgstr "chiusura di fd %d (`%s') non riuscita: %s" -#: io.c:724 +#: io.c:725 #, c-format msgid "`%.*s' used for input file and for output file" msgstr "`%.*s' usati come file di input e file di output" -#: io.c:726 +#: io.c:727 #, c-format msgid "`%.*s' used for input file and input pipe" msgstr "`%.*s' usati come file di input e `pipe' di input" -#: io.c:728 +#: io.c:729 #, c-format msgid "`%.*s' used for input file and two-way pipe" msgstr "`%.*s' usati come file di input e `pipe' bidirezionale" -#: io.c:730 +#: io.c:731 #, c-format msgid "`%.*s' used for input file and output pipe" msgstr "`%.*s' usati come file di input e `pipe' di output" -#: io.c:732 +#: io.c:733 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "mistura non necessaria di `>' e `>>' per il file `%.*s'" -#: io.c:734 +#: io.c:735 #, c-format msgid "`%.*s' used for input pipe and output file" msgstr "`%.*s' usati come `pipe' in input e file in output" -#: io.c:736 +#: io.c:737 #, c-format msgid "`%.*s' used for output file and output pipe" msgstr "`%.*s' usati come file in output e `pipe' in output" -#: io.c:738 +#: io.c:739 #, c-format msgid "`%.*s' used for output file and two-way pipe" msgstr "`%.*s' usati come file in output e `pipe' bidirezionale" -#: io.c:740 +#: io.c:741 #, c-format msgid "`%.*s' used for input pipe and output pipe" msgstr "`%.*s' usati come `pipe' in input e `pipe' in output" -#: io.c:742 +#: io.c:743 #, c-format msgid "`%.*s' used for input pipe and two-way pipe" msgstr "`%.*s' usati come `pipe' in input e `pipe' bidirezionale" -#: io.c:744 +#: io.c:745 #, c-format msgid "`%.*s' used for output pipe and two-way pipe" msgstr "`%.*s' usati come `pipe' in output e `pipe' bidirezionale" -#: io.c:793 +#: io.c:794 msgid "redirection not allowed in sandbox mode" msgstr "ri-direzione non consentita in modo `sandbox'" -#: io.c:827 +#: io.c:828 #, c-format msgid "expression in `%s' redirection is a number" msgstr "espressione nella ri-direzione `%s' è un numero" -#: io.c:831 +#: io.c:832 #, c-format msgid "expression for `%s' redirection has null string value" msgstr "espressione nella ri-direzione `%s' ha per valore la stringa nulla" -#: io.c:836 +#: io.c:837 #, c-format msgid "" "filename `%.*s' for `%s' redirection may be result of logical expression" @@ -2757,22 +2755,22 @@ msgstr "" "nome-file `%.*s' per la ri-direzione `%s' può essere il risultato di una " "espressione logica" -#: io.c:933 io.c:958 +#: io.c:934 io.c:963 #, c-format msgid "get_file cannot create pipe `%s' with fd %d" msgstr "get_file non riesce a creare una `pipe' `%s' con fd %d" -#: io.c:948 +#: io.c:949 #, c-format msgid "cannot open pipe `%s' for output: %s" msgstr "non riesco ad aprire `pipe' `%s' in scrittura: %s" -#: io.c:963 +#: io.c:968 #, c-format msgid "cannot open pipe `%s' for input: %s" msgstr "non riesco ad aprire `pipe' `%s' in lettura: %s" -#: io.c:987 +#: io.c:992 #, c-format msgid "" "get_file socket creation not supported on this platform for `%s' with fd %d" @@ -2780,260 +2778,260 @@ msgstr "" "creazione di socket get_file non disponibile su questa piattaforma per `%s' " "con fd %d" -#: io.c:998 +#: io.c:1003 #, c-format msgid "cannot open two way pipe `%s' for input/output: %s" msgstr "" "non riesco ad aprire `pipe' bidirezionale `%s' in lettura/scrittura: %s" -#: io.c:1085 +#: io.c:1090 #, c-format msgid "cannot redirect from `%s': %s" msgstr "non riesco a ri-dirigere da `%s': %s" -#: io.c:1088 +#: io.c:1093 #, c-format msgid "cannot redirect to `%s': %s" msgstr "non riesco a ri-dirigere a `%s': %s" -#: io.c:1190 +#: io.c:1195 msgid "" "reached system limit for open files: starting to multiplex file descriptors" msgstr "" "numero massimo consentito di file aperti raggiunto: comincio a riutilizzare " "i descrittori di file" -#: io.c:1206 +#: io.c:1211 #, c-format msgid "close of `%s' failed: %s" msgstr "chiusura di `%s' non riuscita: %s" -#: io.c:1214 +#: io.c:1219 msgid "too many pipes or input files open" msgstr "troppe `pipe' o file di input aperti" -#: io.c:1240 +#: io.c:1245 msgid "close: second argument must be `to' or `from'" msgstr "close: il secondo argomento deve essere `a' o `da'" -#: io.c:1258 +#: io.c:1263 #, c-format msgid "close: `%.*s' is not an open file, pipe or co-process" msgstr "close: `%.*s' non è un file aperto, una `pipe' o un co-processo" -#: io.c:1263 +#: io.c:1268 msgid "close of redirection that was never opened" msgstr "chiusura di una ri-direzione mai aperta" -#: io.c:1365 +#: io.c:1370 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" msgstr "close: ri-direzione `%s' non aperta con `|&', ignoro secondo argomento" -#: io.c:1382 +#: io.c:1387 #, c-format msgid "failure status (%d) on pipe close of `%s': %s" msgstr "errore ritornato (%d) dalla chiusura della `pipe' `%s': %s" -#: io.c:1385 +#: io.c:1390 #, c-format msgid "failure status (%d) on two-way pipe close of `%s': %s" msgstr "" "errore ritornato (%d) dalla chiusura della `pipe' bidirezionale `%s': %s" -#: io.c:1388 +#: io.c:1393 #, c-format msgid "failure status (%d) on file close of `%s': %s" msgstr "errore ritornato (%d) dalla chiusura del file `%s': %s" -#: io.c:1408 +#: io.c:1413 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "nessuna chiusura esplicita richiesta per `socket' `%s'" -#: io.c:1411 +#: io.c:1416 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "nessuna chiusura esplicita richiesta per co-processo `%s'" -#: io.c:1414 +#: io.c:1419 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "nessuna chiusura esplicita richiesta per `pipe' `%s'" -#: io.c:1417 +#: io.c:1422 #, c-format msgid "no explicit close of file `%s' provided" msgstr "nessuna chiusura esplicita richiesta per file `%s'" -#: io.c:1452 +#: io.c:1457 #, c-format msgid "fflush: cannot flush standard output: %s" msgstr "fflush: non riesco a terminare lo standard output: %s" -#: io.c:1453 +#: io.c:1458 #, c-format msgid "fflush: cannot flush standard error: %s" msgstr "fflush: non riesco a terminare lo standard error: %s" -#: io.c:1458 io.c:1547 main.c:719 main.c:764 +#: io.c:1463 io.c:1552 main.c:695 main.c:740 #, c-format msgid "error writing standard output: %s" msgstr "errore scrivendo `standard output': %s" -#: io.c:1459 io.c:1558 main.c:721 +#: io.c:1464 io.c:1563 main.c:697 #, c-format msgid "error writing standard error: %s" msgstr "errore scrivendo `standard error': %s" -#: io.c:1498 +#: io.c:1503 #, c-format msgid "pipe flush of `%s' failed: %s" msgstr "scaricamento di `pipe' `%s' non riuscito: %s" -#: io.c:1501 +#: io.c:1506 #, c-format msgid "co-process flush of pipe to `%s' failed: %s" msgstr "scaricamento da co-processo di `pipe' a `%s' non riuscito: %s" -#: io.c:1504 +#: io.c:1509 #, c-format msgid "file flush of `%s' failed: %s" msgstr "scaricamento di file `%s' non riuscito: %s" -#: io.c:1647 +#: io.c:1652 #, c-format msgid "local port %s invalid in `/inet': %s" msgstr "porta locale %s invalida in `/inet: %s'" -#: io.c:1650 +#: io.c:1655 #, c-format msgid "local port %s invalid in `/inet'" msgstr "porta locale %s invalida in `/inet'" -#: io.c:1673 +#: io.c:1678 #, c-format msgid "remote host and port information (%s, %s) invalid: %s" msgstr "host remoto e informazione di porta (%s, %s) invalidi: %s" -#: io.c:1676 +#: io.c:1681 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "host remoto e informazione di porta (%s, %s) invalidi" -#: io.c:1918 +#: io.c:1923 msgid "TCP/IP communications are not supported" msgstr "comunicazioni TCP/IP non supportate" -#: io.c:2046 io.c:2089 +#: io.c:2051 io.c:2094 #, c-format msgid "could not open `%s', mode `%s'" msgstr "non riesco ad aprire `%s', modo `%s'" -#: io.c:2054 io.c:2106 +#: io.c:2059 io.c:2111 #, c-format msgid "close of master pty failed: %s" msgstr "close di `pty' principale non riuscita: %s" -#: io.c:2056 io.c:2108 io.c:2449 io.c:2687 +#: io.c:2061 io.c:2113 io.c:2454 io.c:2692 #, c-format msgid "close of stdout in child failed: %s" msgstr "close di `stdout' nel processo-figlio non riuscita: %s" -#: io.c:2059 io.c:2111 +#: io.c:2064 io.c:2116 #, c-format msgid "moving slave pty to stdout in child failed (dup: %s)" msgstr "" "trasferimento di `pty' secondaria a `stdout' nel processo-figlio non " "riuscita (dup: %s)" -#: io.c:2061 io.c:2113 io.c:2454 +#: io.c:2066 io.c:2118 io.c:2459 #, c-format msgid "close of stdin in child failed: %s" msgstr "close di `stdin' nel processo-figlio non riuscita: %s" -#: io.c:2064 io.c:2116 +#: io.c:2069 io.c:2121 #, c-format msgid "moving slave pty to stdin in child failed (dup: %s)" msgstr "" "trasferimento di `pty' secondaria a `stdin' nel processo-figlio non riuscito " "(dup: %s)" -#: io.c:2066 io.c:2118 io.c:2140 +#: io.c:2071 io.c:2123 io.c:2145 #, c-format msgid "close of slave pty failed: %s" msgstr "close di `pty' secondaria non riuscita: %s" -#: io.c:2302 +#: io.c:2307 msgid "could not create child process or open pty" msgstr "non riesco a creare processo-figlio o ad aprire `pty'" -#: io.c:2388 io.c:2452 io.c:2662 io.c:2690 +#: io.c:2393 io.c:2457 io.c:2667 io.c:2695 #, c-format msgid "moving pipe to stdout in child failed (dup: %s)" msgstr "" "passaggio di `pipe' a `stdout' nel processo-figlio non riuscito (dup: %s)" -#: io.c:2395 io.c:2457 +#: io.c:2400 io.c:2462 #, c-format msgid "moving pipe to stdin in child failed (dup: %s)" msgstr "" "passaggio di `pipe' a `stdin' nel processo-figlio non riuscito (dup: %s)" -#: io.c:2417 io.c:2680 +#: io.c:2422 io.c:2685 msgid "restoring stdout in parent process failed" msgstr "ripristino di `stdout' nel processo-padre non riuscito" -#: io.c:2425 +#: io.c:2430 msgid "restoring stdin in parent process failed" msgstr "ripristino di `stdin' nel processo-padre non riuscito" -#: io.c:2460 io.c:2692 io.c:2707 +#: io.c:2465 io.c:2697 io.c:2712 #, c-format msgid "close of pipe failed: %s" msgstr "close di `pipe' non riuscita: %s" -#: io.c:2519 +#: io.c:2524 msgid "`|&' not supported" msgstr "`|&' non supportato" -#: io.c:2647 +#: io.c:2652 #, c-format msgid "cannot open pipe `%s': %s" msgstr "non riesco ad aprire `pipe' `%s': %s" -#: io.c:2701 +#: io.c:2706 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "non riesco a creare processo-figlio per `%s' (fork: %s)" -#: io.c:2839 +#: io.c:2844 msgid "getline: attempt to read from closed read end of two-way pipe" msgstr "" "getline: tentativo di elggere dal lato in scrittura, chiuso, di una `pipe' " "bidirezionale" -#: io.c:3162 +#: io.c:3167 msgid "register_input_parser: received NULL pointer" msgstr "register_input_parser: ricevuto puntatore NULL" -#: io.c:3190 +#: io.c:3195 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" msgstr "" "input parser `%s' in conflitto con l'input parser `%s' installato in " "precedenza" -#: io.c:3197 +#: io.c:3202 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "l'input parser `%s' non è riuscito ad aprire `%s'" -#: io.c:3217 +#: io.c:3222 msgid "register_output_wrapper: received NULL pointer" msgstr "register_output_wrapper: ricevuto puntatore NULL" -#: io.c:3245 +#: io.c:3250 #, c-format msgid "" "output wrapper `%s' conflicts with previously installed output wrapper `%s'" @@ -3041,16 +3039,16 @@ msgstr "" "output wrapper `%s' in conflitto con l'output wrapper `%s' installato in " "precedenza" -#: io.c:3252 +#: io.c:3257 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "l'output wrapper `%s' non è riuscito ad aprire `%s'" -#: io.c:3273 +#: io.c:3278 msgid "register_output_processor: received NULL pointer" msgstr "register_output_processor: ricevuto puntatore NULL" -#: io.c:3302 +#: io.c:3307 #, c-format msgid "" "two-way processor `%s' conflicts with previously installed two-way processor " @@ -3059,29 +3057,29 @@ msgstr "" "processore doppio `%s' in conflitto con il processore doppio installato in " "precedenza `%s'" -#: io.c:3311 +#: io.c:3316 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "il processore doppio `%s' non è riuscito ad aprire `%s'" -#: io.c:3442 +#: io.c:3447 #, c-format msgid "data file `%s' is empty" msgstr "file dati `%s' vuoto" -#: io.c:3484 io.c:3492 +#: io.c:3489 io.c:3497 msgid "could not allocate more input memory" msgstr "non riesco ad allocare ulteriore memoria per l'input" -#: io.c:4110 +#: io.c:4115 msgid "multicharacter value of `RS' is a gawk extension" msgstr "valore multicarattere per `RS' è un'estensione gawk" -#: io.c:4264 +#: io.c:4269 msgid "IPv6 communication is not supported" msgstr "comunicazioni IPv6 non supportate" -#: main.c:245 +#: main.c:230 #, c-format msgid "" "%s: fatal: persistent memory allocator failed to initialize: return value " @@ -3090,202 +3088,202 @@ msgstr "" "%s: fatale: l'allocatore di memoria persistente non è riuscito a " "inizializzarsi: valore restituito %d, pma.c riga: %d.\n" -#: main.c:253 +#: main.c:238 msgid "persistent memory is not supported" msgstr "la memoria persistente non è supportata" -#: main.c:366 +#: main.c:346 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "variable d'ambiente `POSIXLY_CORRECT' impostata: attivo `--posix'" -#: main.c:373 +#: main.c:353 msgid "`--posix' overrides `--traditional'" msgstr "`--posix' annulla `--traditional'" -#: main.c:384 +#: main.c:364 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "`--posix'/`--traditional' annulla `--non-decimal-data'" -#: main.c:389 +#: main.c:369 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "`--posix' annulla `--characters-as-bytes'" -#: main.c:400 +#: main.c:380 #, c-format msgid "running %s setuid root may be a security problem" msgstr "eseguire %s con `setuid' root può essere un rischio per la sicurezza" -#: main.c:402 +#: main.c:382 msgid "The -r/--re-interval options no longer have any effect" msgstr "L'opzione -r/--re-interval non ha più alcun effetto" -#: main.c:456 +#: main.c:436 #, c-format msgid "cannot set binary mode on stdin: %s" msgstr "non è possibile impostare modalità binaria su `stdin': %s" -#: main.c:459 +#: main.c:439 #, c-format msgid "cannot set binary mode on stdout: %s" msgstr "non è possibile impostare modalità binaria su `stdout': %s" -#: main.c:461 +#: main.c:441 #, c-format msgid "cannot set binary mode on stderr: %s" msgstr "non è possibile impostare modalità binaria su `stderr': %s" -#: main.c:526 +#: main.c:506 msgid "no program text at all!" msgstr "manca del tutto il testo del programma!" -#: main.c:628 +#: main.c:604 #, c-format msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n" msgstr "Uso: %s [opzioni in stile POSIX o GNU] -f file-prog. [--] file ...\n" -#: main.c:630 +#: main.c:606 #, c-format msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n" msgstr "Usage: %s [opzioni in stile POSIX o GNU] [--] %cprogramma%c file ...\n" -#: main.c:635 +#: main.c:611 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "Opzioni POSIX:\t\topzioni lunghe GNU: (standard)\n" -#: main.c:636 +#: main.c:612 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f fileprog\t\t--file=file-prog.\n" -#: main.c:637 +#: main.c:613 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F fs\t\t\t--field-separator=fs\n" -#: main.c:638 +#: main.c:614 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "\t-v var=valore\t\t--assign=var=valore\n" -#: main.c:639 +#: main.c:615 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "Opzioni brevi:\t\topzioni lunghe GNU: (estensioni)\n" -#: main.c:640 +#: main.c:616 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:641 +#: main.c:617 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:642 +#: main.c:618 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:643 +#: main.c:619 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[file]\t\t--dump-variables[=file]\n" -#: main.c:644 +#: main.c:620 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-D[file]\t\t--debug[=file]\n" -#: main.c:645 +#: main.c:621 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'testo-del-programma'\t--source='testo-del-programma'\n" -#: main.c:646 +#: main.c:622 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E file\t\t\t--exec=file\n" -#: main.c:647 +#: main.c:623 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:648 +#: main.c:624 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:649 +#: main.c:625 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "\t-i include_file\t\t--include=include_file\n" -#: main.c:650 +#: main.c:626 msgid "\t-I\t\t\t--trace\n" msgstr "\t-I\t\t\t--trace\n" -#: main.c:651 +#: main.c:627 msgid "\t-l library\t\t--load=library\n" msgstr "\t-l libreria\t\t--load=libreria\n" #. TRANSLATORS: the "fatal", "invalid" and "no-ext" here are literal #. values, they should not be translated. Thanks. #. -#: main.c:656 +#: main.c:632 msgid "\t-L[fatal|invalid|no-ext]\t--lint[=fatal|invalid|no-ext]\n" msgstr "\t-L[fatal|invalid|no-ext]\t--lint[=fatal|invalid|no-ext]\n" -#: main.c:657 +#: main.c:633 msgid "\t-M\t\t\t--bignum\n" msgstr "\t-M\t\t\t--bignum\n" -#: main.c:658 +#: main.c:634 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:659 +#: main.c:635 msgid "\t-n\t\t\t--non-decimal-data\n" msgstr "\t-n\t\t\t--non-decimal-data\n" -#: main.c:660 +#: main.c:636 msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-o[file]\t\t--pretty-print[=file]\n" -#: main.c:661 +#: main.c:637 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:662 +#: main.c:638 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[file]\t\t--profile[=file]\n" -#: main.c:663 +#: main.c:639 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:664 +#: main.c:640 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:665 +#: main.c:641 msgid "\t-s\t\t\t--no-optimize\n" msgstr "\t-s\t\t\t--no-optimize\n" -#: main.c:666 +#: main.c:642 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:667 +#: main.c:643 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:668 +#: main.c:644 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:670 +#: main.c:646 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:673 +#: main.c:649 msgid "\t-Y\t\t\t--parsedebug\n" msgstr "\t-Y\t\t\t--parsedebug\n" -#: main.c:676 +#: main.c:652 msgid "\t-Z locale-name\t\t--locale=locale-name\n" msgstr "\t-Z locale-name\t\t--locale=locale-name\n" #. TRANSLATORS: --help output (end) #. no-wrap -#: main.c:682 +#: main.c:658 msgid "" "\n" "To report bugs, use the `gawkbug' program.\n" @@ -3307,15 +3305,18 @@ msgstr "" "o usando un forum online del tipo di Stack Overflow.\n" "\n" -#: main.c:698 +#: main.c:674 #, c-format msgid "" "Source code for gawk may be obtained from\n" "%s/gawk-%s.tar.gz\n" "\n" msgstr "" +"Il codice sorgente di gawk può essere estratto da\n" +"%s/gawk-%s.tar.gz\n" +"\n" -#: main.c:702 +#: main.c:678 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3325,7 +3326,7 @@ msgstr "" "Senza parametri, legge da `standard input' e scrive su `standard output'.\n" "\n" -#: main.c:706 +#: main.c:682 #, c-format msgid "" "Examples:\n" @@ -3336,7 +3337,7 @@ msgstr "" "\t%s '{ sum += $1 }; END { print sum }' file\n" "\t%s -F: '{ print $1 }' /etc/passwd\n" -#: main.c:736 +#: main.c:712 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3355,7 +3356,7 @@ msgstr "" "Licenza, o (a tua scelta) a una qualsiasi versione successiva.\n" "\n" -#: main.c:744 +#: main.c:720 msgid "" "This program is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" @@ -3369,7 +3370,7 @@ msgstr "" "Vedi la 'GNU General Public License' per ulteriori dettagli.\n" "\n" -#: main.c:750 +#: main.c:726 msgid "" "You should have received a copy of the GNU General Public License\n" "along with this program. If not, see http://www.gnu.org/licenses/.\n" @@ -3378,11 +3379,11 @@ msgstr "" "assieme a questo programma; se non è così, vedi http://www.gnu.org/" "licenses/.\n" -#: main.c:789 +#: main.c:765 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "-Ft non imposta FS a `tab' nell'awk POSIX" -#: main.c:1214 +#: main.c:1190 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3391,98 +3392,92 @@ msgstr "" "%s: `%s' argomento di `-v' non in forma `var=valore'\n" "\n" -#: main.c:1240 +#: main.c:1216 #, c-format msgid "`%s' is not a legal variable name" msgstr "`%s' non è un nome di variabile ammesso" -#: main.c:1243 +#: main.c:1219 #, c-format msgid "`%s' is not a variable name, looking for file `%s=%s'" msgstr "`%s' non è un nome di variabile, cerco il file `%s=%s'" -#: main.c:1257 +#: main.c:1233 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "nome funzione interna gawk `%s' non ammesso come nome variabile" -#: main.c:1262 +#: main.c:1238 #, c-format msgid "cannot use function `%s' as variable name" msgstr "non è possibile usare nome di funzione `%s' come nome di variabile" -#: main.c:1341 +#: main.c:1317 msgid "floating point exception" msgstr "eccezione floating point" -#: main.c:1351 +#: main.c:1327 msgid "fatal error: internal error" msgstr "errore fatale: errore interno" -#: main.c:1371 -msgid "fatal error: internal error: segfault" -msgstr "errore fatale: errore interno: segfault" - -#: main.c:1384 -msgid "fatal error: internal error: stack overflow" -msgstr "errore fatale: errore interno: stack overflow" - -#: main.c:1483 +#: main.c:1428 #, c-format msgid "no pre-opened fd %d" msgstr "manca `fd' pre-aperta %d" -#: main.c:1490 +#: main.c:1435 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "non riesco a pre-aprire /dev/null per `fd' %d" -#: main.c:1704 +#: main.c:1649 msgid "empty argument to `-e/--source' ignored" msgstr "argomento di `-e/--source' nullo, ignorato" -#: main.c:1769 main.c:1774 +#: main.c:1714 main.c:1719 msgid "`--profile' overrides `--pretty-print'" msgstr "`--profile' annulla `--pretty-print'" -#: main.c:1786 +#: main.c:1731 msgid "-M ignored: MPFR/GMP support not compiled in" msgstr "-M ignorato: supporto per MPFR/GMP non generato" -#: main.c:1812 +#: main.c:1757 #, c-format msgid "Use `GAWK_PERSIST_FILE=%s gawk ...' instead of --persist." msgstr "Usare `GAWK_PERSIST_FILE=%s gawk ...' invece che --persist." -#: main.c:1814 +#: main.c:1759 msgid "Persistent memory is not supported." msgstr "La memoria persistente non è supportata." -#: main.c:1823 +#: main.c:1768 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "%s: opzione `-W %s' non riconosciuta, ignorata\n" -#: main.c:1876 +#: main.c:1821 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: l'opzione richiede un argomento -- %c\n" -#: main.c:1979 +#: main.c:1924 #, c-format msgid "%s: fatal: cannot stat %s: %s\n" -msgstr "" +msgstr "%s: fatale: non riesco a eseguire stat di %s: %s\n" -#: main.c:1983 +#: main.c:1928 #, c-format msgid "" "%s: fatal: using persistent memory is not allowed when running as root.\n" msgstr "" +"%s: fatale: uso della memoria persistente non consentito per l'utente " +"root.\n" -#: main.c:1986 +#: main.c:1931 #, c-format msgid "%s: warning: %s is not owned by euid %d.\n" -msgstr "" +msgstr "%s: attenzione: %s non è un file che appartiene a euid %d.\n" #: mpfr.c:661 #, c-format @@ -3937,6 +3932,8 @@ msgid "" "current setting of -M/--bignum does not match saved setting in PMA backing " "file" msgstr "" +"le impostazioni -M/--bignum non concordano con quelle contenute nel file " +"PMA utilizzato" #: symbol.c:780 #, c-format @@ -3948,30 +3945,8 @@ msgstr "" msgid "cannot pop main context" msgstr "non posso salire più in alto nel contesto di esecuzione" -#, c-format -#~ msgid "typeof: invalid argument type `%s'" -#~ msgstr "typeof: tipo di argomento sconosciuto `%s'" - -#~ msgid "" -#~ "The time extension is obsolete. Use the timex extension from gawkextlib " -#~ "instead." -#~ msgstr "" -#~ "L'estensione time è obsoleta. Usare in alternativa l'estensione timex da " -#~ "gawkextlib." - -#~ msgid "split: CSV parsing is a non-standard extension" -#~ msgstr "split: analisi CSV è un'estensione non-standard" - -#~ msgid "MPFR mode is deprecated!" -#~ msgstr "L'uso di MPFR è deprecato!" - -#~ msgid "It will be removed in the gawk release of 2024." -#~ msgstr " Verrà rimosso nella versione 2024 di gawk." - -#~ msgid "For more information, see https://......." -#~ msgstr "Per ulteriori informazioni, vedere https://......." +#~ msgid "fatal error: internal error: segfault" +#~ msgstr "errore fatale: errore interno: segfault" -#~ msgid "Use `export GAWK_NO_MPFR_WARN=1' to disable this warning." -#~ msgstr "" -#~ "Usare `export GAWK_NO_MPFR_WARN=1' per non vedere più questo " -#~ "avvertimento." +#~ msgid "fatal error: internal error: stack overflow" +#~ msgstr "errore fatale: errore interno: stack overflow" -- cgit v1.2.1 From 57a2c2e0b646391c0331e4fc5dfb07685483742a Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 12 Mar 2023 12:53:33 +0200 Subject: Fix readdir_test test on MS-Windows. --- extension/ChangeLog | 5 +++++ extension/readdir_test.c | 2 +- pc/ChangeLog | 4 ++++ pc/Makefile.ext | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/extension/ChangeLog b/extension/ChangeLog index afc5e58b..f0b75ffb 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,8 @@ +2023-03-12 Eli Zaretskii + + * readdir_test.c (dir_can_take_file): Adjust condition to changes + in io.c. + 2023-02-27 Arnold D. Robbins * readdir.c (dir_can_take_file): Test is more flexible, based on diff --git a/extension/readdir_test.c b/extension/readdir_test.c index 13bf667c..6e805011 100644 --- a/extension/readdir_test.c +++ b/extension/readdir_test.c @@ -256,7 +256,7 @@ dir_can_take_file(const awk_input_buf_t *iobuf) if (iobuf == NULL) return awk_false; - return (iobuf->fd != INVALID_HANDLE && S_ISDIR(iobuf->sbuf.st_mode)); + return (iobuf->fd != INVALID_HANDLE || S_ISDIR(iobuf->sbuf.st_mode)); } /* diff --git a/pc/ChangeLog b/pc/ChangeLog index f3eab62f..275a185e 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2023-03-12 Eli Zaretskii + + * Makefile.ext (readdir_test.$(SOEXT)): Fix typo. + 2023-03-09 Arnold D. Robbins * Makefile.tst: Regenerated. diff --git a/pc/Makefile.ext b/pc/Makefile.ext index db1e6f26..3de0f627 100644 --- a/pc/Makefile.ext +++ b/pc/Makefile.ext @@ -45,7 +45,7 @@ intdiv.$(SOEXT): intdiv.c readdir.$(SOEXT): readdir.c gawkdirfd.h gcc -I.. -DHAVE_DIRENT_H -shared -gdwarf-2 -g3 -static-libgcc -o $@ readdir.c -readdir_test.$(SOEXT): readdir.c gawkdirfd.h +readdir_test.$(SOEXT): readdir_test.c gawkdirfd.h gcc -I.. -DHAVE_DIRENT_H -shared -gdwarf-2 -g3 -static-libgcc -o $@ readdir_test.c rwarray.$(SOEXT): rwarray.c -- cgit v1.2.1 From f4b1428b8516e0457061f9c60e93b5f1b524ca66 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 12 Mar 2023 21:24:56 +0200 Subject: Add GNULIB strptime.c for time extension. --- extension/ChangeLog | 6 + extension/time.c | 8 +- missing_d/ChangeLog | 4 + missing_d/strptime.c | 1164 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1177 insertions(+), 5 deletions(-) create mode 100644 missing_d/strptime.c diff --git a/extension/ChangeLog b/extension/ChangeLog index f0b75ffb..1fca36ff 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,9 @@ +2023-03-12 Arnold D. Robbins + + * time.c: Include ../missing_d/strptime.c if the strptime() + isn't available natively. Adjust other ifdefs. + Thanks to Eli Zaretskii for the encouragement. + 2023-03-12 Eli Zaretskii * readdir_test.c (dir_can_take_file): Adjust condition to changes diff --git a/extension/time.c b/extension/time.c index 9271c99f..b7a8e8e8 100644 --- a/extension/time.c +++ b/extension/time.c @@ -206,7 +206,9 @@ do_sleep(int nargs, awk_value_t *result, struct awk_ext_func *unused) return make_number(rc, result); } -#ifdef HAVE_STRPTIME +#ifndef HAVE_STRPTIME +#include "../missing_d/strptime.c" +#endif /* do_strptime --- call strptime */ @@ -257,14 +259,10 @@ done0: return result; } -#endif - static awk_ext_func_t func_table[] = { { "gettimeofday", do_gettimeofday, 0, 0, awk_false, NULL }, { "sleep", do_sleep, 1, 1, awk_false, NULL }, -#ifdef HAVE_STRPTIME { "strptime", do_strptime, 2, 2, awk_false, NULL }, -#endif }; /* define the dl_load function using the boilerplate macro */ diff --git a/missing_d/ChangeLog b/missing_d/ChangeLog index dfca7eec..b01a6535 100644 --- a/missing_d/ChangeLog +++ b/missing_d/ChangeLog @@ -1,3 +1,7 @@ +2023-03-12 Arnold D. Robbins + + * strptime.c: New file, from GNULIB, with a few slight mods. + 2022-11-23 Arnold D. Robbins * strerror.c, system.c: Update to GPL 3. Move code to ISO C diff --git a/missing_d/strptime.c b/missing_d/strptime.c new file mode 100644 index 00000000..670c5320 --- /dev/null +++ b/missing_d/strptime.c @@ -0,0 +1,1164 @@ +/* Copyright (C) 2002, 2004-2005, 2007, 2009-2023 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _LIBC +# include +#endif + +#include + +#include +#include +#ifdef _LIBC +# include +#endif +#include +#include + +#ifdef _LIBC +# include +# include "../locale/localeinfo.h" +#endif + +#ifndef _LIBC +enum ptime_locale_status { not, loc, raw }; +#endif + + + +#define match_char(ch1, ch2) if (ch1 != ch2) return NULL +#if defined _LIBC && defined __GNUC__ && __GNUC__ >= 2 +# define match_string(cs1, s2) \ + ({ size_t len = strlen (cs1); \ + int result = __strncasecmp_l ((cs1), (s2), len, locale) == 0; \ + if (result) (s2) += len; \ + result; }) +#else +/* Oh come on. Get a reasonable compiler. */ +# define match_string(cs1, s2) \ + (strncasecmp ((cs1), (s2), strlen (cs1)) ? 0 : ((s2) += strlen (cs1), 1)) +#endif +/* We intentionally do not use isdigit() for testing because this will + lead to problems with the wide character version. */ +#define get_number(from, to, n) \ + do { \ + int __n = n; \ + val = 0; \ + while (*rp == ' ') \ + ++rp; \ + if (*rp < '0' || *rp > '9') \ + return NULL; \ + do { \ + val *= 10; \ + val += *rp++ - '0'; \ + } while (--__n > 0 && val * 10 <= to && *rp >= '0' && *rp <= '9'); \ + if (val < from || val > to) \ + return NULL; \ + } while (0) +#ifdef _NL_CURRENT +# define get_alt_number(from, to, n) \ + ({ \ + __label__ do_normal; \ + \ + if (*decided != raw) \ + { \ + val = _nl_parse_alt_digit (&rp HELPER_LOCALE_ARG); \ + if (val == -1 && *decided != loc) \ + { \ + *decided = loc; \ + goto do_normal; \ + } \ + if (val < from || val > to) \ + return NULL; \ + } \ + else \ + { \ + do_normal: \ + get_number (from, to, n); \ + } \ + 0; \ + }) +#else +# define get_alt_number(from, to, n) \ + /* We don't have the alternate representation. */ \ + get_number(from, to, n) +#endif +#define recursive(new_fmt) \ + (*(new_fmt) != '\0' \ + && (rp = __strptime_internal (rp, (new_fmt), tm, \ + decided, era_cnt LOCALE_ARG)) != NULL) + + +#ifdef _LIBC +/* This is defined in locale/C-time.c in the GNU libc. */ +extern const struct locale_data _nl_C_LC_TIME attribute_hidden; + +# define weekday_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (DAY_1)].string) +# define ab_weekday_name \ + (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABDAY_1)].string) +# define month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (MON_1)].string) +# define ab_month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABMON_1)].string) +# define HERE_D_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_T_FMT)].string) +# define HERE_D_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_FMT)].string) +# define HERE_AM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (AM_STR)].string) +# define HERE_PM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (PM_STR)].string) +# define HERE_T_FMT_AMPM \ + (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT_AMPM)].string) +# define HERE_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT)].string) + +# define strncasecmp(s1, s2, n) __strncasecmp (s1, s2, n) +#else +static char const weekday_name[][10] = + { + "Sunday", "Monday", "Tuesday", "Wednesday", + "Thursday", "Friday", "Saturday" + }; +static char const ab_weekday_name[][4] = + { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; +static char const month_name[][10] = + { + "January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December" + }; +static char const ab_month_name[][4] = + { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }; +# define HERE_D_T_FMT "%a %b %e %H:%M:%S %Y" +# define HERE_D_FMT "%m/%d/%y" +# define HERE_AM_STR "AM" +# define HERE_PM_STR "PM" +# define HERE_T_FMT_AMPM "%I:%M:%S %p" +# define HERE_T_FMT "%H:%M:%S" + +static const unsigned short int __mon_yday[2][13] = + { + /* Normal years. */ + { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, + /* Leap years. */ + { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } + }; +#endif + +#if defined _LIBC +/* We use this code also for the extended locale handling where the + function gets as an additional argument the locale which has to be + used. To access the values we have to redefine the _NL_CURRENT + macro. */ +# define strptime __strptime_l +# undef _NL_CURRENT +# define _NL_CURRENT(category, item) \ + (current->values[_NL_ITEM_INDEX (item)].string) +# undef _NL_CURRENT_WORD +# define _NL_CURRENT_WORD(category, item) \ + (current->values[_NL_ITEM_INDEX (item)].word) +# define LOCALE_PARAM , locale +# define LOCALE_ARG , locale +# define LOCALE_PARAM_PROTO , __locale_t locale +# define LOCALE_PARAM_DECL __locale_t locale; +# define HELPER_LOCALE_ARG , current +# define ISSPACE(Ch) __isspace_l (Ch, locale) +#else +# define LOCALE_PARAM +# define LOCALE_ARG +# define LOCALE_PARAM_DECL +# define LOCALE_PARAM_PROTO +# define HELPER_LOCALE_ARG +# define ISSPACE(Ch) isspace (Ch) +#endif + + + + +#ifndef __isleap +/* Nonzero if YEAR is a leap year (every 4 years, + except every 100th isn't, and every 400th is). */ +# define __isleap(year) \ + ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) +#endif + +/* Compute the day of the week. */ +static void +day_of_the_week (struct tm *tm) +{ + /* We know that January 1st 1970 was a Thursday (= 4). Compute the + difference between this data in the one on TM and so determine + the weekday. */ + int corr_year = 1900 + tm->tm_year - (tm->tm_mon < 2); + int corr_quad = corr_year / 4; + int wday = (-473 + + (365 * (tm->tm_year - 70)) + + corr_quad + - ((corr_quad + (corr_quad < 0)) / 25 - (corr_quad < 0)) + + ((corr_quad / 25) / 4) + + __mon_yday[0][tm->tm_mon] + + tm->tm_mday - 1); + tm->tm_wday = ((wday % 7) + 7) % 7; +} + +/* Compute the day of the year. */ +static void +day_of_the_year (struct tm *tm) +{ + tm->tm_yday = (__mon_yday[__isleap (1900 + tm->tm_year)][tm->tm_mon] + + (tm->tm_mday - 1)); +} + + +#ifdef _LIBC +char * +internal_function +#else +static char * +#endif +__strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) + const char *rp; + const char *fmt; + struct tm *tm; + enum ptime_locale_status *decided; + int era_cnt; + LOCALE_PARAM_DECL +{ +#ifdef _LIBC + struct locale_data *const current = locale->__locales[LC_TIME]; +#endif + + int cnt; + size_t val; + int have_I, is_pm; + int century, want_century; + int want_era; + int have_wday, want_xday; + int have_yday; + int have_mon, have_mday; + int have_uweek, have_wweek; + int week_no; +#ifdef _NL_CURRENT + size_t num_eras; + struct era_entry *era = NULL; + const char *rp_backup; +#endif + + have_I = is_pm = 0; + century = -1; + want_century = 0; + want_era = 0; + week_no = 0; + + have_wday = want_xday = have_yday = have_mon = have_mday = have_uweek = 0; + have_wweek = 0; + + while (*fmt != '\0') + { + /* A white space in the format string matches 0 more or white + space in the input string. */ + if (ISSPACE (*fmt)) + { + while (ISSPACE (*rp)) + ++rp; + ++fmt; + continue; + } + + /* Any character but '%' must be matched by the same character + in the input string. */ + if (*fmt != '%') + { + match_char (*fmt++, *rp++); + continue; + } + + ++fmt; +#ifndef _NL_CURRENT + /* We need this for handling the 'E' modifier. */ + start_over: +#else + /* Make back up of current processing pointer. */ + rp_backup = rp; +#endif + + switch (*fmt++) + { + case '%': + /* Match the '%' character itself. */ + match_char ('%', *rp++); + break; + case 'a': + case 'A': + /* Match day of week. */ + for (cnt = 0; cnt < 7; ++cnt) + { +#ifdef _NL_CURRENT + if (*decided !=raw) + { + if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, DAY_1 + cnt), + weekday_name[cnt])) + *decided = loc; + break; + } + if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), + ab_weekday_name[cnt])) + *decided = loc; + break; + } + } +#endif + if (*decided != loc + && (match_string (weekday_name[cnt], rp) + || match_string (ab_weekday_name[cnt], rp))) + { + *decided = raw; + break; + } + } + if (cnt == 7) + /* Does not match a weekday name. */ + return NULL; + tm->tm_wday = cnt; + have_wday = 1; + break; + case 'b': + case 'B': + case 'h': + /* Match month name. */ + for (cnt = 0; cnt < 12; ++cnt) + { +#ifdef _NL_CURRENT + if (*decided !=raw) + { + if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, MON_1 + cnt), + month_name[cnt])) + *decided = loc; + break; + } + if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), rp)) + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), + ab_month_name[cnt])) + *decided = loc; + break; + } + } +#endif + if (match_string (month_name[cnt], rp) + || match_string (ab_month_name[cnt], rp)) + { + *decided = raw; + break; + } + } + if (cnt == 12) + /* Does not match a month name. */ + return NULL; + tm->tm_mon = cnt; + want_xday = 1; + break; + case 'c': + /* Match locale's date and time format. */ +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, D_T_FMT))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (*decided == not && + strcmp (_NL_CURRENT (LC_TIME, D_T_FMT), HERE_D_T_FMT)) + *decided = loc; + want_xday = 1; + break; + } + *decided = raw; + } +#endif + if (!recursive (HERE_D_T_FMT)) + return NULL; + want_xday = 1; + break; + case 'C': + /* Match century number. */ +#ifdef _NL_CURRENT + match_century: +#endif + get_number (0, 99, 2); + century = val; + want_xday = 1; + break; + case 'd': + case 'e': + /* Match day of month. */ + get_number (1, 31, 2); + tm->tm_mday = val; + have_mday = 1; + want_xday = 1; + break; + case 'F': + if (!recursive ("%Y-%m-%d")) + return NULL; + want_xday = 1; + break; + case 'x': +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, D_FMT))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (*decided == not + && strcmp (_NL_CURRENT (LC_TIME, D_FMT), HERE_D_FMT)) + *decided = loc; + want_xday = 1; + break; + } + *decided = raw; + } +#endif + /* Fall through. */ + case 'D': + /* Match standard day format. */ + if (!recursive (HERE_D_FMT)) + return NULL; + want_xday = 1; + break; + case 'k': + case 'H': + /* Match hour in 24-hour clock. */ + get_number (0, 23, 2); + tm->tm_hour = val; + have_I = 0; + break; + case 'l': + /* Match hour in 12-hour clock. GNU extension. */ + case 'I': + /* Match hour in 12-hour clock. */ + get_number (1, 12, 2); + tm->tm_hour = val % 12; + have_I = 1; + break; + case 'j': + /* Match day number of year. */ + get_number (1, 366, 3); + tm->tm_yday = val - 1; + have_yday = 1; + break; + case 'm': + /* Match number of month. */ + get_number (1, 12, 2); + tm->tm_mon = val - 1; + have_mon = 1; + want_xday = 1; + break; + case 'M': + /* Match minute. */ + get_number (0, 59, 2); + tm->tm_min = val; + break; + case 'n': + case 't': + /* Match any white space. */ + while (ISSPACE (*rp)) + ++rp; + break; + case 'p': + /* Match locale's equivalent of AM/PM. */ +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (match_string (_NL_CURRENT (LC_TIME, AM_STR), rp)) + { + if (strcmp (_NL_CURRENT (LC_TIME, AM_STR), HERE_AM_STR)) + *decided = loc; + break; + } + if (match_string (_NL_CURRENT (LC_TIME, PM_STR), rp)) + { + if (strcmp (_NL_CURRENT (LC_TIME, PM_STR), HERE_PM_STR)) + *decided = loc; + is_pm = 1; + break; + } + *decided = raw; + } +#endif + if (!match_string (HERE_AM_STR, rp)) + { + if (match_string (HERE_PM_STR, rp)) + is_pm = 1; + else + return NULL; + } + break; + case 'q': + /* Match quarter of year. GNU extension. */ + get_number (1, 4, 1); + tm->tm_mon = (val - 1) * 3; + tm->tm_mday = 1; + have_mon = 1; + have_mday = 1; + want_xday = 1; + break; + case 'r': +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, T_FMT_AMPM))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (*decided == not && + strcmp (_NL_CURRENT (LC_TIME, T_FMT_AMPM), + HERE_T_FMT_AMPM)) + *decided = loc; + break; + } + *decided = raw; + } +#endif + if (!recursive (HERE_T_FMT_AMPM)) + return NULL; + break; + case 'R': + if (!recursive ("%H:%M")) + return NULL; + break; + case 's': + { + /* The number of seconds may be very high so we cannot use + the 'get_number' macro. Instead read the number + character for character and construct the result while + doing this. */ + time_t secs = 0; + if (*rp < '0' || *rp > '9') + /* We need at least one digit. */ + return NULL; + + do + { + secs *= 10; + secs += *rp++ - '0'; + } + while (*rp >= '0' && *rp <= '9'); + + if (localtime_r (&secs, tm) == NULL) + /* Error in function. */ + return NULL; + } + break; + case 'S': + get_number (0, 61, 2); + tm->tm_sec = val; + break; + case 'X': +#ifdef _NL_CURRENT + if (*decided != raw) + { + if (!recursive (_NL_CURRENT (LC_TIME, T_FMT))) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (_NL_CURRENT (LC_TIME, T_FMT), HERE_T_FMT)) + *decided = loc; + break; + } + *decided = raw; + } +#endif + /* Fall through. */ + case 'T': + if (!recursive (HERE_T_FMT)) + return NULL; + break; + case 'u': + get_number (1, 7, 1); + tm->tm_wday = val % 7; + have_wday = 1; + break; + case 'g': + get_number (0, 99, 2); + /* XXX This cannot determine any field in TM. */ + break; + case 'G': + if (*rp < '0' || *rp > '9') + return NULL; + /* XXX Ignore the number since we would need some more + information to compute a real date. */ + do + ++rp; + while (*rp >= '0' && *rp <= '9'); + break; + case 'U': + get_number (0, 53, 2); + week_no = val; + have_uweek = 1; + break; + case 'W': + get_number (0, 53, 2); + week_no = val; + have_wweek = 1; + break; + case 'V': + get_number (0, 53, 2); + /* XXX This cannot determine any field in TM without some + information. */ + break; + case 'w': + /* Match number of weekday. */ + get_number (0, 6, 1); + tm->tm_wday = val; + have_wday = 1; + break; + case 'y': +#ifdef _NL_CURRENT + match_year_in_century: +#endif + /* Match year within century. */ + get_number (0, 99, 2); + /* The "Year 2000: The Millennium Rollover" paper suggests that + values in the range 69-99 refer to the twentieth century. */ + tm->tm_year = val >= 69 ? val : val + 100; + /* Indicate that we want to use the century, if specified. */ + want_century = 1; + want_xday = 1; + break; + case 'Y': + /* Match year including century number. */ + get_number (0, 9999, 4); + tm->tm_year = val - 1900; + want_century = 0; + want_xday = 1; + break; + case 'Z': + /* XXX How to handle this? */ + break; + case 'z': + /* We recognize two formats: if two digits are given, these + specify hours. If fours digits are used, minutes are + also specified. */ + { +#define _GL_UNUSED /* nothing */ + _GL_UNUSED bool neg; + int n; + + val = 0; + while (*rp == ' ') + ++rp; + if (*rp != '+' && *rp != '-') + return NULL; + neg = *rp++ == '-'; + (void) neg; // avoid compile warning + n = 0; + while (n < 4 && *rp >= '0' && *rp <= '9') + { + val = val * 10 + *rp++ - '0'; + ++n; + } + if (n == 2) + val *= 100; + else if (n != 4) + /* Only two or four digits recognized. */ + return NULL; + else + { + /* We have to convert the minutes into decimal. */ + if (val % 100 >= 60) + return NULL; + val = (val / 100) * 100 + ((val % 100) * 50) / 30; + } + if (val > 1200) + return NULL; +#if defined _LIBC || HAVE_TM_GMTOFF + tm->tm_gmtoff = (val * 3600) / 100; + if (neg) + tm->tm_gmtoff = -tm->tm_gmtoff; +#endif + } + break; + case 'E': +#ifdef _NL_CURRENT + switch (*fmt++) + { + case 'c': + /* Match locale's alternate date and time format. */ + if (*decided != raw) + { + const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT); + + if (*fmt == '\0') + fmt = _NL_CURRENT (LC_TIME, D_T_FMT); + + if (!recursive (fmt)) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (fmt, HERE_D_T_FMT)) + *decided = loc; + want_xday = 1; + break; + } + *decided = raw; + } + /* The C locale has no era information, so use the + normal representation. */ + if (!recursive (HERE_D_T_FMT)) + return NULL; + want_xday = 1; + break; + case 'C': + if (*decided != raw) + { + if (era_cnt >= 0) + { + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + if (era != NULL && match_string (era->era_name, rp)) + { + *decided = loc; + break; + } + else + return NULL; + } + + num_eras = _NL_CURRENT_WORD (LC_TIME, + _NL_TIME_ERA_NUM_ENTRIES); + for (era_cnt = 0; era_cnt < (int) num_eras; + ++era_cnt, rp = rp_backup) + { + era = _nl_select_era_entry (era_cnt + HELPER_LOCALE_ARG); + if (era != NULL && match_string (era->era_name, rp)) + { + *decided = loc; + break; + } + } + if (era_cnt != (int) num_eras) + break; + + era_cnt = -1; + if (*decided == loc) + return NULL; + + *decided = raw; + } + /* The C locale has no era information, so use the + normal representation. */ + goto match_century; + case 'y': + if (*decided != raw) + { + get_number(0, 9999, 4); + tm->tm_year = val; + want_era = 1; + want_xday = 1; + want_century = 1; + + if (era_cnt >= 0) + { + assert (*decided == loc); + + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + bool match = false; + if (era != NULL) + { + int delta = ((tm->tm_year - era->offset) + * era->absolute_direction); + match = (delta >= 0 + && delta < (((int64_t) era->stop_date[0] + - (int64_t) era->start_date[0]) + * era->absolute_direction)); + } + if (! match) + return NULL; + + break; + } + + num_eras = _NL_CURRENT_WORD (LC_TIME, + _NL_TIME_ERA_NUM_ENTRIES); + for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt) + { + era = _nl_select_era_entry (era_cnt + HELPER_LOCALE_ARG); + if (era != NULL) + { + int delta = ((tm->tm_year - era->offset) + * era->absolute_direction); + if (delta >= 0 + && delta < (((int64_t) era->stop_date[0] + - (int64_t) era->start_date[0]) + * era->absolute_direction)) + { + *decided = loc; + break; + } + } + } + if (era_cnt != (int) num_eras) + break; + + era_cnt = -1; + if (*decided == loc) + return NULL; + + *decided = raw; + } + + goto match_year_in_century; + case 'Y': + if (*decided != raw) + { + num_eras = _NL_CURRENT_WORD (LC_TIME, + _NL_TIME_ERA_NUM_ENTRIES); + for (era_cnt = 0; era_cnt < (int) num_eras; + ++era_cnt, rp = rp_backup) + { + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + if (era != NULL && recursive (era->era_format)) + break; + } + if (era_cnt == (int) num_eras) + { + era_cnt = -1; + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + *decided = loc; + era_cnt = -1; + break; + } + + *decided = raw; + } + get_number (0, 9999, 4); + tm->tm_year = val - 1900; + want_century = 0; + want_xday = 1; + break; + case 'x': + if (*decided != raw) + { + const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_FMT); + + if (*fmt == '\0') + fmt = _NL_CURRENT (LC_TIME, D_FMT); + + if (!recursive (fmt)) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (fmt, HERE_D_FMT)) + *decided = loc; + break; + } + *decided = raw; + } + if (!recursive (HERE_D_FMT)) + return NULL; + break; + case 'X': + if (*decided != raw) + { + const char *fmt = _NL_CURRENT (LC_TIME, ERA_T_FMT); + + if (*fmt == '\0') + fmt = _NL_CURRENT (LC_TIME, T_FMT); + + if (!recursive (fmt)) + { + if (*decided == loc) + return NULL; + else + rp = rp_backup; + } + else + { + if (strcmp (fmt, HERE_T_FMT)) + *decided = loc; + break; + } + *decided = raw; + } + if (!recursive (HERE_T_FMT)) + return NULL; + break; + default: + return NULL; + } + break; +#else + /* We have no information about the era format. Just use + the normal format. */ + if (*fmt != 'c' && *fmt != 'C' && *fmt != 'y' && *fmt != 'Y' + && *fmt != 'x' && *fmt != 'X') + /* This is an illegal format. */ + return NULL; + + goto start_over; +#endif + case 'O': + switch (*fmt++) + { + case 'd': + case 'e': + /* Match day of month using alternate numeric symbols. */ + get_alt_number (1, 31, 2); + tm->tm_mday = val; + have_mday = 1; + want_xday = 1; + break; + case 'H': + /* Match hour in 24-hour clock using alternate numeric + symbols. */ + get_alt_number (0, 23, 2); + tm->tm_hour = val; + have_I = 0; + break; + case 'I': + /* Match hour in 12-hour clock using alternate numeric + symbols. */ + get_alt_number (1, 12, 2); + tm->tm_hour = val % 12; + have_I = 1; + break; + case 'm': + /* Match month using alternate numeric symbols. */ + get_alt_number (1, 12, 2); + tm->tm_mon = val - 1; + have_mon = 1; + want_xday = 1; + break; + case 'M': + /* Match minutes using alternate numeric symbols. */ + get_alt_number (0, 59, 2); + tm->tm_min = val; + break; + case 'q': + /* Match quarter using alternate numeric symbols. */ + get_alt_number (1, 4, 1); + tm->tm_mon = (val - 1) * 3; + tm->tm_mday = 1; + have_mon = 1; + have_mday = 1; + want_xday = 1; + break; + case 'S': + /* Match seconds using alternate numeric symbols. */ + get_alt_number (0, 61, 2); + tm->tm_sec = val; + break; + case 'U': + get_alt_number (0, 53, 2); + week_no = val; + have_uweek = 1; + break; + case 'W': + get_alt_number (0, 53, 2); + week_no = val; + have_wweek = 1; + break; + case 'V': + get_alt_number (0, 53, 2); + /* XXX This cannot determine any field in TM without + further information. */ + break; + case 'w': + /* Match number of weekday using alternate numeric symbols. */ + get_alt_number (0, 6, 1); + tm->tm_wday = val; + have_wday = 1; + break; + case 'y': + /* Match year within century using alternate numeric symbols. */ + get_alt_number (0, 99, 2); + tm->tm_year = val >= 69 ? val : val + 100; + want_xday = 1; + break; + default: + return NULL; + } + break; + default: + return NULL; + } + } + + if (have_I && is_pm) + tm->tm_hour += 12; + + if (century != -1) + { + if (want_century) + tm->tm_year = tm->tm_year % 100 + (century - 19) * 100; + else + /* Only the century, but not the year. Strange, but so be it. */ + tm->tm_year = (century - 19) * 100; + } + + if (era_cnt != -1) + { +#ifdef _NL_CURRENT + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + if (era == NULL) + return NULL; + if (want_era) + tm->tm_year = (era->start_date[0] + + ((tm->tm_year - era->offset) + * era->absolute_direction)); + else + /* Era start year assumed. */ + tm->tm_year = era->start_date[0]; +#endif + } + else + if (want_era) + { + /* No era found but we have seen an E modifier. Rectify some + values. */ + if (want_century && century == -1 && tm->tm_year < 69) + tm->tm_year += 100; + } + + if (want_xday && !have_wday) + { + if ( !(have_mon && have_mday) && have_yday) + { + /* We don't have tm_mon and/or tm_mday, compute them. */ + int t_mon = 0; + while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] <= tm->tm_yday) + t_mon++; + if (!have_mon) + tm->tm_mon = t_mon - 1; + if (!have_mday) + tm->tm_mday = + (tm->tm_yday + - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); + } + day_of_the_week (tm); + } + + if (want_xday && !have_yday) + day_of_the_year (tm); + + if ((have_uweek || have_wweek) && have_wday) + { + int save_wday = tm->tm_wday; + int save_mday = tm->tm_mday; + int save_mon = tm->tm_mon; + int w_offset = have_uweek ? 0 : 1; + + tm->tm_mday = 1; + tm->tm_mon = 0; + day_of_the_week (tm); + if (have_mday) + tm->tm_mday = save_mday; + if (have_mon) + tm->tm_mon = save_mon; + + if (!have_yday) + tm->tm_yday = ((7 - (tm->tm_wday - w_offset)) % 7 + + (week_no - 1) *7 + + save_wday - w_offset); + + if (!have_mday || !have_mon) + { + int t_mon = 0; + while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] + <= tm->tm_yday) + t_mon++; + if (!have_mon) + tm->tm_mon = t_mon - 1; + if (!have_mday) + tm->tm_mday = + (tm->tm_yday + - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); + } + + tm->tm_wday = save_wday; + } + + return (char *) rp; +} + + +char * +strptime (buf, format, tm LOCALE_PARAM) + const char *restrict buf; + const char *restrict format; + struct tm *restrict tm; + LOCALE_PARAM_DECL +{ + enum ptime_locale_status decided; + +#ifdef _NL_CURRENT + decided = not; +#else + decided = raw; +#endif + return __strptime_internal (buf, format, tm, &decided, -1 LOCALE_ARG); +} + +#ifdef _LIBC +weak_alias (__strptime_l, strptime_l) +#endif -- cgit v1.2.1