The following commit has been merged in the master branch:
commit 2b87ec98e266e6dcab59eacc4ea2b2e227960133
Author: Guillem Jover <guil...@debian.org>
Date:   Sat Jun 26 04:42:31 2010 +0200

    dpkg-query: Change actionfunction to return int instead of void
    
    This avoids a global exit code variable.

diff --git a/src/query.c b/src/query.c
index 3f2b03f..7eb94e2 100644
--- a/src/query.c
+++ b/src/query.c
@@ -50,7 +50,6 @@
 #include "filesdb.h"
 #include "main.h"
 
-static int failures = 0;
 static const char* showformat          = "${Package}\t${Version}\n";
 
 static int getwidth(void) {
@@ -135,12 +134,13 @@ Desired=Unknown/Install/Remove/Purge/Hold\n\
          l, pdesc);
 }
 
-static void
+static int
 listpackages(const char *const *argv)
 {
   struct pkg_array array;
   struct pkginfo *pkg;
   int i;
+  int failures = 0;
   bool head;
 
   modstatdb_init(admindir,msdbrw_readonly);
@@ -189,6 +189,8 @@ listpackages(const char *const *argv)
 
   pkg_array_destroy(&array);
   modstatdb_shutdown();
+
+  return failures;
 }
 
 static int searchoutput(struct filenamenode *namenode) {
@@ -227,13 +229,14 @@ static int searchoutput(struct filenamenode *namenode) {
   return found + (namenode->divert ? 1 : 0);
 }
 
-static void
+static int
 searchfiles(const char *const *argv)
 {
   struct filenamenode *namenode;
   struct fileiterator *it;
   const char *thisarg;
   int found;
+  int failures = 0;
   struct varbuf path = VARBUF_INIT;
   static struct varbuf vb;
   
@@ -289,15 +292,18 @@ searchfiles(const char *const *argv)
   modstatdb_shutdown();
 
   varbuf_destroy(&path);
+
+  return failures;
 }
 
-static void
+static int
 enqperpackage(const char *const *argv)
 {
   const char *thisarg;
   struct fileinlist *file;
   struct pkginfo *pkg;
   struct filenamenode *namenode;
+  int failures = 0;
   
   if (!*argv)
     badusage(_("--%s needs at least one package name argument"), 
cipaction->olong);
@@ -387,19 +393,22 @@ enqperpackage(const char *const *argv)
     m_output(stderr, _("<standard error>"));
   }
   modstatdb_shutdown();
+
+  return failures;
 }
 
-static void
+static int
 showpackages(const char *const *argv)
 {
   struct pkg_array array;
   struct pkginfo *pkg;
   struct pkg_format_node *fmt = pkg_format_parse(showformat);
   int i;
+  int failures = 0;
 
   if (!fmt) {
     failures++;
-    return;
+    return failures;
   }
 
   modstatdb_init(admindir,msdbrw_readonly);
@@ -447,6 +456,8 @@ showpackages(const char *const *argv)
   pkg_array_destroy(&array);
   pkg_format_free(fmt);
   modstatdb_shutdown();
+
+  return failures;
 }
 
 static void
@@ -528,7 +539,7 @@ control_path_pkg(struct pkginfo *pkg)
   varbuf_destroy(&db_path);
 }
 
-static void
+static int
 control_path(const char *const *argv)
 {
   struct pkginfo *pkg;
@@ -565,6 +576,8 @@ control_path(const char *const *argv)
     control_path_pkg(pkg);
 
   modstatdb_shutdown();
+
+  return 0;
 }
 
 static void DPKG_ATTR_NORET
@@ -666,7 +679,8 @@ static const struct cmdinfo cmdinfos[]= {
 
 int main(int argc, const char *const *argv) {
   jmp_buf ejbuf;
-  void (*actionfunction)(const char *const *argv);
+  int (*actionfunction)(const char *const *argv);
+  int ret;
 
   setlocale(LC_ALL, "");
   bindtextdomain(PACKAGE, LOCALEDIR);
@@ -680,11 +694,11 @@ int main(int argc, const char *const *argv) {
   setvbuf(stdout, NULL, _IONBF, 0);
   filesdbinit();
 
-  actionfunction= (void (*)(const char* const*))cipaction->farg;
+  actionfunction = (int (*)(const char *const *))cipaction->farg;
 
-  actionfunction(argv);
+  ret = actionfunction(argv);
 
   standard_shutdown();
 
-  return !!failures;
+  return !!ret;
 }

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to debian-dpkg-cvs-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to