/* * Parse the flag charachters from the .flags attribute list into the binary * form to be stored in the environment entry->flags field. */ static int env_parse_flags_to_bin(const char *flags) { int binflags; binflags = env_flags_parse_vartype(flags) & ENV_FLAGS_VARTYPE_BIN_MASK; binflags |= env_flags_varaccess_mask[env_flags_parse_varaccess(flags)]; return binflags; }
static int print_static_flags(const char *var_name, const char *flags) { enum env_flags_vartype type = env_flags_parse_vartype(flags); enum env_flags_varaccess access = env_flags_parse_varaccess(flags); printf("\t%-20s %-20s %-20s\n", var_name, env_flags_get_vartype_name(type), env_flags_get_varaccess_name(access)); return 0; }
/* * Look up the access of a variable directly from the .flags var. */ enum env_flags_varaccess env_flags_get_varaccess(const char *name) { const char *flags_list = getenv(ENV_FLAGS_VAR); char flags[ENV_FLAGS_ATTR_MAX_LEN + 1]; if (env_flags_lookup(flags_list, name, flags)) return env_flags_varaccess_any; if (strlen(flags) <= ENV_FLAGS_VARACCESS_LOC) return env_flags_varaccess_any; return env_flags_parse_varaccess(flags); }