12598090bSJoe Hershberger /* 22598090bSJoe Hershberger * (C) Copyright 2012 32598090bSJoe Hershberger * Joe Hershberger, National Instruments, joe.hershberger@ni.com 42598090bSJoe Hershberger * 52598090bSJoe Hershberger * See file CREDITS for list of people who contributed to this 62598090bSJoe Hershberger * project. 72598090bSJoe Hershberger * 82598090bSJoe Hershberger * This program is free software; you can redistribute it and/or 92598090bSJoe Hershberger * modify it under the terms of the GNU General Public License as 102598090bSJoe Hershberger * published by the Free Software Foundation; either version 2 of 112598090bSJoe Hershberger * the License, or (at your option) any later version. 122598090bSJoe Hershberger * 132598090bSJoe Hershberger * This program is distributed in the hope that it will be useful, 142598090bSJoe Hershberger * but WITHOUT ANY WARRANTY; without even the implied warranty of 152598090bSJoe Hershberger * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 162598090bSJoe Hershberger * GNU General Public License for more details. 172598090bSJoe Hershberger * 182598090bSJoe Hershberger * You should have received a copy of the GNU General Public License 192598090bSJoe Hershberger * along with this program; if not, write to the Free Software 202598090bSJoe Hershberger * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 212598090bSJoe Hershberger * MA 02111-1307 USA 222598090bSJoe Hershberger */ 232598090bSJoe Hershberger 242598090bSJoe Hershberger #ifndef __ENV_FLAGS_H__ 252598090bSJoe Hershberger #define __ENV_FLAGS_H__ 262598090bSJoe Hershberger 272598090bSJoe Hershberger enum env_flags_vartype { 282598090bSJoe Hershberger env_flags_vartype_string, 292598090bSJoe Hershberger env_flags_vartype_decimal, 302598090bSJoe Hershberger env_flags_vartype_hex, 312598090bSJoe Hershberger env_flags_vartype_bool, 322598090bSJoe Hershberger #ifdef CONFIG_CMD_NET 332598090bSJoe Hershberger env_flags_vartype_ipaddr, 342598090bSJoe Hershberger env_flags_vartype_macaddr, 352598090bSJoe Hershberger #endif 362598090bSJoe Hershberger env_flags_vartype_end 372598090bSJoe Hershberger }; 382598090bSJoe Hershberger 39*267541f7SJoe Hershberger enum env_flags_varaccess { 40*267541f7SJoe Hershberger env_flags_varaccess_any, 41*267541f7SJoe Hershberger env_flags_varaccess_readonly, 42*267541f7SJoe Hershberger env_flags_varaccess_writeonce, 43*267541f7SJoe Hershberger env_flags_varaccess_changedefault, 44*267541f7SJoe Hershberger env_flags_varaccess_end 45*267541f7SJoe Hershberger }; 46*267541f7SJoe Hershberger 472598090bSJoe Hershberger #define ENV_FLAGS_VAR ".flags" 482598090bSJoe Hershberger #define ENV_FLAGS_ATTR_MAX_LEN 2 492598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_LOC 0 50*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_LOC 1 512598090bSJoe Hershberger 522598090bSJoe Hershberger #ifndef CONFIG_ENV_FLAGS_LIST_STATIC 532598090bSJoe Hershberger #define CONFIG_ENV_FLAGS_LIST_STATIC "" 542598090bSJoe Hershberger #endif 552598090bSJoe Hershberger 562598090bSJoe Hershberger #define ENV_FLAGS_LIST_STATIC \ 572598090bSJoe Hershberger CONFIG_ENV_FLAGS_LIST_STATIC 582598090bSJoe Hershberger 59fffad71bSJoe Hershberger #ifdef CONFIG_CMD_ENV_FLAGS 60fffad71bSJoe Hershberger /* 61fffad71bSJoe Hershberger * Print the whole list of available type flags. 62fffad71bSJoe Hershberger */ 63fffad71bSJoe Hershberger void env_flags_print_vartypes(void); 64fffad71bSJoe Hershberger /* 65*267541f7SJoe Hershberger * Print the whole list of available access flags. 66*267541f7SJoe Hershberger */ 67*267541f7SJoe Hershberger void env_flags_print_varaccess(void); 68*267541f7SJoe Hershberger /* 69fffad71bSJoe Hershberger * Return the name of the type. 70fffad71bSJoe Hershberger */ 71fffad71bSJoe Hershberger const char *env_flags_get_vartype_name(enum env_flags_vartype type); 72*267541f7SJoe Hershberger /* 73*267541f7SJoe Hershberger * Return the name of the access. 74*267541f7SJoe Hershberger */ 75*267541f7SJoe Hershberger const char *env_flags_get_varaccess_name(enum env_flags_varaccess access); 76fffad71bSJoe Hershberger #endif 77fffad71bSJoe Hershberger 782598090bSJoe Hershberger /* 792598090bSJoe Hershberger * Parse the flags string from a .flags attribute list into the vartype enum. 802598090bSJoe Hershberger */ 812598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags); 82*267541f7SJoe Hershberger /* 83*267541f7SJoe Hershberger * Parse the flags string from a .flags attribute list into the varaccess enum. 84*267541f7SJoe Hershberger */ 85*267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess(const char *flags); 86*267541f7SJoe Hershberger /* 87*267541f7SJoe Hershberger * Parse the binary flags from a hash table entry into the varaccess enum. 88*267541f7SJoe Hershberger */ 89*267541f7SJoe Hershberger enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags); 902598090bSJoe Hershberger 9130fd4fadSJoe Hershberger #ifdef USE_HOSTCC 9230fd4fadSJoe Hershberger /* 9330fd4fadSJoe Hershberger * Look up the type of a variable directly from the .flags var. 9430fd4fadSJoe Hershberger */ 9530fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name); 9630fd4fadSJoe Hershberger /* 97*267541f7SJoe Hershberger * Look up the access of a variable directly from the .flags var. 98*267541f7SJoe Hershberger */ 99*267541f7SJoe Hershberger enum env_flags_varaccess env_flags_get_access(const char *name); 100*267541f7SJoe Hershberger /* 10130fd4fadSJoe Hershberger * Validate the newval for its type to conform with the requirements defined by 10230fd4fadSJoe Hershberger * its flags (directly looked at the .flags var). 10330fd4fadSJoe Hershberger */ 10430fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval); 10530fd4fadSJoe Hershberger /* 106*267541f7SJoe Hershberger * Validate the newval for its access to conform with the requirements defined 107*267541f7SJoe Hershberger * by its flags (directly looked at the .flags var). 108*267541f7SJoe Hershberger */ 109*267541f7SJoe Hershberger int env_flags_validate_access(const char *name, int check_mask); 110*267541f7SJoe Hershberger /* 111*267541f7SJoe Hershberger * Validate that the proposed access to variable "name" is valid according to 112*267541f7SJoe Hershberger * the defined flags for that variable, if any. 113*267541f7SJoe Hershberger */ 114*267541f7SJoe Hershberger int env_flags_validate_varaccess(const char *name, int check_mask); 115*267541f7SJoe Hershberger /* 11630fd4fadSJoe Hershberger * Validate the parameters passed to "env set" for type compliance 11730fd4fadSJoe Hershberger */ 11830fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]); 11930fd4fadSJoe Hershberger 12030fd4fadSJoe Hershberger #else /* !USE_HOSTCC */ 12130fd4fadSJoe Hershberger 1222598090bSJoe Hershberger #include <search.h> 1232598090bSJoe Hershberger 1242598090bSJoe Hershberger /* 1252598090bSJoe Hershberger * When adding a variable to the environment, initialize the flags for that 1262598090bSJoe Hershberger * variable. 1272598090bSJoe Hershberger */ 1282598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry); 1292598090bSJoe Hershberger 1302598090bSJoe Hershberger /* 1312598090bSJoe Hershberger * Validate the newval for to conform with the requirements defined by its flags 1322598090bSJoe Hershberger */ 1332598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op, 1342598090bSJoe Hershberger int flag); 1352598090bSJoe Hershberger 136*267541f7SJoe Hershberger #endif /* USE_HOSTCC */ 137*267541f7SJoe Hershberger 1382598090bSJoe Hershberger /* 1392598090bSJoe Hershberger * These are the binary flags used in the environment entry->flags variable to 1402598090bSJoe Hershberger * decribe properties of veriables in the table 1412598090bSJoe Hershberger */ 1422598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK 0x00000007 1432598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */ 144*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_DELETE 0x00000008 145*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_CREATE 0x00000010 146*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR 0x00000020 147*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR 0x00000040 148*267541f7SJoe Hershberger #define ENV_FLAGS_VARACCESS_BIN_MASK 0x00000078 14930fd4fadSJoe Hershberger 1502598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */ 151