iPXE
params.h
Go to the documentation of this file.
00001 #ifndef _IPXE_PARAMS_H
00002 #define _IPXE_PARAMS_H
00003 
00004 /** @file
00005  *
00006  * Form parameters
00007  *
00008  */
00009 
00010 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
00011 
00012 #include <ipxe/list.h>
00013 #include <ipxe/refcnt.h>
00014 
00015 /** A form parameter list */
00016 struct parameters {
00017         /** Reference count */
00018         struct refcnt refcnt;
00019         /** List of all parameter lists */
00020         struct list_head list;
00021         /** Name */
00022         const char *name;
00023         /** Parameters */
00024         struct list_head entries;
00025 };
00026 
00027 /** A form parameter */
00028 struct parameter {
00029         /** List of form parameters */
00030         struct list_head list;
00031         /** Key */
00032         const char *key;
00033         /** Value */
00034         const char *value;
00035 };
00036 
00037 /**
00038  * Increment form parameter list reference count
00039  *
00040  * @v params            Parameter list, or NULL
00041  * @ret params          Parameter list as passed in
00042  */
00043 static inline __attribute__ (( always_inline )) struct parameters *
00044 params_get ( struct parameters *params ) {
00045         ref_get ( &params->refcnt );
00046         return params;
00047 }
00048 
00049 /**
00050  * Decrement form parameter list reference count
00051  *
00052  * @v params            Parameter list, or NULL
00053  */
00054 static inline __attribute__ (( always_inline )) void
00055 params_put ( struct parameters *params ) {
00056         ref_put ( &params->refcnt );
00057 }
00058 
00059 /**
00060  * Claim ownership of form parameter list
00061  *
00062  * @v params            Parameter list
00063  * @ret params          Parameter list
00064  */
00065 static inline __attribute__ (( always_inline )) struct parameters *
00066 claim_parameters ( struct parameters *params ) {
00067 
00068         /* Remove from list of parameter lists */
00069         list_del ( &params->list );
00070 
00071         return params;
00072 }
00073 
00074 /** Iterate over all form parameters in a list */
00075 #define for_each_param( param, params )                         \
00076         list_for_each_entry ( (param), &(params)->entries, list )
00077 
00078 extern struct parameters * find_parameters ( const char *name );
00079 extern struct parameters * create_parameters ( const char *name );
00080 extern struct parameter * add_parameter ( struct parameters *params,
00081                                           const char *key, const char *value );
00082 
00083 #endif /* _IPXE_PARAMS_H */