]> err.no Git - dpkg/commitdiff
Add 'warn' parameter to waitsubproc and checksubprocerr, and also add a
authorAdam Heath <doogie@debian.org>
Thu, 4 Jan 2001 07:35:21 +0000 (07:35 +0000)
committerAdam Heath <doogie@debian.org>
Thu, 4 Jan 2001 07:35:21 +0000 (07:35 +0000)
return value.  This fixes my last checkin, where
maintainer_script_alternative would run both the old and new script.

ChangeLog
dpkg-deb/build.c
dpkg-deb/extract.c
dpkg-deb/info.c
include/dpkg.h.in
lib/mlib.c
main/archives.c
main/enquiry.c
main/help.c
main/processarc.c

index fec287c45b8db416fda99bc2bf34861ce8ed172c..7b50c6cce59e706b2008026025cb831ebc203a2a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Thu Jan  4 01:20:27 CST 2001 Adam Heath <doogie@debian.org>
+
+  * dpkg-deb/build.c, dpkg-deb/extract.c, dpkg-deb/info.c,
+    include/dpkg.h.in, lib/mlib.c, main/archives.c, main/enquiry.c,
+    main/help.c main/processarc.c: Add 'warn' parameter to waitsubproc
+    and checksubprocerr, and also add a return value.  This fixes my
+    last checkin, where maintainer_script_alternative would run
+    both the old and new script.
+
 Thu Jan 04 05:19:37 CET 2001 peter karlsson <peterk@debian.org>
 
   * po/sv.po: Updated Swedish translation.
index 8e1c41c896c86a55bfa1c65121e5068d3b4cd7da..713c03a7cd52a0e598253b30a1bdfc3bb819441e 100644 (file)
@@ -391,8 +391,8 @@ void do_build(const char *const *argv) {
     internalGzip(0, 1, "9", _("control"));
   }
   close(p1[0]);
-  waitsubproc(c2,"gzip -9c",0);
-  waitsubproc(c1,"tar -cf",0);
+  waitsubproc(c2,"gzip -9c",0,0);
+  waitsubproc(c1,"tar -cf",0,0);
   if (fstat(gzfd,&controlstab)) ohshite(_("failed to fstat tmpfile (control)"));
   /* We have our first file for the ar-archive. Write a header for it to the
    * package and insert it.
@@ -478,7 +478,7 @@ void do_build(const char *const *argv) {
        ohshite(_("failed to write filename to tar pipe (data)"));
     }
   close(p3[0]);
-  waitsubproc(c3,"find",0);
+  waitsubproc(c3,"find",0,0);
 
   for (fi= symlist;fi;fi= fi->next)
     if (write(p1[1], fi->fn, strlen(fi->fn)+1) == -1)
@@ -486,8 +486,8 @@ void do_build(const char *const *argv) {
   /* All done, clean up wait for tar and gzip to finish their job */
   close(p1[1]);
   free_filist(symlist);
