#ifndef _IPXE_PARAMS_H #define _IPXE_PARAMS_H /** @file * * Form parameters * */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include /** A form parameter list */ struct parameters { /** Reference count */ struct refcnt refcnt; /** List of all parameter lists */ struct list_head list; /** Name */ const char *name; /** Parameters */ struct list_head entries; }; /** A form parameter */ struct parameter { /** List of form parameters */ struct list_head list; /** Key */ const char *key; /** Value */ const char *value; }; /** * Increment form parameter list reference count * * @v params Parameter list, or NULL * @ret params Parameter list as passed in */ static inline __attribute__ (( always_inline )) struct parameters * params_get ( struct parameters *params ) { ref_get ( ¶ms->refcnt ); return params; } /** * Decrement form parameter list reference count * * @v params Parameter list, or NULL */ static inline __attribute__ (( always_inline )) void params_put ( struct parameters *params ) { ref_put ( ¶ms->refcnt ); } /** * Claim ownership of form parameter list * * @v params Parameter list * @ret params Parameter list */ static inline __attribute__ (( always_inline )) struct parameters * claim_parameters ( struct parameters *params ) { /* Remove from list of parameter lists */ list_del ( ¶ms->list ); return params; } /** Iterate over all form parameters in a list */ #define for_each_param( param, params ) \ list_for_each_entry ( (param), &(params)->entries, list ) extern struct parameters * find_parameters ( const char *name ); extern struct parameters * create_parameters ( const char *name ); extern struct parameter * add_parameter ( struct parameters *params, const char *key, const char *value ); #endif /* _IPXE_PARAMS_H */