Cosmetic refactoring in fmt_new.c.
[mmh] / sbr / fmt_new.c
index 44a18b3..9d81874 100644 (file)
-
 /*
- * 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.
- */
+** 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 <h/mh.h>
 #include <h/utils.h>
 
-#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");
-
-       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';
+       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';
 }