On 04/09/2012 12:36 PM, Clover White wrote:
> 2012/4/9 Andrew Dunstan <andrew@dunslane.net <mailto:andrew@dunslane.net>>
>
>
>
> On 04/09/2012 07:38 AM, Clover White wrote:
>
> Hi,
> I'm debugging initdb using gdb.
> I found that I could not step in the function getopt_long in
> line 2572 in initdb.c.
> I also found that the value of VAR optind never be changed.
> VAR optind is always equal to 1 but how could optind be larger
> than the value of argc(the value of argc is 6) in line 2648
> and 2654.
>
> I was so confused. Could someone give me some help? Thank you~
>
>
>
> Why do you expect it to be? Perhaps if you tell us what problem
> you're actually trying to solve we can help you better.
>
> cheers
>
> andrew
>
>
> Hi, this is my story, it may be a little long :)
> I mistook the parameter -W of initdb at the first time and used it
> like this:
> initdb -U pgsql -W 12345 -D /home/pgsql/pg_data
> And I found the database was not created in the right directory, but
> I could not find a log file to find out why.
> So, I debug initdb and found out I have mistook the parameter -W, I
> should use it like this:
> initdb -U pgsql -W -D /home/pgsql/pg_data
This is arguably a bug. Maybe we should change this:
if (optind < argc) { pg_data = xstrdup(argv[optind]); optind++; }
to
if (optind < argc && strlen(pg_data) == 0) { pg_data = xstrdup(argv[optind]); optind++; }
i.e. we'd forbid:
initdb -D foo bar
which the OP's error more or less devolves to.
cheers
andrew