00001
00002
00003
00004
00005 static const char rcsid[] =
00006 "$Id: env.c,v 1.4 2006/01/09 12:38:38 tat Exp $";
00007
00008 #include <string.h>
00009 #include <stdlib.h>
00010 #include <stdio.h>
00011
00012 #include <u/env.h>
00013 #include <u/carpal.h>
00014 #include <u/misc.h>
00015
00037 int u_env_init (const char *prefix, const char *cfile)
00038 {
00039 enum { BUFSZ = 1024 };
00040 char line[BUFSZ], pcmd[BUFSZ], *val;
00041 FILE *pi = NULL;
00042
00043 dbg_return_if (cfile == NULL || prefix == NULL, ~0);
00044
00045 snprintf(pcmd, BUFSZ, ". %s 2>/dev/null && printenv", cfile);
00046
00047 dbg_err_if ((pi = popen(pcmd, "r")) == NULL);
00048
00049 while(fgets(line, BUFSZ-1, pi))
00050 {
00051 if(strncmp(line, prefix, strlen(prefix)) == 0)
00052 {
00053 line[strlen(line)-1] = 0;
00054 val = strchr(line, '=');
00055 if(!val)
00056 continue;
00057 *val++ = 0;
00058
00059 dbg_err_if(setenv(line, val, 1));
00060 }
00061 }
00062
00063 pclose(pi);
00064 return 0;
00065
00066 err:
00067 U_PCLOSE(pi);
00068 return ~0;
00069 }
00070
00081 const char *u_env_var (const char *name)
00082 {
00083 return getenv(name);
00084 }
00085