The following commit has been merged in the master branch:
commit c9b7af92e5de0cc9ea40fad53c0e5aa5c93690cd
Author: Guillem Jover <guil...@debian.org>
Date:   Thu Oct 7 09:49:26 2010 +0200

    Move action and obsolete related functionality to the myopt module
    
    Reduce repeated code, and localize it where it belongs.

diff --git a/TODO b/TODO
index 038f575..ad1a1bd 100644
--- a/TODO
+++ b/TODO
@@ -44,7 +44,6 @@ TODO
    - Get rid of unuseful "unsigned" modifiers.
    - Use internerr instead of assert, and print more meaninful messages.
    - Make actionfunction return int, and avoid global exitcode variables.
-   - Move ACTION and OBSOLETE, etc to ‘myopt.h’.
    - Replace raw write and read calls with safe variants (signals etc).
    - Make deb build version a version instead of doing checks over a string.
    - Use enums for currently hardcoded literals (tdus, dependtry, etc).
diff --git a/dpkg-deb/dpkg-deb.h b/dpkg-deb/dpkg-deb.h
index acadbc5..f3a1d1b 100644
--- a/dpkg-deb/dpkg-deb.h
+++ b/dpkg-deb/dpkg-deb.h
@@ -27,7 +27,6 @@ dofunction do_contents, do_control, do_showinfo;
 dofunction do_info, do_field, do_extract, do_vextract, do_fsystarfile;
 
 extern int debugflag, nocheckflag, oldformatflag;
-extern const struct cmdinfo *cipaction;
 
 void extracthalf(const char *debar, const char *directory,
                  const char *taroption, int admininfo);
diff --git a/dpkg-deb/main.c b/dpkg-deb/main.c
index cef1ed9..a909e39 100644
--- a/dpkg-deb/main.c
+++ b/dpkg-deb/main.c
@@ -134,9 +134,7 @@ const char printforhelp[]=
 int debugflag=0, nocheckflag=0, oldformatflag=BUILDOLDPKGFORMAT;
 struct compressor *compressor = &compressor_gzip;
 int compress_level = -1;
-const struct cmdinfo *cipaction = NULL;
 
-static void setaction(const struct cmdinfo *cip, const char *value);
 static void setcompresstype(const struct cmdinfo *cip, const char *value);
 
 static void
@@ -155,9 +153,6 @@ set_compress_level(const struct cmdinfo *cip, const char 
*value)
   compress_level = level;
 }
 
