home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / io / wr_drfile.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  2.2 KB  |  105 lines

  1. /* wr_q2drsubmit.c: write out a Delivery Notification struct 
  2.     from the info held in the queue and address structures of submit
  3. */
  4.  
  5. # ifndef lint
  6. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/io/RCS/wr_drfile.c,v 6.0 1991/12/18 20:22:26 jpo Rel $";
  7. # endif
  8.  
  9. /*
  10.  * $Header: /xtel/pp/pp-beta/Lib/io/RCS/wr_drfile.c,v 6.0 1991/12/18 20:22:26 jpo Rel $
  11.  *
  12.  * $Log: wr_drfile.c,v $
  13.  * Revision 6.0  1991/12/18  20:22:26  jpo
  14.  * Release 6.0
  15.  *
  16.  */
  17.  
  18.  
  19.  
  20. #include        "head.h"
  21. #include        "q.h"
  22. #include        "dr.h"
  23. #include     "sys.file.h"
  24. #include        "list_bpt.h"
  25. #include        <sys/time.h>
  26.  
  27. extern char     *dr_file;
  28.  
  29.  
  30. /* ---------------------  Begin  Routines  -------------------------------- */
  31.  
  32.  
  33. int wr_q2drsubmit (qp, path)
  34. register Q_struct       *qp;
  35. char            *path;
  36. {
  37.     FILE            *fp;
  38.     ADDR            *ap;
  39.     char            *fname = NULL,
  40.             buf[MAXPATHLENGTH],
  41.             odir[MAXPATHLENGTH];
  42.     int             retval=NOTOK,
  43.             dr_file_no = -1,
  44.             dr_required = FALSE;
  45.  
  46.     (void) strcpy (odir, path);
  47.  
  48.     PP_DBG (("Lib/io/wr_q2drsubmit (dir=%s)", odir));
  49.  
  50.  
  51.     /* open a DR file (dr.999) name is determined by recip */
  52.  
  53.     for (ap=qp->Raddress, retval=OK;
  54.         ap != NULLADDR && retval == OK; ap=ap->ad_next)
  55.  
  56.         if (ap->ad_status == AD_STAT_DRREQUIRED) {
  57.  
  58.             dr_required = TRUE;
  59.  
  60.             dr_file_no = ap->ad_no;
  61.             PP_DBG(("ap->ad_no = %d",ap->ad_no));
  62.             (void) sprintf (&buf[0], "%s%d", dr_file, dr_file_no);
  63.  
  64.             fname = multcat (odir, "/", &buf[0], NULLCP);
  65.  
  66.             if (access (fname, F_OK) == NOTOK)
  67.                 break;
  68.  
  69.  
  70.             retval = NOTOK;
  71.             PP_LOG (LLOG_EXCEPTIONS,
  72.                   ("Lib/io/wr_q2drsubmit (file %s exists)",
  73.                 fname));
  74.         }
  75.  
  76.     if (ap == NULLADDR && dr_required == FALSE) return (RP_OK);
  77.  
  78.     if (retval == NOTOK) {
  79.         PP_LOG (LLOG_FATAL,
  80.         ("Lib/io/wr_q2drsubmit (dr required but first file in use)"));
  81.         return (RP_BAD);
  82.     }
  83.  
  84.     PP_DBG (("Lib/io/wr_q2drsubmit (opening %s)", fname));
  85.  
  86.     if ((fp = fopen (fname, "w")) == NULLFILE) {
  87.         PP_LOG (LLOG_FATAL,
  88.             ("Lib/io/wr_q2drsubmit (unable to open %s)", fname));
  89.         return (RP_FIO);
  90.     }
  91.  
  92.  
  93.     retval = wr_dr_info (fp, qp, dr_file_no, TRUE);
  94.  
  95.     (void) fclose(fp);
  96.  
  97.     if (chmod(fname, 0666) != 0)
  98.         PP_SLOG(LLOG_EXCEPTIONS, fname,
  99.             ("chmod failed"));
  100.  
  101.     if (retval == NOTOK)    return (RP_FIO);
  102.  
  103.     return (RP_OK);
  104. }
  105.