Index: src/backend/postmaster/pgstat.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/postmaster/pgstat.c,v retrieving revision 1.71 diff -c -r1.71 pgstat.c *** src/backend/postmaster/pgstat.c 24 May 2004 02:47:47 -0000 1.71 --- src/backend/postmaster/pgstat.c 24 May 2004 21:07:19 -0000 *************** *** 452,460 **** pgstat_forkexec(STATS_PROCESS_TYPE procType) { pid_t pid; ! char *av[15]; int ac = 0, bufc = 0, i; ! char pgstatBuf[12][MAXPGPATH]; av[ac++] = "postgres"; switch (procType) --- 452,460 ---- pgstat_forkexec(STATS_PROCESS_TYPE procType) { pid_t pid; ! char *av[17]; int ac = 0, bufc = 0, i; ! char pgstatBuf[14][MAXPGPATH]; av[ac++] = "postgres"; switch (procType) *************** *** 490,495 **** --- 490,499 ---- snprintf(pgstatBuf[bufc++],MAXPGPATH,"\"%s\"",postgres_exec_path); snprintf(pgstatBuf[bufc++],MAXPGPATH,"\"%s\"",DataDir); + /* + locales */ + snprintf(pgstatBuf[bufc++],MAXPGPATH,"\"%s\"",setlocale(LC_COLLATE, NULL)); + snprintf(pgstatBuf[bufc++],MAXPGPATH,"\"%s\"",setlocale(LC_CTYPE, NULL)); + /* Add to the arg list */ Assert(bufc <= lengthof(pgstatBuf)); for (i = 0; i < bufc; i++) *************** *** 520,526 **** static void pgstat_parseArgs(PGSTAT_FORK_ARGS) { ! Assert(argc == 14); if (find_my_exec(argv[0], my_exec_path) < 0) elog(FATAL, --- 524,530 ---- static void pgstat_parseArgs(PGSTAT_FORK_ARGS) { ! Assert(argc == 16); if (find_my_exec(argv[0], my_exec_path) < 0) elog(FATAL, *************** *** 542,547 **** --- 546,553 ---- StrNCpy(pgStat_fname, argv[argc++],MAXPGPATH); StrNCpy(postgres_exec_path, argv[argc++],MAXPGPATH); DataDir = strdup(argv[argc++]); + setlocale(LC_COLLATE, argv[argc++]); + setlocale(LC_CTYPE, argv[argc++]); read_nondefault_variables(); } Index: src/backend/postmaster/postmaster.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/postmaster/postmaster.c,v retrieving revision 1.394 diff -c -r1.394 postmaster.c *** src/backend/postmaster/postmaster.c 23 May 2004 03:50:45 -0000 1.394 --- src/backend/postmaster/postmaster.c 25 May 2004 21:01:21 -0000 *************** *** 3305,3310 **** --- 3305,3312 ---- { char filename[MAXPGPATH]; FILE *fp; + char str_buf[MAXPGPATH]; + get_tmp_backend_file_name(filename,++tmpBackendFileNum); /* Open file */ *************** *** 3361,3366 **** --- 3363,3373 ---- fwrite((void *)my_exec_path, MAXPGPATH, 1, fp); + StrNCpy(str_buf, setlocale(LC_COLLATE, NULL), MAXPGPATH); + fwrite((void *)str_buf, MAXPGPATH, 1, fp); + StrNCpy(str_buf, setlocale(LC_CTYPE, NULL), MAXPGPATH); + fwrite((void *)str_buf, MAXPGPATH, 1, fp); + /* Release file */ if (FreeFile(fp)) { *************** *** 3378,3383 **** --- 3385,3392 ---- { char filename[MAXPGPATH]; FILE *fp; + char str_buf[MAXPGPATH]; + get_tmp_backend_file_name(filename,id); /* Open file */ *************** *** 3424,3429 **** --- 3433,3443 ---- read_var(PostmasterPid,fp); fread((void *)my_exec_path, MAXPGPATH, 1, fp); + + fread((void *)str_buf, MAXPGPATH, 1, fp); + setlocale(LC_COLLATE, str_buf); + fread((void *)str_buf, MAXPGPATH, 1, fp); + setlocale(LC_CTYPE, str_buf); /* Release file */ FreeFile(fp); Index: src/backend/utils/adt/pg_locale.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/adt/pg_locale.c,v retrieving revision 1.25 diff -c -r1.25 pg_locale.c *** src/backend/utils/adt/pg_locale.c 19 Jan 2004 19:04:40 -0000 1.25 --- src/backend/utils/adt/pg_locale.c 25 May 2004 20:41:49 -0000 *************** *** 123,128 **** --- 123,129 ---- const char * locale_messages_assign(const char *value, bool doit, GucSource source) { + char *retval; /* * LC_MESSAGES category does not exist everywhere, but accept it * anyway *************** *** 130,139 **** #ifdef LC_MESSAGES if (doit) { ! if (!setlocale(LC_MESSAGES, value)) return NULL; } ! else value = locale_xxx_assign(LC_MESSAGES, value, false, source); #endif return value; --- 131,148 ---- #ifdef LC_MESSAGES if (doit) { ! char *retval = setlocale(LC_MESSAGES, value); ! #ifndef WIN32 ! if (!retval) return NULL; + #else + /* Win32 returns NULL when you set LC_MESSAGES to "". So we just + * set it, and ignore it */ + if (value[0] && !retval) + return NULL; + #endif } ! else value = locale_xxx_assign(LC_MESSAGES, value, false, source); #endif return value;