-#define ACTION(longopt, shortopt, code, function) \
- { longopt, shortopt, 0, NULL, NULL, setaction, code, NULL, (voidfnp)function }
-
 static const struct cmdinfo cmdinfos[]= {
   ACTION("build",         'b', 0, do_build),
   ACTION("contents",      'c', 0, do_contents),
@@ -181,13 +176,6 @@ static const struct cmdinfo cmdinfos[]= {
   {  NULL,           0,   0, NULL,           NULL,         NULL             }
 };
 
-static void setaction(const struct cmdinfo *cip, const char *value) {
-  if (cipaction)
-    badusage(_("conflicting actions -%c (--%s) and -%c (--%s)"),
-             cip->oshort, cip->olong, cipaction->oshort, cipaction->olong);
-  cipaction= cip;
-}
-
 static void setcompresstype(const struct cmdinfo *cip, const char *value) {
   compressor = compressor_find_by_name(value);
   if (compressor == NULL)
diff --git a/dpkg-split/dpkg-split.h b/dpkg-split/dpkg-split.h
index 12830c0..5d102ea 100644
--- a/dpkg-split/dpkg-split.h
+++ b/dpkg-split/dpkg-split.h
@@ -49,7 +49,6 @@ struct partqueue {
    */
 };
 
-extern const struct cmdinfo *cipaction;
 extern struct partqueue *queue;
 
 extern long opt_maxpartsize;
diff --git a/dpkg-split/main.c b/dpkg-split/main.c
index 773f2ca..8f33ab2 100644
--- a/dpkg-split/main.c
+++ b/dpkg-split/main.c
@@ -96,7 +96,6 @@ usage(const struct cmdinfo *cip, const char *value)
 const char thisname[]= SPLITTER;
 const char printforhelp[]= N_("Type dpkg-split --help for help.");
 
-const struct cmdinfo *cipaction=NULL;
 struct partqueue *queue= NULL;
 
 long opt_maxpartsize = SPLITPARTDEFMAX;
@@ -114,8 +113,6 @@ void rerreof(FILE *f, const char *fn) {
   ohshit(_("unexpected end of file in %.250s"),fn);
 }
 
-static void setaction(const struct cmdinfo *cip, const char *value);
-
 static void setpartsize(const struct cmdinfo *cip, const char *value) {
   long newpartsize;
   char *endp;
@@ -132,9 +129,6 @@ static void setpartsize(const struct cmdinfo *cip, const 
char *value) {
              (HEADERALLOWANCE >> 10) + 1);
 }
 
-#define ACTION(longopt, shortopt, code, function) \
-{ longopt, shortopt, 0, NULL, NULL, setaction, code, NULL, (voidfnp)function }
-
 static const struct cmdinfo cmdinfos[]= {
   ACTION("split",   's',  0,  do_split),
   ACTION("join",    'j',  0,  do_join),
@@ -153,13 +147,6 @@ static const struct cmdinfo cmdinfos[]= {
   {  NULL,              0                                              }
 };
 
-static void setaction(const struct cmdinfo *cip, const char *value) {
-  if (cipaction)
-    badusage(_("conflicting actions -%c (--%s) and -%c (--%s)"),
-             cip->oshort, cip->olong, cipaction->oshort, cipaction->olong);
-  cipaction= cip;
-}
-
 int main(int argc, const char *const *argv) {
   jmp_buf ejbuf;
   int l;
diff --git a/lib/dpkg/libdpkg.Versions b/lib/dpkg/libdpkg.Versions
index 6d6ca1b..be9ba22 100644
--- a/lib/dpkg/libdpkg.Versions
+++ b/lib/dpkg/libdpkg.Versions
@@ -124,6 +124,9 @@ LIBDPKG_PRIVATE {
        badusage;
        # printforhelp;         # XXX variable, do not require external
        # thisname;             # XXX variable, do not require external
+       cipaction;              # XXX variable, do not export
+       setaction;
+       setobsolete;
 
        # General logging
        log_file;               # XXX variable, do not export
diff --git a/lib/dpkg/myopt.c b/lib/dpkg/myopt.c
index dd0ebc8..38da7fa 100644
--- a/lib/dpkg/myopt.c
+++ b/lib/dpkg/myopt.c
@@ -263,3 +263,28 @@ void myopt(const char *const **argvp, const struct cmdinfo 
*cmdinfos) {
     }
   }
 }
+
+void
+setobsolete(const struct cmdinfo *cip, const char *value)
+{
+  warning(_("obsolete option '--%s'\n"), cip->olong);
+}
+
+const struct cmdinfo *cipaction = NULL;
+
+/* XXX: This function is a hack. */
+static inline int
+option_short(int c)
+{
+  return c ? c : '\b';
+}
+
+void
+setaction(const struct cmdinfo *cip, const char *value)
+{
+  if (cipaction)
+    badusage(_("conflicting actions -%c (--%s) and -%c (--%s)"),
+             option_short(cip->oshort), cip->olong,
+             option_short(cipaction->oshort), cipaction->olong);
+  cipaction = cip;
+}
diff --git a/lib/dpkg/myopt.h b/lib/dpkg/myopt.h
index a054a1d..e36ddaf 100644
--- a/lib/dpkg/myopt.h
+++ b/lib/dpkg/myopt.h
@@ -49,6 +49,19 @@ void myfileopt(const char* fn, const struct cmdinfo* 
cmdinfos);
 void myopt(const char *const **argvp, const struct cmdinfo *cmdinfos);
 void loadcfgfile(const char *prog, const struct cmdinfo *cmdinfos);
 
+/**
+ * Current cmdinfo action.
+ */
+extern const struct cmdinfo *cipaction;
+
+void setaction(const struct cmdinfo *cip, const char *value);
+void setobsolete(const struct cmdinfo *cip, const char *value);
+
+#define ACTION(longopt, shortopt, code, function) \
+ { longopt, shortopt, 0, NULL, NULL, setaction, code, NULL, (voidfnp)function }
+#define OBSOLETE(longopt, shortopt) \
+ { longopt, shortopt, 0, NULL, NULL, setobsolete, 0, NULL, NULL }
+
 DPKG_END_DECLS
 
 #endif /* MYOPT_H */
diff --git a/src/divertcmd.c b/src/divertcmd.c
index ca17939..4ebaae2 100644
--- a/src/divertcmd.c
+++ b/src/divertcmd.c
@@ -49,7 +49,6 @@
 const char thisname[] = "dpkg-divert";
 const char printforhelp[] = N_("Use --help for help about querying packages.");
 
-const struct cmdinfo *cipaction = NULL;
 const char *admindir = ADMINDIR;
 
 static bool opt_pkgname_match_any = true;
@@ -659,22 +658,6 @@ diversion_listpackage(const char *const *argv)
        return 0;
 }
 
-static inline int
-option_short(int c)
-{
-       return c ? c : '\b';
-}
-
-static void
-setaction(const struct cmdinfo *cip, const char *value)
-{
-       if (cipaction)
-               badusage(_("conflicting actions -%c (--%s) and -%c (--%s)"),
-                        option_short(cip->oshort), cip->olong,
-                        option_short(cipaction->oshort), cipaction->olong);
-       cipaction = cip;
-}
-
 static void
 setpackage(const struct cmdinfo *cip, const char *value)
 {
@@ -696,9 +679,6 @@ setdivertto(const struct cmdinfo *cip, const char *value)
                badusage(_("divert-to may not contain newlines"));
 }
 
-#define ACTION(longopt, shortopt, code, function) \
- { longopt, shortopt, 0, 0, 0, setaction, code, 0, (voidfnp)function }
-
 static const struct cmdinfo cmdinfo_add =
        ACTION("add",         0, 0, diversion_add);
 
diff --git a/src/main.c b/src/main.c
index bdf4029..bd330f0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -172,7 +172,6 @@ const char printforhelp[]= N_(
 "\n"
 "Options marked [*] produce a lot of output - pipe it through `less' or `more' 
!");
 
-const struct cmdinfo *cipaction = NULL;
 int f_pending=0, f_recursive=0, f_alsoselect=1, f_skipsame=0, f_noact=0;
 int f_autodeconf=0, f_nodebsig=0;
 int f_triggers = 0;
@@ -219,17 +218,6 @@ static const struct forceinfo {
   {  NULL                                               }
 };
 
-static void setaction(const struct cmdinfo *cip, const char *value) {
-  if (cipaction)
-    badusage(_("conflicting actions -%c (--%s) and -%c (--%s)"),
-             cip->oshort, cip->olong, cipaction->oshort, cipaction->olong);
-  cipaction= cip;
-}
-
-static void setobsolete(const struct cmdinfo *cip, const char *value) {
-  warning(_("obsolete option '--%s'\n"), cip->olong);
-}
-
 static void setdebug(const struct cmdinfo *cpi, const char *value) {
   char *endp;
 
@@ -464,10 +452,6 @@ static const struct cmdinfo cmdinfos[]= {
    * The action entries are made with the ACTION macro, as they all
    * have a very similar structure.
    */
-#define ACTION(longopt,shortopt,code,function) \
- { longopt, shortopt, 0, NULL, NULL, setaction, code, NULL, (voidfnp)function }
-#define OBSOLETE(longopt,shortopt) \
- { longopt, shortopt, 0, NULL, NULL, setobsolete, 0, NULL, NULL }
 #define ACTIONBACKEND(longopt, shortopt, backend) \
  { longopt, shortopt, 0, NULL, NULL, setaction, 0, (void *)backend, 
(voidfnp)execbackend }
 
diff --git a/src/main.h b/src/main.h
index 6337191..82e6885 100644
--- a/src/main.h
+++ b/src/main.h
@@ -119,7 +119,6 @@ enum conffopt {
 
 extern const char *const statusstrings[];
 
-extern const struct cmdinfo *cipaction;
 extern int f_pending, f_recursive, f_alsoselect, f_skipsame, f_noact;
 extern int f_autodeconf, f_nodebsig;
 extern int f_triggers;
diff --git a/src/querycmd.c b/src/querycmd.c
index d0cfe86..4968b03 100644
--- a/src/querycmd.c
+++ b/src/querycmd.c
@@ -642,27 +642,13 @@ usage(const struct cmdinfo *ci, const char *value)
 const char thisname[]= "dpkg-query";
 const char printforhelp[]= N_("Use --help for help about querying packages.");
 
-const struct cmdinfo *cipaction = NULL;
-
 const char *admindir= ADMINDIR;
 
-static void setaction(const struct cmdinfo *cip, const char *value) {
-  if (cipaction)
-    badusage(_("conflicting actions -%c (--%s) and -%c (--%s)"),
-             cip->oshort, cip->olong, cipaction->oshort, cipaction->olong);
-  cipaction= cip;
-}
-
 static const struct cmdinfo cmdinfos[]= {
   /* This table has both the action entries in it and the normal options.
    * The action entries are made with the ACTION macro, as they all
    * have a very similar structure.
    */
-#define ACTION(longopt,shortopt,code,function) \
- { longopt, shortopt, 0, NULL, NULL, setaction, code, NULL, (voidfnp)function }
-#define OBSOLETE(longopt,shortopt) \
- { longopt, shortopt, 0, NULL, NULL, setobsolete, 0, NULL, NULL }
-
   ACTION( "listfiles",                      'L', act_listfiles,     
enqperpackage   ),
   ACTION( "status",                         's', act_status,        
enqperpackage   ),
   ACTION( "print-avail",                    'p', act_printavail,    
enqperpackage   ),
diff --git a/src/statcmd.c b/src/statcmd.c
index 337e351..e696458 100644
--- a/src/statcmd.c
+++ b/src/statcmd.c
@@ -99,23 +99,12 @@ usage(const struct cmdinfo *cip, const char *value)
        exit(0);
 }
 
-const struct cmdinfo *cipaction = NULL;
 const char *admindir = ADMINDIR;
 
 static int opt_verbose = 1;
 static int opt_force = 0;
 static int opt_update = 0;
 
-static void
-setaction(const struct cmdinfo *cip, const char *value)
-{
-       if (cipaction)
-               badusage(_("conflicting actions -%c (--%s) and -%c (--%s)"),
-                        cip->oshort, cip->olong,
-                        cipaction->oshort, cipaction->olong);
-       cipaction = cip;
-}
-
 static char *
 path_cleanup(const char *path)
 {
@@ -366,9 +355,6 @@ statoverride_list(const char *const *argv)
        return ret;
 }
 
-#define ACTION(longopt, shortopt, code, function) \
- { longopt, shortopt, 0, 0, 0, setaction, code, 0, (voidfnp)function }
-
 static const struct cmdinfo cmdinfos[] = {
        ACTION("add",    0, act_install,   statoverride_add),
        ACTION("remove", 0, act_remove,    statoverride_remove),

-- 
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