1 #include <stdlib.h>
2 #include <syslinux/linux.h>
3 #include <syslinux/loadfile.h>
4
setup_data_init(void)5 struct setup_data *setup_data_init(void)
6 {
7 struct setup_data *setup_data;
8
9 setup_data = zalloc(sizeof(*setup_data));
10 if (!setup_data)
11 return NULL;
12
13 setup_data->prev = setup_data->next = setup_data;
14 return setup_data;
15 }
16
setup_data_add(struct setup_data * head,uint32_t type,const void * data,size_t data_len)17 int setup_data_add(struct setup_data *head, uint32_t type,
18 const void *data, size_t data_len)
19 {
20 struct setup_data *setup_data;
21
22 setup_data = zalloc(sizeof(*setup_data));
23 if (!setup_data)
24 return -1;
25
26 setup_data->data = data;
27 setup_data->hdr.len = data_len;
28 setup_data->hdr.type = type;
29 setup_data->prev = head->prev;
30 setup_data->next = head;
31 head->prev->next = setup_data;
32 head->prev = setup_data;
33
34 return 0;
35 }
36
setup_data_load(struct setup_data * head,uint32_t type,const char * filename)37 int setup_data_load(struct setup_data *head, uint32_t type,
38 const char *filename)
39 {
40 void *data;
41 size_t len;
42
43 if (loadfile(filename, &data, &len))
44 return -1;
45
46 return setup_data_add(head, type, data, len);
47 }
48