diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-09-29 20:12:07 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-09-29 20:12:07 +0000 |
commit | dc05a996c519bac1889aec1b3e7c63fd7d942dfc (patch) | |
tree | 324beee6852eab9a57df7d0ab2ff2c293b9800a0 /src/interfaces/ecpg/lib/execute.c | |
parent | 742d0f25c1dd3b1993e2ee7bef03dc34dba1b463 (diff) | |
download | postgresql-dc05a996c519bac1889aec1b3e7c63fd7d942dfc.tar.gz postgresql-dc05a996c519bac1889aec1b3e7c63fd7d942dfc.zip |
Fix the setlocale problem in a way that actually works. setlocale
returns a string corresponding to the new setting, not the old,
therefore the previous patch was quite wrong.
Diffstat (limited to 'src/interfaces/ecpg/lib/execute.c')
-rw-r--r-- | src/interfaces/ecpg/lib/execute.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/interfaces/ecpg/lib/execute.c b/src/interfaces/ecpg/lib/execute.c index 40bcfc0c549..87e690eaa8c 100644 --- a/src/interfaces/ecpg/lib/execute.c +++ b/src/interfaces/ecpg/lib/execute.c @@ -1,4 +1,4 @@ -/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.24 2001/09/25 18:37:17 meskes Exp $ */ +/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.25 2001/09/29 20:12:07 tgl Exp $ */ /* * The aim is to get a simpler inteface to the database routines. @@ -1006,23 +1006,26 @@ ECPGdo(int lineno, const char *connection_name, char *query,...) va_list args; struct statement *stmt; struct connection *con = get_connection(connection_name); - bool status = true; - char *locale; + bool status; + char *oldlocale; /* Make sure we do NOT honor the locale for numeric input/output */ /* since the database wants the standard decimal point */ - locale = setlocale(LC_NUMERIC, "C"); + oldlocale = strdup(setlocale(LC_NUMERIC, NULL)); + setlocale(LC_NUMERIC, "C"); if (!ecpg_init(con, connection_name, lineno)) { - setlocale(LC_NUMERIC, locale); + setlocale(LC_NUMERIC, oldlocale); + free(oldlocale); return (false); } va_start(args, query); if (create_statement(lineno, con, &stmt, query, args) == false) { - setlocale(LC_NUMERIC, locale); + setlocale(LC_NUMERIC, oldlocale); + free(oldlocale); return (false); } va_end(args); @@ -1033,7 +1036,8 @@ ECPGdo(int lineno, const char *connection_name, char *query,...) free_statement(stmt); ECPGlog("ECPGdo: not connected to %s\n", con->name); ECPGraise(lineno, ECPG_NOT_CONN, NULL); - setlocale(LC_NUMERIC, locale); + setlocale(LC_NUMERIC, oldlocale); + free(oldlocale); return false; } @@ -1041,7 +1045,9 @@ ECPGdo(int lineno, const char *connection_name, char *query,...) free_statement(stmt); /* and reset locale value so our application is not affected */ - setlocale(LC_NUMERIC, locale); + setlocale(LC_NUMERIC, oldlocale); + free(oldlocale); + return (status); } |