Index: src/backend/main/main.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/main/main.c,v retrieving revision 1.99 diff -c -c -r1.99 main.c *** src/backend/main/main.c 5 Jan 2006 03:01:34 -0000 1.99 --- src/backend/main/main.c 31 Jan 2006 21:03:01 -0000 *************** *** 45,51 **** #include "libpq/pqsignal.h" #endif ! int main(int argc, char *argv[]) --- 45,51 ---- #include "libpq/pqsignal.h" #endif ! const char *progname; int main(int argc, char *argv[]) *************** *** 77,82 **** --- 77,84 ---- char *env_locale; #endif + progname = get_progname(argv[0]); + /* * On some platforms, unaligned memory accesses result in a kernel trap; * the default kernel behavior is to emulate the memory access, but this *************** *** 246,252 **** * possibly first argument) we were called with. The lack of consistency * here is historical. */ ! if (strcmp(get_progname(argv[0]), "postmaster") == 0) { /* Called as "postmaster" */ exit(PostmasterMain(argc, argv)); --- 248,254 ---- * possibly first argument) we were called with. The lack of consistency * here is historical. */ ! if (strcmp(progname, "postmaster") == 0) { /* Called as "postmaster" */ exit(PostmasterMain(argc, argv)); Index: src/backend/postmaster/postmaster.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v retrieving revision 1.479 diff -c -c -r1.479 postmaster.c *** src/backend/postmaster/postmaster.c 6 Jan 2006 02:58:25 -0000 1.479 --- src/backend/postmaster/postmaster.c 31 Jan 2006 21:03:04 -0000 *************** *** 171,179 **** */ int ReservedBackends; - - static const char *progname = NULL; - /* The socket(s) we're listening to. */ #define MAXLISTEN 64 static int ListenSocket[MAXLISTEN]; --- 171,176 ---- *************** *** 383,391 **** char *userDoption = NULL; int i; - /* This will call exit() if strdup() fails. */ - progname = get_progname(argv[0]); - MyProcPid = PostmasterPid = getpid(); IsPostmasterEnvironment = true; --- 380,385 ---- Index: src/include/postmaster/postmaster.h =================================================================== RCS file: /cvsroot/pgsql/src/include/postmaster/postmaster.h,v retrieving revision 1.11 diff -c -c -r1.11 postmaster.h *** src/include/postmaster/postmaster.h 20 Aug 2005 23:26:33 -0000 1.11 --- src/include/postmaster/postmaster.h 31 Jan 2006 21:03:06 -0000 *************** *** 34,39 **** --- 34,40 ---- extern HANDLE PostmasterHandle; #endif + extern const char *progname; extern int PostmasterMain(int argc, char *argv[]); extern void ClosePostmasterPorts(bool am_syslogger); Index: src/port/path.c =================================================================== RCS file: /cvsroot/pgsql/src/port/path.c,v retrieving revision 1.63 diff -c -c -r1.63 path.c *** src/port/path.c 23 Dec 2005 22:34:22 -0000 1.63 --- src/port/path.c 31 Jan 2006 21:03:06 -0000 *************** *** 388,394 **** const char * get_progname(const char *argv0) { ! const char *nodir_name; nodir_name = last_dir_separator(argv0); if (nodir_name) --- 388,395 ---- const char * get_progname(const char *argv0) { ! const char *nodir_name; ! const char *progname; nodir_name = last_dir_separator(argv0); if (nodir_name) *************** *** 396,420 **** else nodir_name = skip_drive(argv0); ! #if defined(__CYGWIN__) || defined(WIN32) ! /* strip .exe suffix, regardless of case */ ! if (strlen(nodir_name) > sizeof(EXE) - 1 && ! pg_strcasecmp(nodir_name + strlen(nodir_name) - (sizeof(EXE) - 1), EXE) == 0) { ! char *progname; ! progname = strdup(nodir_name); /* leaks memory, but called only once */ ! if (progname == NULL) ! { ! fprintf(stderr, "%s: out of memory\n", nodir_name); ! exit(1); /* This could exit the postmaster */ ! } progname[strlen(progname) - (sizeof(EXE) - 1)] = '\0'; - nodir_name = progname; - } #endif ! return nodir_name; } --- 397,421 ---- else nodir_name = skip_drive(argv0); ! /* ! * Make a copy in case argv[0] is modified by ps_status. ! * Leaks memory, but called only once. ! */ ! progname = strdup(nodir_name); ! if (progname == NULL) { ! fprintf(stderr, "%s: out of memory\n", nodir_name); ! exit(1); /* This could exit the postmaster */ ! } ! #if defined(__CYGWIN__) || defined(WIN32) ! /* strip ".exe" suffix, regardless of case */ ! if (strlen(progname) > sizeof(EXE) - 1 && ! pg_strcasecmp(progname + strlen(progname) - (sizeof(EXE) - 1), EXE) == 0) progname[strlen(progname) - (sizeof(EXE) - 1)] = '\0'; #endif ! return progname; }