/* * Copyright © 2012 Intel Corporation * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * */ #include "cl_utils.h" #include #include LOCAL void list_node_insert_before(struct list_node *node, struct list_node *the_new) { list_node *before_node = node->p; the_new->p = before_node; the_new->n = node; node->p = the_new; before_node->n = the_new; } LOCAL void list_node_insert_after(struct list_node *node, struct list_node *the_new) { list_node *after_node = node->n; the_new->n = after_node; the_new->p = node; node->n = the_new; after_node->p = the_new; } LOCAL void list_move(struct list_head *the_old, struct list_head *the_new) { assert(list_empty(the_new)); if (list_empty(the_old)) { return; } memcpy(&the_new->head_node, &the_old->head_node, sizeof(list_node)); the_new->head_node.n->p = &the_new->head_node; the_new->head_node.p->n = &the_new->head_node; list_init(the_old); } LOCAL void list_merge(struct list_head *head, struct list_head *to_merge) { if (list_empty(to_merge)) return; list_node *merge_last_node = to_merge->head_node.p; list_node *merge_first_node = to_merge->head_node.n; merge_last_node->n = &head->head_node; merge_first_node->p = head->head_node.p; head->head_node.p->n = merge_first_node; head->head_node.p = merge_last_node; list_init(to_merge); } LOCAL cl_int cl_get_info_helper(const void *src, size_t src_size, void *dst, size_t dst_size, size_t *ret_size) { if (dst && dst_size < src_size) return CL_INVALID_VALUE; if (dst && dst_size) { memcpy(dst, src, src_size); } if (ret_size) *ret_size = src_size; return CL_SUCCESS; }