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 392598090bSJoe Hershberger #define ENV_FLAGS_VAR ".flags" 402598090bSJoe Hershberger #define ENV_FLAGS_ATTR_MAX_LEN 2 412598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_LOC 0 422598090bSJoe Hershberger 432598090bSJoe Hershberger #ifndef CONFIG_ENV_FLAGS_LIST_STATIC 442598090bSJoe Hershberger #define CONFIG_ENV_FLAGS_LIST_STATIC "" 452598090bSJoe Hershberger #endif 462598090bSJoe Hershberger 472598090bSJoe Hershberger #define ENV_FLAGS_LIST_STATIC \ 482598090bSJoe Hershberger CONFIG_ENV_FLAGS_LIST_STATIC 492598090bSJoe Hershberger 50*fffad71bSJoe Hershberger #ifdef CONFIG_CMD_ENV_FLAGS 51*fffad71bSJoe Hershberger /* 52*fffad71bSJoe Hershberger * Print the whole list of available type flags. 53*fffad71bSJoe Hershberger */ 54*fffad71bSJoe Hershberger void env_flags_print_vartypes(void); 55*fffad71bSJoe Hershberger /* 56*fffad71bSJoe Hershberger * Return the name of the type. 57*fffad71bSJoe Hershberger */ 58*fffad71bSJoe Hershberger const char *env_flags_get_vartype_name(enum env_flags_vartype type); 59*fffad71bSJoe Hershberger #endif 60*fffad71bSJoe Hershberger 612598090bSJoe Hershberger /* 622598090bSJoe Hershberger * Parse the flags string from a .flags attribute list into the vartype enum. 632598090bSJoe Hershberger */ 642598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags); 652598090bSJoe Hershberger 6630fd4fadSJoe Hershberger #ifdef USE_HOSTCC 6730fd4fadSJoe Hershberger /* 6830fd4fadSJoe Hershberger * Look up the type of a variable directly from the .flags var. 6930fd4fadSJoe Hershberger */ 7030fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name); 7130fd4fadSJoe Hershberger /* 7230fd4fadSJoe Hershberger * Validate the newval for its type to conform with the requirements defined by 7330fd4fadSJoe Hershberger * its flags (directly looked at the .flags var). 7430fd4fadSJoe Hershberger */ 7530fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval); 7630fd4fadSJoe Hershberger /* 7730fd4fadSJoe Hershberger * Validate the parameters passed to "env set" for type compliance 7830fd4fadSJoe Hershberger */ 7930fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]); 8030fd4fadSJoe Hershberger 8130fd4fadSJoe Hershberger #else /* !USE_HOSTCC */ 8230fd4fadSJoe Hershberger 832598090bSJoe Hershberger #include <search.h> 842598090bSJoe Hershberger 852598090bSJoe Hershberger /* 862598090bSJoe Hershberger * When adding a variable to the environment, initialize the flags for that 872598090bSJoe Hershberger * variable. 882598090bSJoe Hershberger */ 892598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry); 902598090bSJoe Hershberger 912598090bSJoe Hershberger /* 922598090bSJoe Hershberger * Validate the newval for to conform with the requirements defined by its flags 932598090bSJoe Hershberger */ 942598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op, 952598090bSJoe Hershberger int flag); 962598090bSJoe Hershberger 972598090bSJoe Hershberger /* 982598090bSJoe Hershberger * These are the binary flags used in the environment entry->flags variable to 992598090bSJoe Hershberger * decribe properties of veriables in the table 1002598090bSJoe Hershberger */ 1012598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK 0x00000007 1022598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */ 1032598090bSJoe Hershberger 10430fd4fadSJoe Hershberger #endif /* USE_HOSTCC */ 10530fd4fadSJoe Hershberger 1062598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */ 107