home *** CD-ROM | disk | FTP | other *** search
/ PC Extra Super CD 1998 January / PCPLUS131.iso / DJGPP / V2 / DJLSR201.ZIP / src / libc / compat / v1 / setenv.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-15  |  1.4 KB  |  62 lines

  1. /* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */
  2. #include <libc/stubs.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. int
  7. setenv (const char *var, const char *val, int replace)
  8. {
  9.   char *prev;
  10.  
  11.   if (var == (char *)0 || val == (char *)0)
  12.     return -1;
  13.  
  14.   if ((prev  = getenv (var)) && !replace)
  15.     return 0;
  16.   else
  17.     {
  18.       size_t l_var = strlen (var);
  19.       char *envstr = (char *)alloca (l_var + strlen (val) + 2);
  20.       char *peq    = strchr (var, '=');
  21.  
  22.       if (*val == '=')
  23.         ++val;
  24.       if (peq)
  25.         l_var = peq - var;
  26.  
  27.       strncpy (envstr, var, l_var);
  28.       envstr[l_var++] = '=';
  29.       strcpy (envstr + l_var, val);
  30.  
  31.       return putenv (envstr);
  32.     }
  33. }
  34.  
  35. #ifdef  TEST
  36.  
  37. #include <stdio.h>
  38.  
  39. int
  40. main(void)
  41. {
  42.   char p[] = "ENVTEST=set-with-setenv-in-a-single-string";
  43.  
  44.   printf("ENVTEST=%s\n", getenv("ENVTEST"));
  45.   putenv("ENVTEST=set-with-putenv");
  46.   printf("ENVTEST=%s\n", getenv("ENVTEST"));
  47.   setenv("ENVTEST", "set-with-setenv-safely", 0);
  48.   printf("ENVTEST=%s\n", getenv("ENVTEST"));
  49.   setenv("ENVTEST", "set-with-setenv-forcibly", 1);
  50.   printf("ENVTEST=%s\n", getenv("ENVTEST"));
  51.   setenv("ENVTEST", "=set-with-setenv-with-equals", 1);
  52.   printf("ENVTEST=%s\n", getenv("ENVTEST"));
  53.   setenv(p, p + 8, 1);
  54.   printf("ENVTEST=%s\n", getenv("ENVTEST"));
  55.   setenv("ENVTEST", "", 1);
  56.   printf("ENVTEST=%s\n", getenv("ENVTEST"));
  57.  
  58.   return 0;
  59. }
  60.  
  61. #endif
  62.