You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

params.h 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef _IPXE_PARAMS_H
  2. #define _IPXE_PARAMS_H
  3. /** @file
  4. *
  5. * Form parameters
  6. *
  7. */
  8. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
  9. #include <ipxe/list.h>
  10. #include <ipxe/refcnt.h>
  11. /** A form parameter list */
  12. struct parameters {
  13. /** Reference count */
  14. struct refcnt refcnt;
  15. /** List of all parameter lists */
  16. struct list_head list;
  17. /** Name */
  18. const char *name;
  19. /** Parameters */
  20. struct list_head entries;
  21. };
  22. /** A form parameter */
  23. struct parameter {
  24. /** List of form parameters */
  25. struct list_head list;
  26. /** Key */
  27. const char *key;
  28. /** Value */
  29. const char *value;
  30. };
  31. /**
  32. * Increment form parameter list reference count
  33. *
  34. * @v params Parameter list, or NULL
  35. * @ret params Parameter list as passed in
  36. */
  37. static inline __attribute__ (( always_inline )) struct parameters *
  38. params_get ( struct parameters *params ) {
  39. ref_get ( &params->refcnt );
  40. return params;
  41. }
  42. /**
  43. * Decrement form parameter list reference count
  44. *
  45. * @v params Parameter list, or NULL
  46. */
  47. static inline __attribute__ (( always_inline )) void
  48. params_put ( struct parameters *params ) {
  49. ref_put ( &params->refcnt );
  50. }
  51. /**
  52. * Claim ownership of form parameter list
  53. *
  54. * @v params Parameter list
  55. * @ret params Parameter list
  56. */
  57. static inline __attribute__ (( always_inline )) struct parameters *
  58. claim_parameters ( struct parameters *params ) {
  59. /* Remove from list of parameter lists */
  60. list_del ( &params->list );
  61. return params;
  62. }
  63. /** Iterate over all form parameters in a list */
  64. #define for_each_param( param, params ) \
  65. list_for_each_entry ( (param), &(params)->entries, list )
  66. extern struct parameters * find_parameters ( const char *name );
  67. extern struct parameters * create_parameters ( const char *name );
  68. extern struct parameter * add_parameter ( struct parameters *params,
  69. const char *key, const char *value );
  70. #endif /* _IPXE_PARAMS_H */