X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffmt_new.c;h=9d818742e8f5c920c60743307d8afa978ff9e80e;hp=003ec2bc6461cb0b77a09e544addef8bf8b52e9e;hb=9d869b3c9748df468f2977807781315258e83f24;hpb=1691e80890e5d8ba258c51c214a3e91880e1db2b diff --git a/sbr/fmt_new.c b/sbr/fmt_new.c index 003ec2b..9d81874 100644 --- a/sbr/fmt_new.c +++ b/sbr/fmt_new.c @@ -1,105 +1,101 @@ - /* - * fmt_new.c -- read format file/string and normalize - * - * $Id$ - */ +** fmt_new.c -- read format file/string and normalize +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ #include +#include -#define QUOTE '\\' - -static char *formats = 0; +static char *formats = NULL; /* - * static prototypes - */ -static void normalize (char *); +** static prototypes +*/ +static void normalize(char *); /* - * Get new format string - */ - +** Copy format string (selected by precedence) and store in static memory. +** Normalize it. +*/ char * -new_fs (char *form, char *format, char *default_fs) +new_fs(char *form, char *format, char *default_fs) { - struct stat st; - register FILE *fp; - - if (formats) - free (formats); - - if (form) { - if ((fp = fopen (etcpath (form), "r")) == NULL) - adios (form, "unable to open format file"); + struct stat st; + register FILE *fp; - if (fstat (fileno (fp), &st) == -1) - adios (form, "unable to stat format file"); - - if (!(formats = malloc ((size_t) st.st_size + 1))) - adios (form, "unable to allocate space for format"); - - if (read (fileno(fp), formats, (int) st.st_size) != st.st_size) - adios (form, "error reading format file"); - - formats[st.st_size] = '\0'; + if (formats) { + free(formats); + } - fclose (fp); - } else { - formats = getcpy (format ? format : default_fs); - } + if (form) { + if ((fp = fopen(etcpath(form), "r")) == NULL) { + adios(form, "unable to open format file"); + } + if (fstat(fileno(fp), &st) == -1) { + adios(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(form, "error reading format file"); + } + formats[st.st_size] = '\0'; + fclose(fp); + + } else if (format) { + formats = getcpy(format); - normalize (formats); /* expand escapes */ + } else { + formats = getcpy(default_fs); + } + normalize(formats); /* expand escapes */ - return formats; + return formats; } /* - * Expand escapes in format strings - */ - +** Expand escapes in format strings +*/ static void -normalize (char *cp) +normalize(char *cp) { - char *dp; + char *dp; - for (dp = cp; *cp; cp++) { - if (*cp != QUOTE) { - *dp++ = *cp; - } else { - switch (*++cp) { - case 'b': - *dp++ = '\b'; - break; + for (dp = cp; *cp; cp++) { + if (*cp != '\\') { + *dp++ = *cp; + continue; + } + switch (*++cp) { + case 'b': + *dp++ = '\b'; + break; case 'f': - *dp++ = '\f'; - break; - + *dp++ = '\f'; + break; case 'n': - *dp++ = '\n'; - break; - + *dp++ = '\n'; + break; case 'r': - *dp++ = '\r'; - break; - + *dp++ = '\r'; + break; case 't': - *dp++ = '\t'; - break; - + *dp++ = '\t'; + break; case '\n': - break; - - case 0: - cp--; /* fall */ - default: - *dp++ = *cp; - break; - } + break; + case '\0': + cp--; + /* fall */ + default: + *dp++ = *cp; + break; + } } - } - *dp = '\0'; + *dp = '\0'; }