libnl 1.1
|
General | |
struct nl_data * | nl_data_alloc (void *buf, size_t size) |
Allocate a new abstract data object. | |
struct nl_data * | nl_data_clone (struct nl_data *src) |
Clone an abstract data object. | |
int | nl_data_append (struct nl_data *data, void *buf, size_t size) |
Append data to an abstract data object. | |
void | nl_data_free (struct nl_data *data) |
Free an abstract data object. | |
Attribute Access | |
void * | nl_data_get (struct nl_data *data) |
Get data buffer of abstract data object. | |
size_t | nl_data_get_size (struct nl_data *data) |
Get size of data buffer of abstract data object. | |
Misc | |
int | nl_data_cmp (struct nl_data *a, struct nl_data *b) |
Compare two abstract data objects. |
struct nl_data* nl_data_alloc | ( | void * | buf, |
size_t | size | ||
) | [read] |
buf | Data buffer containing the actual data. |
size | Size of data buffer. |
Allocates a new abstract data and copies the specified data buffer into the new handle.
Definition at line 38 of file data.c.
Referenced by nl_data_clone(), and nla_get_data().
{ struct nl_data *data; data = calloc(1, sizeof(*data)); if (!data) goto errout; data->d_data = calloc(1, size); if (!data->d_data) { free(data); goto errout; } data->d_size = size; if (buf) memcpy(data->d_data, buf, size); return data; errout: nl_errno(ENOMEM); return NULL; }
struct nl_data* nl_data_clone | ( | struct nl_data * | src | ) | [read] |
src | Abstract data object |
Definition at line 69 of file data.c.
References nl_data_alloc().
{ return nl_data_alloc(src->d_data, src->d_size); }
int nl_data_append | ( | struct nl_data * | data, |
void * | buf, | ||
size_t | size | ||
) |
data | Abstract data object. |
buf | Data buffer containing the data to be appended. |
size | Size of data to be apppended. |
Reallocates an abstract data and copies the specified data buffer into the new handle.
Definition at line 85 of file data.c.
Referenced by rtnl_u32_add_key().
{ if (size < 0) BUG(); if (size > 0) { data->d_data = realloc(data->d_data, data->d_size + size); if (!data->d_data) return nl_errno(ENOMEM); if (buf) memcpy(data->d_data + data->d_size, buf, size); else memset(data->d_data + data->d_size, 0, size); data->d_size += size; } return 0; }
void nl_data_free | ( | struct nl_data * | data | ) |
void* nl_data_get | ( | struct nl_data * | data | ) |
data | Abstract data object. |
Definition at line 130 of file data.c.
Referenced by nl_data_cmp(), and nla_put_data().
{
return data->d_size > 0 ? data->d_data : NULL;
}
size_t nl_data_get_size | ( | struct nl_data * | data | ) |
data | Abstract data object. |
Definition at line 140 of file data.c.
Referenced by nl_data_cmp(), and nla_put_data().
{
return data->d_size;
}
int nl_data_cmp | ( | struct nl_data * | a, |
struct nl_data * | b | ||
) |
a | Abstract data object. |
b | Another abstract data object. |
Definition at line 160 of file data.c.
References nl_data_get(), and nl_data_get_size().
{ void *a_ = nl_data_get(a); void *b_ = nl_data_get(b); if (a_ && b_) return memcmp(a_, b_, nl_data_get_size(a)); else return -1; }