]> diplodocus.org Git - nmh/blobdiff - uip/mhcachesbr.c
Added -convertargs switch to repl(1), to pass arguments to programs
[nmh] / uip / mhcachesbr.c
index 0bf725c686718fca40882a7bea70662f77a1e0bb..56ba9b71bf87735f533e54a80b221c81e5ad5d72 100644 (file)
@@ -25,8 +25,6 @@
 
 extern int debugsw;
 
-extern pid_t xpid;     /* mhshowsbr.c or mhbuildsbr.c */
-
 /* cache policies */
 int rcachesw = CACHE_ASK;
 int wcachesw = CACHE_ASK;
@@ -138,16 +136,18 @@ cache_content (CT ct)
 
            while ((cc = fread (buffer, sizeof(*buffer), sizeof(buffer), gp))
                       > 0)
-               fwrite (buffer, sizeof(*buffer), cc, fp);
+               if ((int) fwrite (buffer, sizeof(*buffer), cc, fp) < cc) {
+                   advise ("cache_content", "fwrite");
+               }
            fflush (fp);
 
            if (ferror (gp)) {
                admonish (ce->ce_file, "error reading");
-               unlink (cachefile);
+               (void) m_unlink (cachefile);
            } else {
                if (ferror (fp)) {
                    admonish (cachefile, "error writing");
-                   unlink (cachefile);
+                   (void) m_unlink (cachefile);
                }
            }
            fclose (fp);
@@ -226,13 +226,6 @@ got_it:
        int len, buflen;
        char *bp, query[BUFSIZ];
 
-       if (xpid) {
-           if (xpid < 0)
-               xpid = -xpid;
-           pidcheck (pidwait (xpid, NOTOK));
-           xpid = 0;
-       }
-
        /* Get buffer ready to go */
        bp = query;
        buflen = sizeof(query);
@@ -273,7 +266,7 @@ got_it:
     if (status == OK && writing) {
        if (*writing && strchr(buffer, '/'))
            make_intermediates (buffer);
-       unlink (buffer);
+       (void) m_unlink (buffer);
     }
 
     free (id);
@@ -288,6 +281,7 @@ find_cache_aux (int writing, char *directory, char *id,
     int        mask, usemap;
     char mapfile[BUFSIZ], mapname[BUFSIZ];
     FILE *fp;
+    int failed_to_lock = 0;
     static int partno, pid;
     static time_t clock = 0;
 
@@ -342,12 +336,15 @@ use_raw:
 
     make_intermediates (mapfile);
     mask = umask (writing == 2 ? 0077 : 0);
-    if (!(fp = lkfopendata (mapfile, "a")) && errno == ENOENT) {
+    if (!(fp = lkfopendata (mapfile, "a", &failed_to_lock)) && errno == ENOENT) {
        int fd;
 
        if ((fd = creat (mapfile, 0666)) != NOTOK) {
            close (fd);
-           fp = lkfopendata (mapfile, "a");
+           fp = lkfopendata (mapfile, "a", &failed_to_lock);
+            if (failed_to_lock) {
+               adios (mapfile, "failed to lock");
+            }
        }
     }
     umask (mask);
@@ -375,8 +372,9 @@ find_cache_aux2 (char *mapfile, char *id, char *mapname, int namelen)
     char buf[BUFSIZ], name[NAMESZ];
     FILE *fp;
     m_getfld_state_t gstate = 0;
+    int failed_to_lock = 0;
 
-    if (!(fp = lkfopendata (mapfile, "r")))
+    if (!(fp = lkfopendata (mapfile, "r", &failed_to_lock)))
        return NOTOK;
 
     for (;;) {