Re: fix in --help output
От | Zdenek Kotala |
---|---|
Тема | Re: fix in --help output |
Дата | |
Msg-id | 47BE9D8F.20707@sun.com обсуждение исходный текст |
Ответ на | Re: fix in --help output (Alvaro Herrera <alvherre@commandprompt.com>) |
Ответы |
Re: fix in --help output
Re: fix in --help output |
Список | pgsql-patches |
Alvaro Herrera napsal(a): > Zdenek Kotala wrote: > >> If I looked correctly there is no getopt_long. There is only getopt with >> - as a option. See PostmasterMain: >> >> >> while ((opt = getopt(argc, argv, >> "A:B:c:D:d:EeFf:h:ijk:lN:nOo:Pp:r:S:sTt:W:-:")) != -1) >> >> If I understand correctly the POSIX standard "-" should not used in a >> option list. > > Hmm, right. Our current parsing of --long-opts is quite a hack, it > seems :-( Having to list all GUC options in the getopt_long array would > be a mess. Any other ideas? > I attached patch which replaces any "--..." occurrence with "-c..." on command line. Zdenek Index: src/backend/postmaster/postmaster.c =================================================================== RCS file: /zfs_data/cvs_pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v retrieving revision 1.552 diff -c -r1.552 postmaster.c *** src/backend/postmaster/postmaster.c 20 Feb 2008 22:46:24 -0000 1.552 --- src/backend/postmaster/postmaster.c 22 Feb 2008 09:32:15 -0000 *************** *** 483,490 **** * Parse command-line options. CAUTION: keep this in sync with * tcop/postgres.c (the option sets should not conflict) and with the * common help() function in main/main.c. */ ! while ((opt = getopt(argc, argv, "A:B:c:D:d:EeFf:h:ijk:lN:nOo:Pp:r:S:sTt:W:-:")) != -1) { switch (opt) { --- 483,511 ---- * Parse command-line options. CAUTION: keep this in sync with * tcop/postgres.c (the option sets should not conflict) and with the * common help() function in main/main.c. + * + * We want to support --NAME=VALUE args type, but getopt_long is not suitable + * for porcessing all GUC variables and we cannot use "-" as in a getopt option + * list, because it is not supported on some platforms. + * Regarding this issues a preprocessing which replaces "--" with "-c" is necessary. */ ! ! for(int n=0; n<argc ; n++) ! { ! int arglen; ! arglen = strlen(argv[n]); ! if(arglen >= 2) ! { ! if(argv[n][0] == '-' && argv[n][1] == '-') ! { ! if(arglen == 2) ! break; // we found -- end of option list ! argv[n][1]='c'; ! } ! } ! } ! ! while ((opt = getopt(argc, argv, "A:B:c:D:d:EeFf:h:ijk:lN:nOo:Pp:r:S:sTt:W:")) != -1) { switch (opt) { *************** *** 617,623 **** break; case 'c': - case '-': { char *name, *value; --- 638,643 ----
В списке pgsql-patches по дате отправления: