wayland工具模块wayland-util除了定义上篇博客中提到的wl_message和wl_interface外,主要还定义了wl_array,wl_list两个结构体,下面对这两个结构体及相关操作进行具体分析。
wl_array的定义如下所示:
struct wl_array {
/** Array size */
size_t size;
/** Allocated space */
size_t alloc;
/** Array data */
void *data;
};
wl_array结构体中包含三个成员,size标示数组大小,alloc标示申请的内存空间大小,data标示数组中的数据。对wl_array的操作有wl_array_init,wl_array_release,wl_array_add,wl_array_copy。下面对这四个函数逐一分析,wl_array_init的代码实现如下:
WL_EXPORT void
wl_array_init(struct wl_array *array)
{
memset(array, 0, sizeof *array);
}
主要使用memset对wl_array内存空间初始化,wl_array_release代码实现如下:
WL_EXPORT void
wl_array_release(struct wl_array *array)
{
free(array->data);
array->data = WL_ARRAY_POISON_PTR;
}
释放该数组内存,将数组中数据指针指向无效内存地址。