Abstract Data
[Utilities]

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.

Function Documentation

struct nl_data* nl_data_alloc ( void *  buf,
size_t  size 
) [read]
Parameters:
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.

Returns:
Newly allocated data handle or NULL

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]
Parameters:
src Abstract data object
Returns:
Cloned object or NULL

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 
)
Parameters:
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.

Returns:
0 on success or a negative error code

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  ) 
Parameters:
data Abstract data object.

Definition at line 110 of file data.c.

00111 {
00112         if (data)
00113                 free(data->d_data);
00114 
00115         free(data);
00116 }

void* nl_data_get ( struct nl_data *  data  ) 
Parameters:
data Abstract 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().

00131 {
00132         return data->d_size > 0 ? data->d_data : NULL;
00133 }

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

Definition at line 140 of file data.c.

Referenced by nl_data_cmp(), and nla_put_data().

00141 {
00142         return data->d_size;
00143 }

int nl_data_cmp ( struct nl_data *  a,
struct nl_data *  b 
)
Parameters:
a Abstract data object.
b Another 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().

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 }


Generated on 30 Oct 2009 for libnl by  doxygen 1.6.1