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().
00039 { 00040 struct nl_data *data; 00041 00042 data = calloc(1, sizeof(*data)); 00043 if (!data) 00044 goto errout; 00045 00046 data->d_data = calloc(1, size); 00047 if (!data->d_data) { 00048 free(data); 00049 goto errout; 00050 } 00051 00052 data->d_size = size; 00053 00054 if (buf) 00055 memcpy(data->d_data, buf, size); 00056 00057 return data; 00058 errout: 00059 nl_errno(ENOMEM); 00060 return NULL; 00061 }
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().
00070 { 00071 return nl_data_alloc(src->d_data, src->d_size); 00072 }
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().
00086 { 00087 if (size < 0) 00088 BUG(); 00089 00090 if (size > 0) { 00091 data->d_data = realloc(data->d_data, data->d_size + size); 00092 if (!data->d_data) 00093 return nl_errno(ENOMEM); 00094 00095 if (buf) 00096 memcpy(data->d_data + data->d_size, buf, size); 00097 else 00098 memset(data->d_data + data->d_size, 0, size); 00099 00100 data->d_size += size; 00101 } 00102 00103 return 0; 00104 }
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().
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().
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().
00161 { 00162 void *a_ = nl_data_get(a); 00163 void *b_ = nl_data_get(b); 00164 00165 if (a_ && b_) 00166 return memcmp(a_, b_, nl_data_get_size(a)); 00167 else 00168 return -1; 00169 }