librazor/util.c
changeset 411 b1dcf22c0418
parent 403 e63951c1d0f8
child 416 d0aa9e0a6d04
     1.1 --- a/librazor/util.c	Thu Nov 10 10:35:21 2011 +0000
     1.2 +++ b/librazor/util.c	Wed Feb 01 12:47:50 2012 +0000
     1.3 @@ -120,9 +120,11 @@
     1.4  {
     1.5  	char buffer[size];
     1.6  
     1.7 -	memcpy(buffer, p1, size);
     1.8 -	memcpy(p1, p2, size);
     1.9 -	memcpy(p2, buffer, size);
    1.10 +	if (p1 != p2) {
    1.11 +		memcpy(buffer, p1, size);
    1.12 +		memcpy(p1, p2, size);
    1.13 +		memcpy(p2, buffer, size);
    1.14 +	}
    1.15  }
    1.16  
    1.17  static void
    1.18 @@ -226,7 +228,7 @@
    1.19  void environment_set(struct environment *env)
    1.20  {
    1.21  	int i, count;
    1.22 -	char *s;
    1.23 +	char *s, *t;
    1.24          uint32_t *r;
    1.25  
    1.26  	if (!env->is_set) {
    1.27 @@ -234,7 +236,14 @@
    1.28  		r = (uint32_t *)env->vars.data;
    1.29  		for (i = 0; i < count; i++) {
    1.30  			s = env->string_pool.data + *r++;
    1.31 +#ifdef WIN32
    1.32  			putenv(s);
    1.33 +#else
    1.34 +			t = strchr(s, '=');
    1.35 +			*t = '\0';
    1.36 +			setenv(s, t + 1, 1);
    1.37 +			*t = '=';
    1.38 +#endif
    1.39  		}
    1.40  
    1.41  		env->is_set = 1;
    1.42 @@ -252,11 +261,19 @@
    1.43  		r = (uint32_t *)env->vars.data;
    1.44  		for (i = 0; i < count; i++) {
    1.45  			s = env->string_pool.data + *r++;
    1.46 -			t = strchr(s, '=') + 1;
    1.47 +			t = strchr(s, '=');
    1.48 +#ifdef WIN32
    1.49 +			t++;
    1.50  			c = *t;
    1.51  			*t = '\0';
    1.52  			putenv(s);
    1.53  			*t = c;
    1.54 +#else
    1.55 +			c = *t;
    1.56 +			*t = '\0';
    1.57 +			unsetenv(s);
    1.58 +			*t = c;
    1.59 +#endif
    1.60  		}
    1.61  
    1.62  		env->is_set = 0;