iPXE
params.c File Reference

Request parameters. More...

#include <stdlib.h>
#include <string.h>
#include <ipxe/params.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
static LIST_HEAD (parameters)
 List of all parameter lists.
static void free_parameters (struct refcnt *refcnt)
 Free request parameter list.
struct parametersfind_parameters (const char *name)
 Find request parameter list by name.
struct parameterscreate_parameters (const char *name, const char *method)
 Create request parameter list.
struct parameteradd_parameter (struct parameters *params, const char *key, const char *value, unsigned int flags)
 Add request parameter.

Detailed Description

Request parameters.

Definition in file params.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ LIST_HEAD()

LIST_HEAD ( parameters )
static

List of all parameter lists.

◆ free_parameters()

void free_parameters ( struct refcnt * refcnt)
static

Free request parameter list.

Parameters
refcntReference count

Definition at line 45 of file params.c.

45 {
46 struct parameters *params =
48 struct parameter *param;
49 struct parameter *tmp;
50
51 DBGC ( params, "PARAMS \"%s\" destroyed\n", params->name );
52
53 /* Free all parameters */
55 list_del ( &param->list );
56 free ( param );
57 }
58
59 /* Free parameter list */
60 free ( params );
61}
#define DBGC(...)
Definition compiler.h:530
struct hv_monitor_parameter param[4][32]
Parameters.
Definition hyperv.h:13
unsigned long tmp
Definition linux_pci.h:65
#define list_for_each_entry_safe(pos, tmp, head, member)
Iterate over entries in a list, safe against deletion of the current entry.
Definition list.h:459
#define list_del(list)
Delete an entry from a list.
Definition list.h:120
static void(* free)(struct refcnt *refcnt))
Definition refcnt.h:55
#define container_of(ptr, type, field)
Get containing structure.
Definition stddef.h:36
A request parameter.
Definition params.h:31
struct list_head list
List of request parameters.
Definition params.h:33
A request parameter list.
Definition params.h:17
const char * name
Name.
Definition params.h:23
struct list_head entries
Parameters.
Definition params.h:27
A reference counter.
Definition refcnt.h:27

References container_of, DBGC, parameters::entries, free, parameter::list, list_del, list_for_each_entry_safe, parameters::name, param, and tmp.

Referenced by create_parameters().

◆ find_parameters()

struct parameters * find_parameters ( const char * name)

Find request parameter list by name.

Parameters
nameParameter list name (may be NULL)
Return values
paramsParameter list, or NULL if not found

Definition at line 69 of file params.c.

69 {
70 struct parameters *params;
71
72 list_for_each_entry ( params, &parameters, list ) {
73 if ( ( params->name == name ) ||
74 ( params->name && name &&
75 ( strcmp ( params->name, name ) == 0 ) ) ) {
76 return params;
77 }
78 }
79 return NULL;
80}
#define NULL
NULL pointer (VOID *).
Definition Base.h:321
const char * name
Definition ath9k_hw.c:1986
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
Definition list.h:432
int strcmp(const char *first, const char *second)
Compare strings.
Definition string.c:174
struct list_head list
List of all parameter lists.
Definition params.h:21

References parameters::list, list_for_each_entry, name, parameters::name, NULL, and strcmp().

Referenced by create_parameters(), parse_parameters(), and parse_uri().

◆ create_parameters()

struct parameters * create_parameters ( const char * name,
const char * method )

Create request parameter list.

Parameters
nameParameter list name (may be NULL)
methodMethod name (may be NULL)
Return values
paramsParameter list, or NULL on failure

Definition at line 89 of file params.c.

