X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffmt_new.c;h=6cdcfcc7075db5fcb09d9e48066c4973eedcdb4c;hp=9d818742e8f5c920c60743307d8afa978ff9e80e;hb=a0b824f146a18ad99633addede9e81a470d4cb59;hpb=2d48b455c303a807041c35e4248955f8bec59eeb diff --git a/sbr/fmt_new.c b/sbr/fmt_new.c index 9d81874..6cdcfcc 100644 --- a/sbr/fmt_new.c +++ b/sbr/fmt_new.c @@ -18,11 +18,10 @@ static void normalize(char *); /* -** Copy format string (selected by precedence) and store in static memory. -** Normalize it. +** Copy first available format string, store in static memory and normalize it. */ char * -new_fs(char *form, char *format, char *default_fs) +new_fs(char *form, char *format, char *def_form, char *default_fs) { struct stat st; register FILE *fp; @@ -48,6 +47,20 @@ new_fs(char *form, char *format, char *default_fs) } else if (format) { formats = getcpy(format); + } else if (def_form) { + if ((fp = fopen(etcpath(def_form), "r")) == NULL) { + adios(def_form, "unable to open format file"); + } + if (fstat(fileno(fp), &st) == -1) { + adios(def_form, "unable to stat format file"); + } + formats = mh_xmalloc((size_t) st.st_size + 1); + if (read(fileno(fp), formats, (int)st.st_size) != st.st_size) { + adios(def_form, "error reading format file"); + } + formats[st.st_size] = '\0'; + fclose(fp); + } else { formats = getcpy(default_fs); }