Обсуждение: Command-line parsing in pg_ctl is not portable

Поиск
Список
Период
Сортировка

Command-line parsing in pg_ctl is not portable

От
Peter Eisentraut
Дата:
The command-line argument parsing in pg_ctl is not portable.  This is the 
output on a glibc system:

$ pg_ctl start stop
pg_ctl: too many command-line arguments (first is "start")

But:

$ POSIXLY_CORRECT=1 pg_ctl start stop
pg_ctl: too many command-line arguments (first is "stop")

This is probably because GNU getopt rearranges the arguments, and since pg_ctl 
uses two while loops to try to allow non-option arguments before options, 
things may get reordered multiple times.

Now this particular case is minor trouble, but I wonder in what other 
situations arguments will get reordered where the order does make a 
difference.

-- 
Peter Eisentraut
http://developer.postgresql.org/~petere/


Re: Command-line parsing in pg_ctl is not portable

От
Bruce Momjian
Дата:
Peter Eisentraut wrote:
> The command-line argument parsing in pg_ctl is not portable.  This is the 
> output on a glibc system:
> 
> $ pg_ctl start stop
> pg_ctl: too many command-line arguments (first is "start")
> 
> But:
> 
> $ POSIXLY_CORRECT=1 pg_ctl start stop
> pg_ctl: too many command-line arguments (first is "stop")
> 
> This is probably because GNU getopt rearranges the arguments, and since pg_ctl 
> uses two while loops to try to allow non-option arguments before options, 
> things may get reordered multiple times.
> 
> Now this particular case is minor trouble, but I wonder in what other 
> situations arguments will get reordered where the order does make a 
> difference.

Yea, I found that GNU getopt reordering thing to be very strange.  I can
imagine some risks to such reordering.  Fortunately we don't have any
other commands where we have to do this weird double-calls.

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073