-  waitsubproc(c2,"gzip -9c from tar -cf",0);
-  waitsubproc(c1,"tar -cf",0);
+  waitsubproc(c2,"gzip -9c from tar -cf",0,0);
+  waitsubproc(c1,"tar -cf",0,0);
   /* Okay, we have data.tar.gz as well now, add it to the ar wrapper */
   if (!oldformatflag) {
     if (fstat(gzfd,&datastab)) ohshite("_(failed to fstat tmpfile (data))");
index 1b8d41d489720d817c50a23e09472bc2d7c60cb4..f93e5509c8cd3b2d77f314d2b9e2027f0123df6c 100644 (file)
@@ -50,7 +50,7 @@ static void movecontrolfiles(const char *thing) {
   if (!(c1= m_fork())) {
     execlp("sh","sh","-c",buf,(char*)0); ohshite(_("failed to exec sh -c mv foo/* &c"));
   }
-  waitsubproc(c1,"sh -c mv foo/* &c",0);
+  waitsubproc(c1,"sh -c mv foo/* &c",0,0);
 }
 
 static void readfail(FILE *a, const char *filename, const char *what) {
@@ -302,11 +302,11 @@ void extracthalf(const char *debar, const char *directory,
       ohshite(_("failed to exec tar"));
     }
     close(p2[0]);
-    waitsubproc(c3,"tar",0);
+    waitsubproc(c3,"tar",0,0);
   }
   
-  waitsubproc(c2,"gzip -dc",1);
-  if (c1 != -1) waitsubproc(c1,"paste",0);
+  waitsubproc(c2,"gzip -dc",1,0);
+  if (c1 != -1) waitsubproc(c1,"paste",0,0);
   if (oldformat && admininfo) {
     if (versionnum == 0.931F) {
       movecontrolfiles(OLDOLDDEBDIR);
index 7e72fc533e4aa59efe68f2754054ad86614bc04e..01e36cba1dacee3efc48542bf13bac6ae875ff09 100644 (file)
@@ -71,7 +71,7 @@ static void info_prepare(const char *const **argvp,
   if (!(c1= m_fork())) {
     execlp(RM,"rm","-rf",dbuf,(char*)0); ohshite(_("failed to exec rm -rf"));
   }
-  waitsubproc(c1,"rm -rf",0);
+  waitsubproc(c1,"rm -rf",0,0);
   push_cleanup(cu_info_prepare,-1, 0,0, 1, (void*)dbuf);
   extracthalf(*debarp, dbuf, "mx", admininfo);
 }
index ec4920d76f12620f831302fcd15d36c6a397d7af..e447833cc6273a77579fc8d8a8e12ff2396272c9 100644 (file)
@@ -194,8 +194,8 @@ int m_fork(void);
 void m_dup2(int oldfd, int newfd);
 void m_pipe(int fds[2]);
 
-void checksubprocerr(int status, const char *description, int sigpipeok);
-void waitsubproc(pid_t pid, const char *description, int sigpipeok);
+int checksubprocerr(int status, const char *description, int sigpipeok, int warn);
+int waitsubproc(pid_t pid, const char *description, int sigpipeok, int warn);
 
 #define BUFFER_WRITE_BUF 0
 #define BUFFER_WRITE_VBUF 1
index 4ffa3c64f8c4257abe8760c52bcfa6613fff77f0..e67f54d58e09ed8eca71c637c37cf1d5bb1d849a 100644 (file)
@@ -102,27 +102,34 @@ void m_pipe(int *fds) {
   ohshite(_("failed to create pipe"));
 }
 
-void checksubprocerr(int status, const char *description, int sigpipeok) {
+int checksubprocerr(int status, const char *description, int sigpipeok, int warn) {
   int n;
   if (WIFEXITED(status)) {
-    n= WEXITSTATUS(status); if (!n) return;
-    ohshit(_("subprocess %s returned error exit status %d"),description,n);
+    n= WEXITSTATUS(status); if (!n) return n;
+    if(warn)
+      fprintf(stderr, _("dpkg: warning - %s returned error exit status %d\n"),description,n);
+    else
+      ohshit(_("subprocess %s returned error exit status %d"),description,n);
   } else if (WIFSIGNALED(status)) {
-    n= WTERMSIG(status); if (!n || (sigpipeok && n==SIGPIPE)) return;
-    ohshit(_("subprocess %s killed by signal (%s)%s"),
+    n= WTERMSIG(status); if (!n || (sigpipeok && n==SIGPIPE)) return 0;
+    if (warn)
+      ohshit(_("dpkg: warning - %s killed by signal (%s)%s\n"),
+           description, strsignal(n), WCOREDUMP(status) ? ", core dumped" : "");
+    else
+      ohshit(_("subprocess %s killed by signal (%s)%s"),
            description, strsignal(n), WCOREDUMP(status) ? ", core dumped" : "");
   } else {
     ohshit(_("subprocess %s failed with wait status code %d"),description,status);
   }
 }
 
-void waitsubproc(pid_t pid, const char *description, int sigpipeok) {
+int waitsubproc(pid_t pid, const char *description, int sigpipeok, int warn) {
   pid_t r;
   int status;
 
   while ((r= waitpid(pid,&status,0)) == -1 && errno == EINTR);
   if (r != pid) { onerr_abort++; ohshite(_("wait for %s failed"),description); }
-  checksubprocerr(status,description,sigpipeok);
+  return checksubprocerr(status,description,sigpipeok, warn);
 }
 
 ssize_t buffer_write(buffer_data_t data, void *buf, ssize_t length, char *desc) {
index 73e8a24457b8e6fda923ee621c4b5e5f2235ba6f..f1eacaac09566340a08569356c001df74f072399 100644 (file)
@@ -747,7 +747,7 @@ void archivefiles(const char *const *argv) {
     }
     if (ferror(pf)) ohshite(_("error reading find's pipe"));
     if (fclose(pf)) ohshite(_("error closing find's pipe"));
-    waitsubproc(fc,"find",0);
+    waitsubproc(fc,"find",0,0);
 
     if (!nfiles)
       ohshit(_("searched, but found no packages (files matching *.deb)"));
index 3035b8cb21034619df6fe7a4b272dee60561743e..54ff7f6f7e8b5eb7b52077456bf68d67fa5c2834 100644 (file)
@@ -699,7 +699,7 @@ void printarch(const char *const *argv) {
   }
   close(p1[1]);
   fd_vbuf_copy(fileno(ccpipe), &vb, -1, _("error reading from CC pipe"));
-  waitsubproc(c1,"gcc --print-libgcc-file-name",0);
+  waitsubproc(c1,"gcc --print-libgcc-file-name",0,0);
   if (!vb.used) badlgccfn(ccompiler,"",_("empty output"));
   varbufaddc(&vb,0);
   if (vb.buf[vb.used-2] != '\n') badlgccfn(ccompiler,vb.buf,_("no newline"));
index 2762aeb345b512113e9cc99fe5a697c4a469f86a..7ac3e4e249dc4d34ec0cb466db4a7328897e9a98 100644 (file)
@@ -284,7 +284,7 @@ int maintainer_script_installed(struct pkginfo *pkg, const char *scriptname,
     ohshite(_("unable to execute %s"),buf);
   }
   script_catchsignals(); /* This does a push_cleanup() */
-  waitsubproc(c1,buf,0);
+  waitsubproc(c1,buf,0,0);
   pop_cleanup(ehflag_normaltidy);
 
   ensure_diversions();
@@ -321,7 +321,7 @@ int maintainer_script_new(const char *scriptname, const char *description,
     ohshite(_("unable to execute new %s"),buf);
   }
   script_catchsignals(); /* This does a push_cleanup() */
-  waitsubproc(c1,buf,0);
+  waitsubproc(c1,buf,0,0);
   pop_cleanup(ehflag_normaltidy);
 
   ensure_diversions();
@@ -337,7 +337,7 @@ int maintainer_script_alternative(struct pkginfo *pkg,
   struct stat stab;
   int c1, n, status;
   char buf[100];
-  pid_t r;
+  int r;
 
   oldscriptpath= pkgadminfile(pkg,scriptname);
   arglist= buildarglist(scriptname,
@@ -363,8 +363,9 @@ int maintainer_script_alternative(struct pkginfo *pkg,
       ohshite(_("unable to execute %s"),buf);
     }
     script_catchsignals(); /* This does a push_cleanup() */
-    waitsubproc(c1,buf,0);
+    r= waitsubproc(c1,buf,0,1);
     pop_cleanup(ehflag_normaltidy);
+    if (!r) return 1;
     ensure_diversions();
   }
   fprintf(stderr, _("dpkg - trying script from the new package instead ...\n"));
@@ -392,7 +393,7 @@ int maintainer_script_alternative(struct pkginfo *pkg,
     ohshite(_("unable to execute %s"),buf);
   }
   script_catchsignals(); /* This does a push_cleanup() */
-  waitsubproc(c1,buf,0);
+  waitsubproc(c1,buf,0,1);
   pop_cleanup(ehflag_normaltidy);
   fprintf(stderr, _("dpkg: ... it looks like that went OK.\n"));
 
@@ -496,5 +497,5 @@ void ensure_pathname_nonexisting(const char *pathname) {
     ohshite(_("failed to exec rm for cleanup"));
   }
   debug(dbg_eachfile,"ensure_pathname_nonexisting running rm -rf");
-  waitsubproc(c1,"rm cleanup",0);
+  waitsubproc(c1,"rm cleanup",0,0);
 }
index 5a63d9d2deafebfbf3c13b6b92dd609e9fba8ca5..e73da8deded16627b49e4f8f0baaa7098a3504a4 100644 (file)
@@ -132,7 +132,7 @@ void process_archive(const char *filename) {
       /* No, it wasn't a part. */
       break;
     default:
-      checksubprocerr(status,SPLITTER,0);
+      checksubprocerr(status,SPLITTER,0,0);
     }
   }
   
@@ -162,7 +162,7 @@ void process_archive(const char *filename) {
     execlp(BACKEND, BACKEND,"--control",filename,cidir,(char*)0);
     ohshite(_("failed to exec dpkg-deb to extract control information"));
   }
-  waitsubproc(c1,BACKEND " --control",0);
+  waitsubproc(c1,BACKEND " --control",0,0);
   strcpy(cidirrest,CONTROLFILE);
 
   parsedb(cidir, pdb_recordavailable|pdb_rejectstatus|pdb_ignorefiles|pdb_weakclassification,
@@ -527,7 +527,7 @@ void process_archive(const char *filename) {
   }
   fd_null_copy(tc.backendpipe,-1,_("dpkg-deb: zap possible trailing zeros"));
   close(tc.backendpipe);
-  waitsubproc(c1,BACKEND " --fsys-tarfile",1);
+  waitsubproc(c1,BACKEND " --fsys-tarfile",1,0);
 
   if (oldversionstatus == stat_halfinstalled || oldversionstatus == stat_unpacked) {
     /* Packages that were in `installed' and `postinstfailed' have been reduced