90 {
91 struct parameters *params;
92 size_t name_len;
93 size_t method_len;
94 char *name_copy;
95 char *method_copy;
96
97 /* Destroy any existing parameter list of this name */
98 params = find_parameters ( name );
99 if ( params ) {
100 claim_parameters ( params );
101 params_put ( params );
102 }
103
104 /* Allocate parameter list */
105 name_len = ( name ? ( strlen ( name ) + 1 /* NUL */ ) : 0 );
106 method_len = ( method ? ( strlen ( method ) + 1 /* NUL */ ) : 0 );
107 params = zalloc ( sizeof ( *params ) + name_len + method_len );
108 if ( ! params )
109 return NULL;
110 ref_init ( &params->refcnt, free_parameters );
111 name_copy = ( ( ( void * ) params ) + sizeof ( *params ) );
112 method_copy = ( ( ( void * ) name_copy ) + name_len );
113
114 /* Populate parameter list */
115 if ( name ) {
116 strcpy ( name_copy, name );
117 params->name = name_copy;
118 }
119 if ( method ) {
120 strcpy ( method_copy, method );
121 params->method = method_copy;
122 }
123 INIT_LIST_HEAD ( &params->entries );
124
125 /* Add to list of parameter lists */
126 list_add_tail ( &params->list, &parameters );
127
128 DBGC ( params, "PARAMS \"%s\" created\n", params->name );
129 if ( params->method ) {
130 DBGC ( params, "PARAMS \"%s\" method is \"%s\"\n",
131 params->name, params->method );
132 }
133 return params;
134}
uint8_t method
Definition ib_mad.h:3
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition list.h:94
#define INIT_LIST_HEAD(list)
Initialise a list head.
Definition list.h:46
void * zalloc(size_t size)
Allocate cleared memory.
Definition malloc.c:662
static void free_parameters(struct refcnt *refcnt)
Free request parameter list.
Definition params.c:45
struct parameters * find_parameters(const char *name)
Find request parameter list by name.
Definition params.c:69
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition refcnt.h:65
char * strcpy(char *dest, const char *src)
Copy string.
Definition string.c:378
size_t strlen(const char *src)
Get length of string.
Definition string.c:244
struct refcnt refcnt
Reference count.
Definition params.h:19
const char * method
Request method.
Definition params.h:25

References DBGC, parameters::entries, find_parameters(), free_parameters(), INIT_LIST_HEAD, parameters::list, list_add_tail, method, parameters::method, name, parameters::name, NULL, ref_init, parameters::refcnt, strcpy(), strlen(), and zalloc().

Referenced by params_exec(), and uri_params_okx().

◆ add_parameter()

struct parameter * add_parameter ( struct parameters * params,
const char * key,
const char * value,
unsigned int flags )

Add request parameter.

Parameters
paramsParameter list
keyParameter key
valueParameter value
flagsParameter flags
Return values
paramParameter, or NULL on failure

Definition at line 145 of file params.c.

147 {
148 struct parameter *param;
149 size_t key_len;
150 size_t value_len;
151 char *key_copy;
152 char *value_copy;
153
154 /* Allocate parameter */
155 key_len = ( strlen ( key ) + 1 /* NUL */ );
156 value_len = ( strlen ( value ) + 1 /* NUL */ );
157 param = zalloc ( sizeof ( *param ) + key_len + value_len );
158 if ( ! param )
159 return NULL;
160 key_copy = ( ( void * ) ( param + 1 ) );
161 value_copy = ( key_copy + key_len );
162
163 /* Populate parameter */
164 strcpy ( key_copy, key );
165 param->key = key_copy;
166 strcpy ( value_copy, value );
167 param->value = value_copy;
168 param->flags = flags;
169
170 /* Add to list of parameters */
171 list_add_tail ( &param->list, &params->entries );
172
173 DBGC ( params, "PARAMS \"%s\" added \"%s\"=\"%s\"%s%s\n",
174 params->name, param->key, param->value,
175 ( ( param->flags & PARAMETER_FORM ) ? " (form)" : "" ),
176 ( ( param->flags & PARAMETER_HEADER ) ? " (header)" : "" ) );
177 return param;
178}
union @162305117151260234136356364136041353210355154177 key
pseudo_bit_t value[0x00020]
Definition arbel.h:2
uint8_t flags
Flags.
Definition ena.h:7
#define PARAMETER_HEADER
Request parameter is a header parameter.
Definition params.h:46
#define PARAMETER_FORM
Request parameter is a form parameter.
Definition params.h:43

References DBGC, parameters::entries, flags, key, list_add_tail, parameters::name, NULL, param, PARAMETER_FORM, PARAMETER_HEADER, strcpy(), strlen(), value, and zalloc().

Referenced by param_exec(), and uri_params_okx().