diff options
Diffstat (limited to 'src/backend/utils/adt/pg_locale.c')
-rw-r--r-- | src/backend/utils/adt/pg_locale.c | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index 7472a8ef79d..03b6fad3ef5 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -4,14 +4,14 @@ * * Portions Copyright (c) 2002-2009, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/backend/utils/adt/pg_locale.c,v 1.49 2009/04/01 09:17:32 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/pg_locale.c,v 1.50 2009/06/11 14:49:03 momjian Exp $ * *----------------------------------------------------------------------- */ /*---------- * Here is how the locale stuff is handled: LC_COLLATE and LC_CTYPE - * are fixed at CREATE DATABASE time, stored in pg_database, and cannot + * are fixed at CREATE DATABASE time, stored in pg_database, and cannot * be changed. Thus, the effects of strcoll(), strxfrm(), isupper(), * toupper(), etc. are always in the same fixed locale. * @@ -93,7 +93,7 @@ static char lc_numeric_envbuf[LC_ENV_BUFSIZE]; static char lc_time_envbuf[LC_ENV_BUFSIZE]; #if defined(WIN32) && defined(LC_MESSAGES) -static char *IsoLocaleName(const char *); /* MSVC specific */ +static char *IsoLocaleName(const char *); /* MSVC specific */ #endif @@ -159,9 +159,9 @@ pg_perm_setlocale(int category, const char *locale) result = IsoLocaleName(locale); if (result == NULL) result = (char *) locale; -#endif /* WIN32 */ +#endif /* WIN32 */ break; -#endif /* LC_MESSAGES */ +#endif /* LC_MESSAGES */ case LC_MONETARY: envvar = "LC_MONETARY"; envbuf = lc_monetary_envbuf; @@ -468,28 +468,33 @@ PGLC_localeconv(void) * pg_strftime(), which isn't locale-aware and does not need to be replaced. */ static size_t -strftime_win32(char *dst, size_t dstlen, const wchar_t *format, const struct tm *tm) +strftime_win32(char *dst, size_t dstlen, const wchar_t *format, const struct tm * tm) { - size_t len; - wchar_t wbuf[MAX_L10N_DATA]; - int encoding; + size_t len; + wchar_t wbuf[MAX_L10N_DATA]; + int encoding; encoding = GetDatabaseEncoding(); len = wcsftime(wbuf, MAX_L10N_DATA, format, tm); if (len == 0) - /* strftime call failed - return 0 with the contents of dst unspecified */ + + /* + * strftime call failed - return 0 with the contents of dst + * unspecified + */ return 0; len = WideCharToMultiByte(CP_UTF8, 0, wbuf, len, dst, dstlen, NULL, NULL); if (len == 0) elog(ERROR, - "could not convert string to UTF-8:error %lu", GetLastError()); + "could not convert string to UTF-8:error %lu", GetLastError()); dst[len] = '\0'; if (encoding != PG_UTF8) { - char *convstr = pg_do_encoding_conversion(dst, len, PG_UTF8, encoding); + char *convstr = pg_do_encoding_conversion(dst, len, PG_UTF8, encoding); + if (dst != convstr) { strlcpy(dst, convstr, dstlen); @@ -501,8 +506,7 @@ strftime_win32(char *dst, size_t dstlen, const wchar_t *format, const struct tm } #define strftime(a,b,c,d) strftime_win32(a,b,L##c,d) - -#endif /* WIN32 */ +#endif /* WIN32 */ /* @@ -511,12 +515,13 @@ strftime_win32(char *dst, size_t dstlen, const wchar_t *format, const struct tm void cache_locale_time(void) { - char *save_lc_time; + char *save_lc_time; time_t timenow; - struct tm *timeinfo; + struct tm *timeinfo; char buf[MAX_L10N_DATA]; char *ptr; int i; + #ifdef WIN32 char *save_lc_ctype; #endif @@ -611,10 +616,11 @@ cache_locale_time(void) * contains the iso formatted locale name. */ static -char *IsoLocaleName(const char *winlocname) +char * +IsoLocaleName(const char *winlocname) { -#if (_MSC_VER >= 1400) /* VC8.0 or later */ - static char iso_lc_messages[32]; +#if (_MSC_VER >= 1400) /* VC8.0 or later */ + static char iso_lc_messages[32]; _locale_t loct = NULL; if (pg_strcasecmp("c", winlocname) == 0 || @@ -627,8 +633,9 @@ char *IsoLocaleName(const char *winlocname) loct = _create_locale(LC_CTYPE, winlocname); if (loct != NULL) { - char isolang[32], isocrty[32]; - LCID lcid; + char isolang[32], + isocrty[32]; + LCID lcid; lcid = loct->locinfo->lc_handle[LC_CTYPE]; if (lcid == 0) @@ -644,8 +651,8 @@ char *IsoLocaleName(const char *winlocname) } return NULL; #else - return NULL; /* Not supported on this version of msvc/mingw */ -#endif /* _MSC_VER >= 1400 */ + return NULL; /* Not supported on this version of msvc/mingw */ +#endif /* _MSC_VER >= 1400 */ } -#endif /* WIN32 && LC_MESSAGES */ +#endif /* WIN32 && LC_MESSAGES */ |