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)
 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:505
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:29
struct list_head list
List of request parameters.
Definition params.h:31
A request parameter list.
Definition params.h:17
const char * name
Name.
Definition params.h:23
struct list_head entries
Parameters.
Definition params.h:25
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 ( strcmp ( params->name, name ) == 0 ) ) {
75 return params;
76 }
77 }
78 return NULL;
79}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
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)

Create request parameter list.

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

Definition at line 87 of file params.c.

87 {
88 struct parameters *params;
89 size_t name_len;
90 char *name_copy;
91
92 /* Destroy any existing parameter list of this name */
93 params = find_parameters ( name );
94 if ( params ) {
95 claim_parameters ( params );
96 params_put ( params );
97 }
98
99 /* Allocate parameter list */
100 name_len = ( name ? ( strlen ( name ) + 1 /* NUL */ ) : 0 );
101 params = zalloc ( sizeof ( *params ) + name_len );
102 if ( ! params )
103 return NULL;
104 ref_init ( &params->refcnt, free_parameters );
105 name_copy = ( ( void * ) ( params + 1 ) );
106
107 /* Populate parameter list */
108 if ( name ) {
109 strcpy ( name_copy, name );
110 params->name = name_copy;
111 }
112 INIT_LIST_HEAD ( &params->entries );
113
114 /* Add to list of parameter lists */
115 list_add_tail ( &params->list, &parameters );
116
117 DBGC ( params, "PARAMS \"%s\" created\n", params->name );
118 return params;
119}
#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:347
size_t strlen(const char *src)
Get length of string.
Definition string.c:244
struct refcnt refcnt
Reference count.
Definition params.h:19

References DBGC, parameters::entries, find_parameters(), free_parameters(), INIT_LIST_HEAD, parameters::list, list_add_tail, 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 130 of file params.c.

132 {
133 struct parameter *param;
134 size_t key_len;
135 size_t value_len;
136 char *key_copy;
137 char *value_copy;
138
139 /* Allocate parameter */
140 key_len = ( strlen ( key ) + 1 /* NUL */ );
141 value_len = ( strlen ( value ) + 1 /* NUL */ );
142 param = zalloc ( sizeof ( *param ) + key_len + value_len );
143 if ( ! param )
144 return NULL;
145 key_copy = ( ( void * ) ( param + 1 ) );
146 value_copy = ( key_copy + key_len );
147
148 /* Populate parameter */
149 strcpy ( key_copy, key );
150 param->key = key_copy;
151 strcpy ( value_copy, value );
152 param->value = value_copy;
153 param->flags = flags;
154
155 /* Add to list of parameters */
156 list_add_tail ( &param->list, &params->entries );
157
158 DBGC ( params, "PARAMS \"%s\" added \"%s\"=\"%s\"%s%s\n",
159 params->name, param->key, param->value,
160 ( ( param->flags & PARAMETER_FORM ) ? " (form)" : "" ),
161 ( ( param->flags & PARAMETER_HEADER ) ? " (header)" : "" ) );
162 return param;
163}
union @162305117151260234136356364136041353210355154177 key
Sense key.
Definition scsi.h:3
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:44
#define PARAMETER_FORM
Request parameter is a form parameter.
Definition params.h:41

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().