X-Git-Url: http://git.ozlabs.org/?p=yaboot.git;a=blobdiff_plain;f=second%2Fcfg.c;h=381d16b349175927e945608884d8d9fa8d865d5e;hp=56b058af5ecde651e6ccf265d00a8802e264e94d;hb=6f27cd4ad3feeba79cac882ef3f7177224a5935b;hpb=89f352cbee373069ed035476cb4c18027ff0a5b3 diff --git a/second/cfg.c b/second/cfg.c index 56b058a..381d16b 100644 --- a/second/cfg.c +++ b/second/cfg.c @@ -41,8 +41,7 @@ typedef struct { void *data; } CONFIG; -#define MAX_TOKEN 200 -#define MAX_VAR_NAME MAX_TOKEN +#define MAX_TOKEN 511 #define EOF -1 CONFIG cf_options[] = @@ -92,7 +91,6 @@ CONFIG cf_image[] = {cft_flag, "pause-after", NULL}, {cft_strg, "pause-message", NULL}, {cft_flag, "novideo", NULL}, - {cft_strg, "sysmap", NULL}, {cft_end, NULL, NULL}}; static char flag_set; @@ -103,7 +101,6 @@ static char *currp = NULL; static char *endp = NULL; static char *file_name = NULL; static CONFIG *curr_table = cf_options; -static int ignore_entry; static jmp_buf env; static struct IMAGES { @@ -422,6 +419,30 @@ cfg_set_redo: return 0; } +static int cfg_reset () +{ + CONFIG *walk; +#if DEBUG + prom_printf("Resetting image table\n"); +#endif + line_num = 0; + images = NULL; + curr_table = NULL; + curr_table = cf_options; + for (walk = curr_table; walk->type != cft_end; walk++) { +#if DEBUG + prom_printf("ItemA %s = %s\n", walk->name, walk->data); +#endif + if (walk->data != NULL) + walk->data = NULL; +#if DEBUG + prom_printf("ItemB %s = %s\n\n", walk->name, walk->data); +#endif + } + + return 0; +} + int cfg_parse (char *cfg_file, char *buff, int len) { char *item, *value; @@ -430,6 +451,8 @@ int cfg_parse (char *cfg_file, char *buff, int len) currp = buff; endp = currp + len; + cfg_reset(); + if (setjmp (env)) return -1; while (1) { @@ -559,6 +582,43 @@ char *cfg_get_default (void) return ret; } +/* + * cfg_set_default_by_mac () + * return 1 if the default cf_option was changed to label with the MAC addr + * return 0 if not changed + */ +int cfg_set_default_by_mac (char *mac_addr) +{ + CONFIG *walk; + struct IMAGES *tmp; + char * label = NULL; + int haslabel = 0; + + /* check if there is an image label equal to mac_addr */ + for (tmp = images; tmp; tmp = tmp->next) { + label = cfg_get_strg_i (tmp->table, "label"); + if (!strcmp(label,mac_addr)){ + haslabel = 1; + } + } + + if (!haslabel) + return 0; + else { + /* + * if there is an image label equal to mac_addr, change the default + * cf_options to this image label + */ + for (walk = cf_options; walk->type != cft_end; walk++) { + if (!strcasecmp(walk->name,"default")) { + walk->data = mac_addr; + return 1; + } + } + return 0; + } +} + /* * Local variables: * c-file-style: "k&r"