Thread: get_progname and .exe suffix

get_progname and .exe suffix

From
Andrew Dunstan
Date:
People,

I posted on -hackers the other day about get_progname returning a name
with the .exe suffix. There was no response other than one from Dave
Page saying he had reported the problem. Does anyone have an idea of the
best way to fix it? Apart from being plain ugly it causes the contrib
regression tests to fail, so I think this is a must-fix for 8.0.

cheers

andrew

Re: get_progname and .exe suffix

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> I posted on -hackers the other day about get_progname returning a name
> with the .exe suffix.

What would break if we caused get_progname itself to strip the suffix?
That would be a nice localized fix if it worked ...

            regards, tom lane

Re: get_progname and .exe suffix

From
Andrew Dunstan
Date:

Tom Lane wrote:

>Andrew Dunstan <andrew@dunslane.net> writes:
>
>
>>I posted on -hackers the other day about get_progname returning a name
>>with the .exe suffix.
>>
>>
>
>What would break if we caused get_progname itself to strip the suffix?
>That would be a nice localized fix if it worked ...
>
>

Yes. get_progname() actually just returns a pointer to one past the last
directory separator it finds in its argument string. Having it strip the
.exe directly would in effect involve mangling argv[0]. That's what
makes me slightly nervous about it. We could have it strdup() the result
and then mangle that - note that it is called by postmaster before we
set up any memory context stuff.


cheers

andrew

Re: get_progname and .exe suffix

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> Tom Lane wrote:
>> What would break if we caused get_progname itself to strip the suffix?

> Yes. get_progname() actually just returns a pointer to one past the last
> directory separator it finds in its argument string. Having it strip the
> .exe directly would in effect involve mangling argv[0]. That's what
> makes me slightly nervous about it. We could have it strdup() the result
> and then mangle that - note that it is called by postmaster before we
> set up any memory context stuff.

Seems reasonable.  What I was more worried about though was whether
there are any callers that actually need a non-stripped result.

            regards, tom lane

Re: get_progname and .exe suffix

From
Andrew Dunstan
Date:

Tom Lane wrote:

>Andrew Dunstan <andrew@dunslane.net> writes:
>
>
>>Tom Lane wrote:
>>
>>
>>>What would break if we caused get_progname itself to strip the suffix?
>>>
>>>
>
>
>
>>Yes. get_progname() actually just returns a pointer to one past the last
>>directory separator it finds in its argument string. Having it strip the
>>.exe directly would in effect involve mangling argv[0]. That's what
>>makes me slightly nervous about it. We could have it strdup() the result
>>and then mangle that - note that it is called by postmaster before we
>>set up any memory context stuff.
>>
>>
>
>Seems reasonable.  What I was more worried about though was whether
>there are any callers that actually need a non-stripped result.
>
>

Ok, I will have a look. grep tells me it's called in these places:

./src/backend/postmaster/postmaster.c
./src/bin/initdb/initdb.c
./src/bin/pg_config/pg_config.c
./src/bin/pg_controldata/pg_controldata.c
./src/bin/pg_ctl/pg_ctl.c
./src/bin/pg_dump/pg_dump.c
./src/bin/pg_dump/pg_dumpall.c
./src/bin/pg_dump/pg_restore.c
./src/bin/pg_resetxlog/pg_resetxlog.c
./src/bin/psql/startup.c
./src/bin/scripts/clusterdb.c
./src/bin/scripts/common.c
./src/bin/scripts/createdb.c
./src/bin/scripts/createlang.c
./src/bin/scripts/createuser.c
./src/bin/scripts/dropdb.c
./src/bin/scripts/droplang.c
./src/bin/scripts/dropuser.c
./src/bin/scripts/vacuumdb.c
./src/interfaces/ecpg/preproc/ecpg.c

cheers

andrew