176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdlib.h> 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <syslinux/linux.h> 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <syslinux/loadfile.h> 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct setup_data *setup_data_init(void) 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct setup_data *setup_data; 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman setup_data = zalloc(sizeof(*setup_data)); 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!setup_data) 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return NULL; 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman setup_data->prev = setup_data->next = setup_data; 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return setup_data; 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint setup_data_add(struct setup_data *head, uint32_t type, 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const void *data, size_t data_len) 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct setup_data *setup_data; 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman setup_data = zalloc(sizeof(*setup_data)); 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!setup_data) 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return -1; 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman setup_data->data = data; 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman setup_data->hdr.len = data_len; 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman setup_data->hdr.type = type; 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman setup_data->prev = head->prev; 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman setup_data->next = head; 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman head->prev->next = setup_data; 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman head->prev = setup_data; 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return 0; 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint setup_data_load(struct setup_data *head, uint32_t type, 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *filename) 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman void *data; 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman size_t len; 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (loadfile(filename, &data, &len)) 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return -1; 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return setup_data_add(head, type, data, len); 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 48