Main Page | Modules | Data Structures | File List | Data Fields

env.c

00001 /*
00002  * Copyright (c) 2005, 2006 by KoanLogic s.r.l. - All rights reserved.
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; /* should never happen... */
00057             *val++ = 0;
00058             /* line is the name and val the value */
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 

←Products
© 2005-2006 - KoanLogic S.r.l. - All rights reserved