Thread: get_progname and .exe suffix
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
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
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
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
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