Skip to content

Commit dc05a99

Browse files
committed
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.
1 parent 742d0f2 commit dc05a99

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/interfaces/ecpg/lib/execute.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.24 2001/09/25 18:37:17 meskes Exp $ */
1+
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.25 2001/09/29 20:12:07 tgl Exp $ */
22

33
/*
44
* 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,...)
10061006
va_list args;
10071007
struct statement *stmt;
10081008
struct connection *con = get_connection(connection_name);
1009-
bool status = true;
1010-
char *locale;
1009+
bool status;
1010+
char *oldlocale;
10111011

10121012
/* Make sure we do NOT honor the locale for numeric input/output */
10131013
/* since the database wants the standard decimal point */
1014-
locale = setlocale(LC_NUMERIC, "C");
1014+
oldlocale = strdup(setlocale(LC_NUMERIC, NULL));
1015+
setlocale(LC_NUMERIC, "C");
10151016

10161017
if (!ecpg_init(con, connection_name, lineno))
10171018
{
1018-
setlocale(LC_NUMERIC, locale);
1019+
setlocale(LC_NUMERIC, oldlocale);
1020+
free(oldlocale);
10191021
return (false);
10201022
}
10211023

10221024
va_start(args, query);
10231025
if (create_statement(lineno, con, &stmt, query, args) == false)
10241026
{
1025-
setlocale(LC_NUMERIC, locale);
1027+
setlocale(LC_NUMERIC, oldlocale);
1028+
free(oldlocale);
10261029
return (false);
10271030
}
10281031
va_end(args);
@@ -1033,15 +1036,18 @@ ECPGdo(int lineno, const char *connection_name, char *query,...)
10331036
free_statement(stmt);
10341037
ECPGlog("ECPGdo: not connected to %s\n", con->name);
10351038
ECPGraise(lineno, ECPG_NOT_CONN, NULL);
1036-
setlocale(LC_NUMERIC, locale);
1039+
setlocale(LC_NUMERIC, oldlocale);
1040+
free(oldlocale);
10371041
return false;
10381042
}
10391043

10401044
status = ECPGexecute(stmt);
10411045
free_statement(stmt);
10421046

10431047
/* and reset locale value so our application is not affected */
1044-
setlocale(LC_NUMERIC, locale);
1048+
setlocale(LC_NUMERIC, oldlocale);
1049+
free(oldlocale);
1050+
10451051
return (status);
10461052
}
10471053

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy