/* * Copyright 2005-2008, Axel Dörfler, axeld@pinc-software.de. All rights reserved. * Distributed under the terms of the MIT License. */ #include #include #include #include // ToDo: the boot items are not supposed to be changed after kernel startup // so no locking is done. So for now, we need to be careful with adding // new items. struct boot_item : public DoublyLinkedListLinkImpl { const char *name; void *data; size_t size; }; typedef DoublyLinkedList ItemList; static ItemList sItemList; status_t add_boot_item(const char *name, void *data, size_t size) { boot_item *item = new(nothrow) boot_item; if (item == NULL) return B_NO_MEMORY; item->name = name; item->data = data; item->size = size; sItemList.Add(item); return B_OK; } void * get_boot_item(const char *name, size_t *_size) { if (name == NULL || name[0] == '\0') return NULL; // search item for (ItemList::Iterator it = sItemList.GetIterator(); it.HasNext();) { boot_item *item = it.Next(); if (!strcmp(name, item->name)) { if (_size != NULL) *_size = item->size; return item->data; } } return NULL; } status_t boot_item_init(void) { new(&sItemList) ItemList; // static initializers do not work in the kernel, // so we have to do it here, manually return B_OK; }