X-Git-Url: http://git.ozlabs.org/?p=yaboot.git;a=blobdiff_plain;f=second%2Fyaboot.c;h=0232d33153b58da3c9c0fafecde8016437324f17;hp=6b31cb0af0797fa7ef0c2b373da040b58b851c6b;hb=58838f4a6973c60dc1b764fba20682ce07bb6c96;hpb=1d2796d399a2076511df671e2f35eb0869085a6a diff --git a/second/yaboot.c b/second/yaboot.c index 6b31cb0..0232d33 100644 --- a/second/yaboot.c +++ b/second/yaboot.c @@ -455,7 +455,9 @@ static int load_my_config_file(struct boot_fspec_t *orig_fspec) struct bootp_packet *packet; int rc = 0; struct boot_fspec_t fspec = *orig_fspec; -#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) + char *cfgpath = (_machine == _MACH_chrp) ? "/etc/" : ""; + int flen; + int minlen; packet = prom_get_netinfo(); @@ -469,35 +471,26 @@ static int load_my_config_file(struct boot_fspec_t *orig_fspec) if (!fspec.file) goto out; - if (_machine == _MACH_chrp) - sprintf(fspec.file, "/etc/%02x-", packet->htype); - else - sprintf(fspec.file, "%02x-", packet->htype); + sprintf(fspec.file, "%s%02x-", cfgpath, packet->htype); strcat(fspec.file, prom_get_mac(packet)); rc = load_config_file(&fspec); if (rc) goto out; - /* * Now try to match on IP. */ - free(fspec.file); - /* 8 chars in yiaddr + \0 */ - fspec.file = malloc(9); - if (!fspec.file) - goto out; - - strcpy(fspec.file, "/etc/"); - strcat(fspec.file, prom_get_ip(packet)); + /* no need to realloc for /etc/ + 8 chars in yiaddr + \0 */ + sprintf(fspec.file, "%s%s", cfgpath, prom_get_ip(packet)); - while (strlen(strrchr(fspec.file, '/')+1)) { + for (flen = strlen(fspec.file), + minlen = strlen(cfgpath); flen > minlen; flen--) { rc = load_config_file(&fspec); if (rc) goto out; /* Chop one digit off the end, try again */ - fspec.file[strlen(fspec.file) - 1] = '\0'; + fspec.file[flen - 1] = '\0'; } out: @@ -1597,7 +1590,7 @@ setup_display(void) } if (scrn == PROM_INVALID_HANDLE) { - prom_printf("No screen device found !/n"); + prom_printf("No screen device found !\n"); return; } for(i=0;i<16;i++) {