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 502598090bSJoe Hershberger /* 512598090bSJoe Hershberger * Parse the flags string from a .flags attribute list into the vartype enum. 522598090bSJoe Hershberger */ 532598090bSJoe Hershberger enum env_flags_vartype env_flags_parse_vartype(const char *flags); 542598090bSJoe Hershberger 55*30fd4fadSJoe Hershberger #ifdef USE_HOSTCC 56*30fd4fadSJoe Hershberger /* 57*30fd4fadSJoe Hershberger * Look up the type of a variable directly from the .flags var. 58*30fd4fadSJoe Hershberger */ 59*30fd4fadSJoe Hershberger enum env_flags_vartype env_flags_get_type(const char *name); 60*30fd4fadSJoe Hershberger /* 61*30fd4fadSJoe Hershberger * Validate the newval for its type to conform with the requirements defined by 62*30fd4fadSJoe Hershberger * its flags (directly looked at the .flags var). 63*30fd4fadSJoe Hershberger */ 64*30fd4fadSJoe Hershberger int env_flags_validate_type(const char *name, const char *newval); 65*30fd4fadSJoe Hershberger /* 66*30fd4fadSJoe Hershberger * Validate the parameters passed to "env set" for type compliance 67*30fd4fadSJoe Hershberger */ 68*30fd4fadSJoe Hershberger int env_flags_validate_env_set_params(int argc, char * const argv[]); 69*30fd4fadSJoe Hershberger 70*30fd4fadSJoe Hershberger #else /* !USE_HOSTCC */ 71*30fd4fadSJoe Hershberger 722598090bSJoe Hershberger #include <search.h> 732598090bSJoe Hershberger 742598090bSJoe Hershberger /* 752598090bSJoe Hershberger * When adding a variable to the environment, initialize the flags for that 762598090bSJoe Hershberger * variable. 772598090bSJoe Hershberger */ 782598090bSJoe Hershberger void env_flags_init(ENTRY *var_entry); 792598090bSJoe Hershberger 802598090bSJoe Hershberger /* 812598090bSJoe Hershberger * Validate the newval for to conform with the requirements defined by its flags 822598090bSJoe Hershberger */ 832598090bSJoe Hershberger int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op, 842598090bSJoe Hershberger int flag); 852598090bSJoe Hershberger 862598090bSJoe Hershberger /* 872598090bSJoe Hershberger * These are the binary flags used in the environment entry->flags variable to 882598090bSJoe Hershberger * decribe properties of veriables in the table 892598090bSJoe Hershberger */ 902598090bSJoe Hershberger #define ENV_FLAGS_VARTYPE_BIN_MASK 0x00000007 912598090bSJoe Hershberger /* The actual variable type values use the enum value (within the mask) */ 922598090bSJoe Hershberger 93*30fd4fadSJoe Hershberger #endif /* USE_HOSTCC */ 94*30fd4fadSJoe Hershberger 952598090bSJoe Hershberger #endif /* __ENV_FLAGS_H__ */ 96