/* Copyright (C) 2008 Emmanuel Varoquaux This file is part of XOS. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "object_reference.h" #include "xmalloc.h" #include #include static void object_reference_init(struct object_reference_struct *object_reference, const char *name) { object_reference->name = name; object_reference->object_info = NULL; } void object_reference_list_init(struct object_reference_list_struct *object_reference_list) { object_reference_list->first = NULL; } void object_reference_list_destroy(struct object_reference_list_struct *object_reference_list) { struct object_reference_struct *object_reference, *next_object_reference; for (object_reference = object_reference_list->first; object_reference; object_reference = next_object_reference) { next_object_reference = object_reference->next; free(object_reference); } } struct object_reference_struct *object_reference_list_insert(struct object_reference_list_struct *object_reference_list, const char *name) { struct object_reference_struct *object_reference1, *object_reference2; object_reference1 = NULL; object_reference2 = object_reference_list->first; while (object_reference2) { if (!strcmp(object_reference2->name, name)) return object_reference2; object_reference1 = object_reference2; object_reference2 = object_reference2->next; } object_reference2 = xmalloc(sizeof (struct object_reference_struct)); object_reference_init(object_reference2, name); object_reference2->next = NULL; if (object_reference1) object_reference1->next = object_reference2; else object_reference_list->first = object_reference2; return object_reference2; }