]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/bpipe.c
Doc + fix automount on files
[bacula/bacula] / bacula / src / lib / bpipe.c
index 98478bc38051ce1622e70ab726ef8ba4b716ca9a..975c5f6896f5efbec918dbbc07091f58a9f6c8f7 100644 (file)
@@ -163,20 +163,25 @@ int close_bpipe(BPIPE *bpipe)
         break;
       }
       if (remaining_wait > 0) {
-        sleep(1);                    /* wait one second */
+        bmicrosleep(1, 0);            /* wait one second */
         remaining_wait--;
       } else {
-        stat = ETIME;                /* set timeout, if no other status */
+        stat = 1;                    /* set error status */
+        errno = ETIME;               /* set timed out */
         wpid = -1;
          break;                       /* don't wait any longer */
       }
    }
-   if (wpid != -1 && WIFEXITED(chldstatus)) {
-      stat = WEXITSTATUS(chldstatus);
+   if (wpid > 0) {
+      if (WIFEXITED(chldstatus)) {          /* process exit()ed */
+        stat = WEXITSTATUS(chldstatus);
+      } else if (WIFSIGNALED(chldstatus)) {  /* process died */
+        stat = 1;
+      }
       if (stat != 0) {
-        errno = ECHILD;
+        errno = ECHILD;              /* set child errno */
       }
-   }
+   }  
    if (bpipe->timer_id) {
       stop_child_timer(bpipe->timer_id);
    }
@@ -192,6 +197,11 @@ int close_bpipe(BPIPE *bpipe)
  * Run an external program. Optionally wait a specified number
  *   of seconds. Program killed if wait exceeded. Optionally
  *   return the output from the program (normally a single line).
+ *
+ * Contrary to my normal calling conventions, this program 
+ *
+ *  Returns: 0 on success
+ *          non-zero on error
  */
 int run_program(char *prog, int wait, POOLMEM *results)
 {
@@ -206,12 +216,12 @@ int run_program(char *prog, int wait, POOLMEM *results)
    }
    if (results) {
       results[0] = 0;
-      stat1 = fgets(results, sizeof_pool_memory(results), bpipe->rfd) != NULL;
+      stat1 = fgets(results, sizeof_pool_memory(results), bpipe->rfd) == NULL;
    } else {
-      stat1 = 1;
+      stat1 = 0;
    }
    stat2 = close_bpipe(bpipe);
-   return stat1 && stat2;
+   return stat2 != 0 ? stat2 : stat1; 
 }