Commit c06a3050 authored by Alexander Nozdrin's avatar Alexander Nozdrin

Backporting revision from mysql-6.0-codebase-bugfixing.

Original revision:

------------------------------------------------------------
revno: 3789.1.9
revision-id: serg@mysql.com-20091229134448-phe834ukzmi0k2e3
parent: serg@mysql.com-20091227081418-bgfg952gzumn1k3h
committer: Sergei Golubchik <serg@mysql.com>
branch nick: 6.0-codebase
timestamp: Tue 2009-12-29 14:44:48 +0100
message:
  better fix for Bug#48758 mysqltest crashes on sys_vars.collation_server_basic in gcov builds
  
  use setenv instead of putenv
------------------------------------------------------------
parent 7973ab7c
...@@ -72,6 +72,10 @@ ...@@ -72,6 +72,10 @@
#define QUERY_SEND_FLAG 1 #define QUERY_SEND_FLAG 1
#define QUERY_REAP_FLAG 2 #define QUERY_REAP_FLAG 2
#ifndef HAVE_SETENV
#error implement our portable setenv replacement in mysys
#endif
enum { enum {
OPT_SKIP_SAFEMALLOC=OPT_MAX_CLIENT_OPTION, OPT_SKIP_SAFEMALLOC=OPT_MAX_CLIENT_OPTION,
OPT_PS_PROTOCOL, OPT_SP_PROTOCOL, OPT_CURSOR_PROTOCOL, OPT_VIEW_PROTOCOL, OPT_PS_PROTOCOL, OPT_SP_PROTOCOL, OPT_CURSOR_PROTOCOL, OPT_VIEW_PROTOCOL,
...@@ -216,7 +220,6 @@ typedef struct ...@@ -216,7 +220,6 @@ typedef struct
int alloced_len; int alloced_len;
int int_dirty; /* do not update string if int is updated until first read */ int int_dirty; /* do not update string if int is updated until first read */
int alloced; int alloced;
char *env_s;
} VAR; } VAR;
/*Perl/shell-like variable registers */ /*Perl/shell-like variable registers */
...@@ -1941,7 +1944,6 @@ VAR *var_init(VAR *v, const char *name, int name_len, const char *val, ...@@ -1941,7 +1944,6 @@ VAR *var_init(VAR *v, const char *name, int name_len, const char *val,
tmp_var->alloced_len = val_alloc_len; tmp_var->alloced_len = val_alloc_len;
tmp_var->int_val = (val) ? atoi(val) : 0; tmp_var->int_val = (val) ? atoi(val) : 0;
tmp_var->int_dirty = 0; tmp_var->int_dirty = 0;
tmp_var->env_s = 0;
return tmp_var; return tmp_var;
} }
...@@ -2069,20 +2071,18 @@ void var_set(const char *var_name, const char *var_name_end, ...@@ -2069,20 +2071,18 @@ void var_set(const char *var_name, const char *var_name_end,
if (env_var) if (env_var)
{ {
char buf[1024], *old_env_s= v->env_s;
if (v->int_dirty) if (v->int_dirty)
{ {
sprintf(v->str_val, "%d", v->int_val); sprintf(v->str_val, "%d", v->int_val);
v->int_dirty= 0; v->int_dirty= 0;
v->str_val_len= strlen(v->str_val); v->str_val_len= strlen(v->str_val);
} }
my_snprintf(buf, sizeof(buf), "%.*s=%.*s", char oldc= v->name[v->name_len];
v->name_len, v->name, if (oldc)
v->str_val_len, v->str_val); v->name[v->name_len]= 0; // setenv() expects \0-terminated strings
if (!(v->env_s= my_strdup(buf, MYF(MY_WME)))) setenv(v->name, v->str_val, 1); // v->str_val is always \0-terminated
die("Out of memory"); if (oldc)
putenv(v->env_s); v->name[v->name_len]= oldc;
my_free(old_env_s, MYF(MY_ALLOW_ZERO_PTR));
} }
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
...@@ -318,9 +318,12 @@ inline ulonglong double2ulonglong(double d) ...@@ -318,9 +318,12 @@ inline ulonglong double2ulonglong(double d)
#define strcasecmp stricmp #define strcasecmp stricmp
#define strncasecmp strnicmp #define strncasecmp strnicmp
#define HAVE_SNPRINTF /* Gave link error */ #define HAVE_SNPRINTF 1
#define snprintf _snprintf #define snprintf _snprintf
#define HAVE_SETENV 1
#define setenv(VAR,VAL,X) _putenv_s(VAR,VAL)
#ifdef _MSC_VER #ifdef _MSC_VER
#define HAVE_LDIV /* The optimizer breaks in zortech for ldiv */ #define HAVE_LDIV /* The optimizer breaks in zortech for ldiv */
#define HAVE_ANSI_INCLUDE #define HAVE_ANSI_INCLUDE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment