]> diplodocus.org Git - nmh/blobdiff - uip/annosbr.c
fdcompare.c: Move interface to own file.
[nmh] / uip / annosbr.c
index 63d2ee4487a106010b25bde0b25b0f43fa4730bd..eafcbfc1bebd4b36af676d9c8c44a34b6c8ed91a 100644 (file)
@@ -1,15 +1,16 @@
-
-/*
- * annosbr.c -- prepend annotation to messages
+/* annosbr.c -- prepend annotation to messages
  *
  * 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/tws.h>
-#include <h/utils.h>
+#include "h/mh.h"
+#include "sbr/error.h"
+#include "h/tws.h"
+#include "h/utils.h"
+#include "sbr/lock_file.h"
+#include "sbr/m_mktemp.h"
 #include <fcntl.h>
 #include <utime.h>
 
@@ -17,7 +18,7 @@
 /*
  * static prototypes
  */
-static int annosbr (int, char *, char *, char *, int, int, int, int);
+static int annosbr (int, char *, char *, char *, bool, bool, int, bool);
 
 /*
  *     This "local" global and the annopreserve() function are a hack that allows additional
@@ -27,7 +28,7 @@ static int annosbr (int, char *, char *, char *, int, int, int, int);
 static int     preserve_actime_and_modtime = 0;        /* set to preserve access and modification times on annotated message */
 
 int
