]> diplodocus.org Git - nmh/blobdiff - sbr/m_getfld.c
Checked return value of write() calls in mhfixmsg.c,
[nmh] / sbr / m_getfld.c
index fa6518359326b42994b01090d64826403b60cce8..77dbeda177042841d462a159e23bc9fdffba7ecf 100644 (file)
@@ -58,7 +58,6 @@
      int edelimlen
      char *msg_delim
      int msg_style
-     int (*eom_action)(int)
 
    Usage
    =====
  * static prototypes
  */
 struct m_getfld_state;
-static int m_Eom (m_getfld_state_t, int);
+static int m_Eom (m_getfld_state_t);
 static char *matchc(int, char *, int, char *);
 
 #define eom(c,s)       (s->msg_style != MS_DEFAULT && \
-                        (((c) == *s->msg_delim && m_Eom(s,c)) || \
-                         (s->eom_action && (*s->eom_action)(c))))
+                        ((c) == *s->msg_delim && m_Eom(s)))
 
 /* This replaces the old approach, with its direct access to stdio
  * internals.  It uses one fread() to load a buffer that we manage.
@@ -261,7 +259,6 @@ struct m_getfld_state {
     int fdelimlen;
     char *edelim;
     int edelimlen;
-    int (*eom_action)(int);
     int state;
     int track_filepos;
 };
@@ -281,7 +278,6 @@ m_getfld_state_init (m_getfld_state_t *gstate, FILE *iob) {
     s->msg_delim = "";
     s->fdelim = s->delimend = s->edelim = NULL;
     s->fdelimlen = s->edelimlen = 0;
-    s->eom_action = NULL;
     s->state = FLD;
     s->track_filepos = 0;
 }
@@ -501,14 +497,12 @@ m_getfld (m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz,
        return s->state = FILEEOF;
     }
     if (eom (c, s)) {
-       if (! s->eom_action) {
-           /* flush null messages */
-           while ((c = Getc(s)) >= 0 && eom (c, s))
-               ;
+       /* flush null messages */
+       while ((c = Getc(s)) >= 0 && eom (c, s))
+           ;
 
-           if (c >= 0)
-               Ungetc(c, s);
-       }
+       if (c >= 0)
+           Ungetc(c, s);
        *bufsz = *buf = 0;
        leave_getfld (s);
        return s->state = FILEEOF;
@@ -521,13 +515,11 @@ m_getfld (m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz,
                while (c != '\n' && (c = Getc(s)) >= 0) continue;
 
                if (c < 0 || (c = Getc(s)) < 0 || eom (c, s)) {
-                   if (! s->eom_action) {
-                       /* flush null messages */
-                       while ((c = Getc(s)) >= 0 && eom (c, s))
-                           ;
-                       if (c >= 0)
-                           Ungetc(c, s);
-                   }
+                   /* flush null messages */
+                   while ((c = Getc(s)) >= 0 && eom (c, s))
+                       ;
+                   if (c >= 0)
+                       Ungetc(c, s);
                    *bufsz = *buf = 0;
                    leave_getfld (s);
                    return s->state = FILEEOF;
@@ -796,8 +788,11 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob)
     s->msg_style = MS_UNKNOWN;
 
     for (i = 0, cp = text; i < sizeof text; ++i, ++cp) {
-       if ((signed char) (*cp = Getc (s)) == EOF) {
+       if ((c = Getc (s)) == EOF) {
+           *cp = '\0';
            break;
+       } else {
+           *cp = c;
        }
     }
 
@@ -852,15 +847,20 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob)
  */
 
 static int
-m_Eom (m_getfld_state_t s, int c)
+m_Eom (m_getfld_state_t s)
 {
     register int i;
     char text[MAX_DELIMITER_SIZE];
     char *cp;
 
     for (i = 0, cp = text; i < s->edelimlen; ++i, ++cp) {
-       if ((signed char) (*cp = Getc (s)) == EOF) {
+       int c2;
+
+       if ((c2 = Getc (s)) == EOF) {
+           *cp = '\0';
            break;
+       } else {
+           *cp = c2;
        }
     }
 
@@ -881,6 +881,7 @@ m_Eom (m_getfld_state_t s, int c)
     }
 
     if (s->msg_style == MS_MBOX) {
+       int c;
        while ((c = Getc (s)) != '\n')
            if (c < 0)
                break;