libnl  1.1.4
Abstract Data

General

struct nl_data * nl_data_alloc (void *buf, size_t size)
 Allocate a new abstract data object. More...
 
struct nl_data * nl_data_clone (struct nl_data *src)
 Clone an abstract data object. More...
 
int nl_data_append (struct nl_data *data, void *buf, size_t size)
 Append data to an abstract data object. More...
 
void nl_data_free (struct nl_data *data)
 Free an abstract data object. More...
 

Attribute Access

void * nl_data_get (struct nl_data *data)
 Get data buffer of abstract data object. More...
 
size_t nl_data_get_size (struct nl_data *data)
 Get size of data buffer of abstract data object. More...
 

Misc

int nl_data_cmp (struct nl_data *a, struct nl_data *b)
 Compare two abstract data objects. More...
 

Detailed Description

Function Documentation

◆ nl_data_alloc()

struct nl_data* nl_data_alloc ( void *  buf,
size_t  size 
)
Parameters
bufData buffer containing the actual data.
sizeSize of data buffer.

Allocates a new abstract data and copies the specified data buffer into the new handle.

Returns
Newly allocated data handle or NULL

Definition at line 38 of file data.c.

Referenced by nl_data_clone(), and nla_get_data().

39 {
40  struct nl_data *data;
41 
42  data = calloc(1, sizeof(*data));
43  if (!data)
44  goto errout;
45 
46  data->d_data = calloc(1, size);
47  if (!data->d_data) {
48  free(data);
49  goto errout;
50  }
51 
52  data->d_size = size;
53 
54  if (buf)
55  memcpy(data->d_data, buf, size);
56 
57  return data;
58 errout:
59  nl_errno(ENOMEM);
60  return NULL;
61 }

◆ nl_data_clone()

struct nl_data* nl_data_clone ( struct nl_data *  src)
Parameters
srcAbstract data object
Returns
Cloned object or NULL

Definition at line 69 of file data.c.

References nl_data_alloc().

70 {
71  return nl_data_alloc(src->d_data, src->d_size);
72 }
struct nl_data * nl_data_alloc(void *buf, size_t size)
Allocate a new abstract data object.
Definition: data.c:38

◆ nl_data_append()

int nl_data_append ( struct nl_data *  data,
void *  buf,
size_t  size 
)
Parameters
dataAbstract data object.
bufData buffer containing the data to be appended.
sizeSize of data to be apppended.

Reallocates an abstract data and copies the specified data buffer into the new handle.

Returns
0 on success or a negative error code

Definition at line 85 of file data.c.

86 {
87  if (size < 0)
88  BUG();
89 
90  if (size > 0) {
91  data->d_data = realloc(data->d_data, data->d_size + size);
92  if (!data->d_data)
93  return nl_errno(ENOMEM);
94 
95  if (buf)
96  memcpy(data->d_data + data->d_size, buf, size);
97  else
98  memset(data->d_data + data->d_size, 0, size);
99 
100  data->d_size += size;
101  }
102 
103  return 0;
104 }

◆ nl_data_free()

void nl_data_free ( struct nl_data *  data)
Parameters
dataAbstract data object.

Definition at line 110 of file data.c.

111 {
112  if (data)
113  free(data->d_data);
114 
115  free(data);
116 }

◆ nl_data_get()

void* nl_data_get ( struct nl_data *  data)
Parameters
dataAbstract data object.
Returns
Data buffer or NULL if empty.

Definition at line 130 of file data.c.

Referenced by nl_data_cmp(), and nla_put_data().

131 {
132  return data->d_size > 0 ? data->d_data : NULL;
133 }

◆ nl_data_get_size()

size_t nl_data_get_size ( struct nl_data *  data)
Parameters
dataAbstract data object.
Returns
Size of data buffer.

Definition at line 140 of file data.c.

Referenced by nl_data_cmp(), and nla_put_data().

141 {
142  return data->d_size;
143 }

◆ nl_data_cmp()

int nl_data_cmp ( struct nl_data *  a,
struct nl_data *  b 
)
Parameters
aAbstract data object.
bAnother abstract data object.
Returns
An integer less than, equal to, or greater than zero if a is found, respectively, to be less than, to match, or be greater than b.

Definition at line 160 of file data.c.

References nl_data_get(), and nl_data_get_size().

161 {
162  void *a_ = nl_data_get(a);
163  void *b_ = nl_data_get(b);
164 
165  if (a_ && b_)
166  return memcmp(a_, b_, nl_data_get_size(a));
167  else
168  return -1;
169 }
size_t nl_data_get_size(struct nl_data *data)
Get size of data buffer of abstract data object.
Definition: data.c:140
void * nl_data_get(struct nl_data *data)
Get data buffer of abstract data object.
Definition: data.c:130