/* * Look for possible flags for a newly added variable * This is called specifically when the variable did not exist in the hash * previously, so the blanket update did not find this variable. */ void env_flags_init(ENTRY *var_entry) { const char *var_name = var_entry->key; const char *flags_list = getenv(ENV_FLAGS_VAR); char flags[ENV_FLAGS_ATTR_MAX_LEN + 1] = ""; int ret = 1; /* look in the ".flags" and static for a reference to this variable */ ret = env_flags_lookup(flags_list, var_name, flags); /* if any flags were found, set the binary form to the entry */ if (!ret && strlen(flags)) var_entry->flags = env_parse_flags_to_bin(flags); }
/* * Call for each element in the list that defines flags for a variable */ static int set_flags(const char *name, const char *value, void *priv) { ENTRY e, *ep; e.key = name; e.data = NULL; hsearch_r(e, FIND, &ep, &env_htab, 0); /* does the env variable actually exist? */ if (ep != NULL) { /* the flag list is empty, so clear the flags */ if (value == NULL || strlen(value) == 0) ep->flags = 0; else /* assign the requested flags */ ep->flags = env_parse_flags_to_bin(value); } return 0; }