handle "all" keyword, minor cleanups
authorKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Sun, 13 Dec 1987 10:14:41 +0000 (02:14 -0800)
committerKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Sun, 13 Dec 1987 10:14:41 +0000 (02:14 -0800)
SCCS-vsn: libexec/bugfiler/redist.c 5.5

usr/src/libexec/bugfiler/redist.c

index bcba402..9e6df56 100644 (file)
@@ -5,11 +5,12 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)redist.c   5.5 (Berkeley) 87/11/23";
-#endif not lint
+static char sccsid[] = "@(#)redist.c   5.5 (Berkeley) 87/12/12";
+#endif /* !lint */
 
 #include <sys/file.h>
 #include <stdio.h>
 
 #include <sys/file.h>
 #include <stdio.h>
+#include <ctype.h>
 #include <bug.h>
 
 /*
 #include <bug.h>
 
 /*
@@ -21,61 +22,61 @@ redist()
 {
        extern FILE     *dfp;           /* dist file fp */
        extern char     pfile[];        /* permanent bug file */
 {
        extern FILE     *dfp;           /* dist file fp */
        extern char     pfile[];        /* permanent bug file */
-       register char   *C1,
-                       *C2;
-       register int    first;          /* if first blank line */
-       FILE    *pf,
-               *popen();
+       register char   *C1, *C2;
+       FILE    *pf, *popen();
+       int     group;
        char    *index();
 
        char    *index();
 
-       sprintf(bfr, "%s/%s", dir, DIST_FILE);
+       (void)sprintf(bfr, "%s/%s", dir, DIST_FILE);
        if (!freopen(bfr, "r", stdin))
                return;
        if (!freopen(bfr, "r", stdin))
                return;
-       for (;;) {                      /* get first part of entry */
-               if (!gets(bfr))
-                       return;
-               if (*bfr == COMMENT || *bfr == ' ' || *bfr == '\t' || !(C1 = index(bfr, ':')))
+       for (pf = NULL, group = 0; gets(bfr);) {
+               if (*bfr == COMMENT || isspace(*bfr) || !(C1 = index(bfr, ':')))
                        continue;
                *C1 = EOS;
                        continue;
                *C1 = EOS;
-               if (!strcmp(bfr, folder))
-                       break;
+               if (!strcmp(bfr, folder) || !strcmp(bfr, "all")) {
+                       for (++C1; *C1 && (*C1 == ' ' || *C1 == '\t'); ++C1);
+                       if (!*C1)                       /* if empty list */
+                               continue;
+                       if (!pf) {
+                               if (!(pf = popen(MAIL_CMD, "w")))
+                                       error("sendmail pipe failed.", CHN);
+                               if (mailhead[SUBJ_TAG].found)
+                                       fprintf(pf, "%s", mailhead[SUBJ_TAG].line);
+                               else
+                                       fputs("Subject: Untitled Bug Report\n", pf);
+                               if (!mailhead[TO_TAG].line && mailhead[APPAR_TO_TAG].line)
+                                       fprintf(pf, "To%s", index(mailhead[APPAR_TO_TAG].line, ':'));
+                               fputs("Resent-To: ", pf);
+                       }
+                       /*
+                        * write out first entry, then succeeding entries
+                        * backward compatible, handles back slashes at end
+                        * of line
+                        */
+                       if (group++)
+                               fputs(", ", pf);
+                       for (;;) {
+                               if (C2 = index(C1, '\\'))
+                                       *C2 = EOS;
+                               fputs(C1, pf);
+                               if (!gets(bfr) || *bfr != ' ' && *bfr != '\t')
+                                       break;
+                               for (C1 = bfr; *C1 && (*C1 == ' ' || *C1 == '\t'); ++C1);
+                       }
+               }
        }
        }
-       for (++C1;*C1 && (*C1 == ' ' || *C1 == '\t');++C1);
-       if (!*C1)                       /* if empty */
+       if (!pf)
                return;
 
                return;
 
-       if (!(pf = popen(MAIL_CMD, "w")))
-               error("sendmail pipe failed.", CHN);
-
-       if (mailhead[SUBJ_TAG].found)
-               fprintf(pf, "%s", mailhead[SUBJ_TAG].line);
-       else
-               fputs("Subject: Untitled Bug Report\n", pf);
-       if (mailhead[TO_TAG].line == 0 && mailhead[APPAR_TO_TAG].line != 0)
-               fprintf(pf, "To%s", index(mailhead[APPAR_TO_TAG].line, ':'));
-       fputs("Resent-To: ", pf);
-
-       /*
-        * write out first entry, then succeeding entries
-        * backward compatible, handles back slashes at end of line
-        */
-       for (;;) {
-               if (C2 = index(C1, '\\'))
-                       *C2 = EOS;
-               fputs(C1, pf);
-               if (!gets(bfr) || (*bfr != ' ' && *bfr != '\t'))
-                       break;
-               for (C1 = bfr;*C1 && (*C1 == ' ' || *C1 == '\t');++C1);
-       }
        putc('\n', pf);
 
        rewind(dfp);
        putc('\n', pf);
 
        rewind(dfp);
-       for (first = YES;fgets(bfr, sizeof(bfr), dfp);)
-               if (*bfr == '\n' && first) {
-                       first = NO;
-                       fprintf(pf, "\n%sReference: %s\n", mailhead[INDX_TAG].line, pfile);
-               }
-               else
-                       fputs(bfr, pf);
+       /* add Reference header and copy bug report out */
+       while (fgets(bfr, sizeof(bfr), dfp) && *bfr != '\n')
+               fputs(bfr, pf);
+       fprintf(pf, "\n%sReference: %s\n\n", mailhead[INDX_TAG].line, pfile);
+       while (fgets(bfr, sizeof(bfr), dfp))
+               fputs(bfr, pf);
        (void)pclose(pf);
 }
        (void)pclose(pf);
 }