BSD 4_3_Reno release
[unix-history] / usr / src / libexec / bugfiler / redist.c
index 1dc49c4..6d33b5b 100644 (file)
@@ -1,16 +1,31 @@
 /*
 /*
- * Copyright (c) 1986 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * Copyright (c) 1986, 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that: (1) source distributions retain this entire copyright
+ * notice and comment, and (2) distributions including binaries display
+ * the following acknowledgement:  ``This product includes software
+ * developed by the University of California, Berkeley and its contributors''
+ * in the documentation or other materials provided with the distribution
+ * and in all advertising materials mentioning features or use of this
+ * software. Neither the name of the University nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)redist.c   5.2 (Berkeley) 87/04/11";
-#endif not lint
+static char sccsid[] = "@(#)redist.c   5.10 (Berkeley) 6/1/90";
+#endif /* not lint */
 
 #include <sys/file.h>
 #include <stdio.h>
 
 #include <sys/file.h>
 #include <stdio.h>
+#include <ctype.h>
 #include <bug.h>
 #include <bug.h>
+#include "pathnames.h"
 
 /*
  * redist --
 
 /*
  * redist --
@@ -21,61 +36,67 @@ 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) {
+                                       if (mailhead[APPAR_TO_TAG].line)
+                                           fprintf(pf, "To%s",
+                                             index(mailhead[APPAR_TO_TAG].line,
+                                             ':'));
+                                       else
+                                           fprintf(pf, "To: %s\n",  BUGS_ID);
+                               }
+                               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);
-
-       fprintf(pf, "Reply-To: %s\n", BUGS_HOME);
-       if (mailhead[SUBJ_TAG].found)
-               fprintf(pf, "%s", mailhead[SUBJ_TAG].line);
-       else
-               fputs("Subject: Untitled Bug Report\n", pf);
-       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);
-       (void)fclose(dfp);
 }
 }