44 : env_Hash(8,13), secEntity(secent)
46 char *vdp, varsave, *varname, *varvalu;
48 if (!vardata) {global_env = 0; global_len = 0;
return;}
52 if (!varlen) varlen = strlen(vardata);
56 while(*vardata ==
'&' && varlen) {vardata++; varlen--;}
57 if (!varlen) {global_env = 0; global_len = 0;
return;}
58 global_env = (
char *)malloc(varlen+2);
59 *global_env =
'&'; vdp = global_env+1;
60 memcpy((
void *)vdp, (
const void *)vardata, (
size_t)varlen);
61 *(vdp+varlen) =
'\0'; global_len = varlen+1;
66 {
while(*vdp ==
'&') vdp++;
69 while(*vdp && *vdp !=
'=' && *vdp !=
'&') vdp++;
71 if (*vdp ==
'&')
continue;
75 while(*vdp && *vdp !=
'&') vdp++;
76 varsave = *vdp; *vdp =
'\0';
78 if (*varname && *varvalu)
81 *vdp = varsave; *(varvalu-1) =
'=';
92 while(*value)
if (*value ==
',') {*value =
'\0';
return ++value;}
101#define TIDY_ENVVAR " Xrd Ouc Env "
103void XrdOucEnv::EnvBuildTidy()
105 char *tidyEnv, *authInfo;
111 if ((authInfo = strstr(global_env,
"authz=")) == 0)
119 aBeg = authInfo - global_env;
120 if (aBeg && global_env[aBeg-1] ==
'&') aBeg--;
121 if (!(tidyEnv = index(authInfo+6,
'&')))
122 {
char aSave = global_env[aBeg];
123 global_env[aBeg] = 0;
125 global_env[aBeg] = aSave;
129 {tidyStr.
erase(aBeg);
132 tidyStr.
erase(aBeg, aEnd-aBeg);
149 if ((envlen = global_len) == 0 || global_env == 0)
return 0;
154 {
if (*tidyEnv == 0)
break;
155 envlen = strlen(tidyEnv);
172 int vLen = strlen(Var);
181 eBuff = (
char *)malloc(vLen+strlen(Val)+2);
187 strcpy(eBuff+vLen+1, Val);
188 return putenv(eBuff);
196 sprintf(buff,
"%d", Val);
206 char *value = getenv( var );
207 if( !value || !*value )
220 if( !
Import( var, value ) )
224 val = strtol( value, &status, 0 );
242 if ((cP = env_Hash.
Find(varname)) == NULL)
return -999999999;
254 char stringValue[24];
255 sprintf(stringValue,
"%ld", value);
266 char *cP, *Value = (
char *)&Valp;
267 int cLen, n, i = 0, Odd = 0;
271 if ((cP = env_Hash.
Find(varname)) == NULL)
return (
void *)0;
275 if ((cLen = strlen(cP)) != (
int)
sizeof(
void *)*2)
return (
void *)0;
280 {
if (*cP >=
'0' && *cP <=
'9') n = *cP-48;
281 else if (*cP >=
'a' && *cP <=
'f') n = *cP-87;
282 else if (*cP >=
'A' && *cP <=
'F') n = *cP-55;
283 else return (
void *)0;
284 if (Odd) Value[i++] |= n;
285 else Value[i ] = n << 4;
300 static const char hv[] =
"0123456789abcdef";
301 char Buff[
sizeof(
void *)*2+1], *Value = (
char *)&value;
306 if (value)
for (i = 0; i <(int)
sizeof(
void *); i++)
307 {Buff[j++] = hv[(Value[i] >> 4) & 0x0f];
308 Buff[j++] = hv[ Value[i] & 0x0f];
void PutInt(const char *varname, long value)
long GetInt(const char *varname)
char * EnvTidy(int &envlen)
static bool Import(const char *var, char *&val)
char * Get(const char *varname)
static int Export(const char *Var, const char *Val)
void * GetPtr(const char *varname)
void PutPtr(const char *varname, void *value)
void Put(const char *varname, const char *value)
char * Delimit(char *value)
XrdOucEnv(const char *vardata=0, int vardlen=0, const XrdSecEntity *secent=0)
T * Rep(const char *KeyVal, T *KeyData, const int LifeTime=0, XrdOucHash_Options opt=Hash_default)
T * Find(const char *KeyVal, time_t *KeyTime=0)
int erase(int start=0, int size=0)
int find(const char c, int start=0, bool forward=1)
const char * c_str() const