-annotate (char *file, char *comp, char *text, int inplace, int datesw, int delete, int append)
+annotate (char *file, char *comp, char *text, bool inplace, bool datesw, int delete, bool append)
 {
     int                        i, fd;
     struct utimbuf     b;
@@ -52,7 +53,7 @@ annotate (char *file, char *comp, char *text, int inplace, int datesw, int delet
     }
 
     if (stat(file, &s) == -1) {
-       advise("can't get access and modification times for %s", file);
+        inform("can't get access and modification times for %s", file);
        preserve_actime_and_modtime = 0;
     }
 
@@ -62,7 +63,7 @@ annotate (char *file, char *comp, char *text, int inplace, int datesw, int delet
     i = annosbr (fd, file, comp, text, inplace, datesw, delete, append);
 
     if (preserve_actime_and_modtime && utime(file, &b) == -1)
-       advise("can't set access and modification times for %s", file);
+        inform("can't set access and modification times for %s", file);
 
     lkclosedata (fd, file);
     return i;
@@ -70,7 +71,7 @@ annotate (char *file, char *comp, char *text, int inplace, int datesw, int delet
 
 /*
  *  Produce a listing of all header fields (annotations) whose field name matches
- *  comp.  Number the listing if number is set.  Treate the field bodies as path
+ *  comp.  Number the listing if number is set.  Treat the field bodies as path
  *  names and just output the last component unless text is non-NULL.  We don't
  *  care what text is set to.
  */
@@ -88,7 +89,7 @@ annolist(char *file, char *comp, char *text, int number)
     int                n;              /* number of bytes written */
     char       *sp;            /* another miscellaneous character pointer */
 
-    if ((fp = fopen(file, "r")) == (FILE *)0)
+    if ((fp = fopen(file, "r")) == NULL)
        adios(file, "unable to open");
 
     /*
@@ -96,7 +97,7 @@ annolist(char *file, char *comp, char *text, int number)
      *  This buffer might need to be quite large, so we grow it as needed.
      */
 
-    field = (char *)mh_xmalloc(field_size = 256);
+    field = mh_xmalloc(field_size = 256);
 
     /*
      *  Get the length of the field name since we use it often.
@@ -121,7 +122,7 @@ annolist(char *file, char *comp, char *text, int number)
            }
 
            if (++n >= field_size - 1) {
-               field = (char *) mh_xrealloc((void *)field, field_size += 256);
+               field = mh_xrealloc((void *)field, field_size += 256);
                
                cp = field + n - 1;
            }
@@ -140,10 +141,10 @@ annolist(char *file, char *comp, char *text, int number)
            if (number)
                (void)printf("%d\t", ++count);
 
-           if (text == (char *)0 && (sp = strrchr(cp, '/')) != (char *)0)
+           if (text == NULL && (sp = strrchr(cp, '/')))
                cp = sp + 1;
 
-           (void)printf("%s\n", cp);
+            puts(cp);
        }
 
     } while (*field != '\0' && *field != '-');
@@ -155,8 +156,6 @@ annolist(char *file, char *comp, char *text, int number)
     free(field);
 
     (void)fclose(fp);
-
-    return;
 }
 
 /*
@@ -167,11 +166,10 @@ void
 annopreserve(int preserve)
 {
        preserve_actime_and_modtime = preserve;
-       return;
 }
 
 static int
-annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, int delete, int append)
+annosbr (int fd, char *file, char *comp, char *text, bool inplace, bool datesw, int delete, bool append)
 {
     int mode, tmpfd;
     char *cp, *sp;
@@ -189,7 +187,7 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
     mode = fstat (fd, &st) != NOTOK ? (int) (st.st_mode & 0777) : m_gmprot ();
 
     if ((cp = m_mktemp2(file, "annotate", NULL, &tmp)) == NULL) {
-       adios(NULL, "unable to create temporary file in %s", get_temp_dir());
+       die("unable to create temporary file");
     }
     strncpy (tmpfil, cp, sizeof(tmpfil));
     chmod (tmpfil, mode);
@@ -202,11 +200,11 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
      * as they're read in.  This buffer is grown as needed later.
      */
 
-    if (delete >= -1 || append != 0) {
-       if ((fp = fdopen(fd, "r")) == (FILE *)0)
-           adios(NULL, "unable to fdopen file.");
+    if (delete >= -1 || append) {
+       if ((fp = fdopen(fd, "r")) == NULL)
+           die("unable to fdopen file.");
 
-       field = (char *)mh_xmalloc(field_size = 256);
+       field = mh_xmalloc(field_size = 256);
     }
 
     /*
@@ -260,7 +258,7 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
                }
 
                if (++n >= field_size - 1) {
-                   field = (char *) mh_xrealloc((void *)field, field_size *= 2);
+                   field = mh_xrealloc((void *)field, field_size *= 2);
                
                    cp = field + n - 1;
                }
@@ -296,7 +294,7 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
 
            if (strncasecmp(field, comp, length) == 0 && field[length] == ':') {
                if (delete == 0) {
-                   if (text == (char *)0)
+                   if (text == NULL)
                        break;
 
                    for (cp = field + length + 1; *cp == ' ' || *cp == '\t'; cp++)
@@ -307,7 +305,7 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
                                break;
                    }
                    else {
-                       if ((sp = strrchr(cp, '/')) != (char *)0)
+                       if ((sp = strrchr(cp, '/')) != NULL)
                            cp = sp + 1;
 
                        if (strcmp(cp, text) == 0)
@@ -327,7 +325,7 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
             */
 
            if ((n = fputs(field, tmp)) == EOF || (c == '\n' && fputc('\n', tmp) == EOF))
-               adios(NULL, "unable to write temporary file.");
+               die("unable to write temporary file.");
 
        } while (*field != '\0' && *field != '-');
 
@@ -335,7 +333,7 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
         *  Get rid of the field buffer because we're done with it.
         */
 
-       free((void *)field);
+       free(field);
     }
 
     else {
@@ -395,10 +393,8 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
      * copying routine uses the descriptor, not the pointer.
      */
 
-    if (append || delete >= -1) {
-       if (lseek(fd, (off_t)ftell(fp), SEEK_SET) == (off_t)-1)
-           adios(NULL, "can't seek.");
-    }
+    if (fp && lseek(fd, (off_t)ftell(fp), SEEK_SET) == (off_t)-1)
+        die("can't seek.");
 
     cpydata (fd, fileno (tmp), file, tmpfil);
     fclose (tmp);
@@ -407,7 +403,7 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
        if ((tmpfd = open (tmpfil, O_RDONLY)) == NOTOK)
            adios (tmpfil, "unable to open for re-reading");
 
-       lseek (fd, (off_t) 0, SEEK_SET);
+       lseek(fd, 0, SEEK_SET);
 
        /*
         *  We're making the file shorter if we're deleting a header field
@@ -446,7 +442,7 @@ annosbr (int fd, char *file, char *comp, char *text, int inplace, int datesw, in
      * lkclose() fail, but that failure is ignored so it's not a problem.
      */
 
-    if (delete >= -1)
+    if (fp)
        (void)fclose(fp);
 
     return 0;