00001 #include <string.h>
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <grass/config.h>
00005 #include <grass/gis.h>
00006
00007
00008
00009
00010
00011
00012
00013
00014 #if !defined(HAVE_PUTENV) && !defined(HAVE_SETENV)
00015 extern char **environ;
00016 #endif
00017
00018 void G_putenv(const char *name, const char *value)
00019 {
00020 char buf[1024];
00021
00022 #if defined(HAVE_PUTENV)
00023 sprintf(buf, "%s=%s", name, value);
00024 putenv(G_store(buf));
00025 #elif defined(HAVE_SETENV)
00026 setenv(name, value, 1);
00027 #else
00028 static int first = 1;
00029 int i;
00030 char **newenv;
00031 char *env;
00032
00033 if (first) {
00034 for (i = 0; environ[i]; i++) ;
00035 newenv = (char **)G_malloc((i + 1) * sizeof(char *));
00036 for (i = 0; env = environ[i], env; i++)
00037 newenv[i] = G_store(env);
00038 newenv[i] = NULL;
00039 environ = newenv;
00040 first = 0;
00041 }
00042
00043 for (i = 0; env = environ[i], env; i++) {
00044 char temp[4];
00045
00046 if (sscanf(env, "%[^=]=%1s", buf, temp) < 1)
00047 continue;
00048
00049 if (strcmp(buf, name) != 0)
00050 continue;
00051
00052 G_free(env);
00053 sprintf(buf, "%s=%s", name, value);
00054 environ[i] = G_store(buf);
00055
00056 return;
00057 }
00058 environ = (char **)G_realloc(environ, (i + 2) * sizeof(char *));
00059 sprintf(buf, "%s=%s", name, value);
00060 environ[i++] = G_store(buf);
00061 environ[i] = NULL;
00062 #endif
00063 }