]> err.no Git - dpkg/commitdiff
New functions, standard_startup, standard_shutdown, that contain the most
authorAdam Heath <doogie@debian.org>
Fri, 24 May 2002 05:16:43 +0000 (05:16 +0000)
committerAdam Heath <doogie@debian.org>
Fri, 24 May 2002 05:16:43 +0000 (05:16 +0000)
common functions that all dpkg binaries call.

ChangeLog
dpkg-deb/main.c
dselect/main.cc
include/dpkg.h.in
include/myopt.h
lib/Makefile.in
lib/myopt.c
lib/startup.c [new file with mode: 0644]
main/main.c
main/query.c
split/main.c

index b65e8fac23905d4d61712f9944cc3c6694c0edec..7e5b8b01d6156b5256ba70f8d973562083e941fa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Fri May 24 00:11:01 CDT 2002 Adam Heath <doogie@debian.org>
+
+  * include/dpkg.h.in, include/myopt.h, lib/Makefile.in, lib/myopt.c,
+    main/main.c main/query.c dpkg-deb/main.c split/main.c dselect/main.cc,
+    lib/startup.c: New functions, standard_startup, standard_shutdown, that
+    contain the most common functions that all dpkg binaries call.
+
 Thu May 23 23:23:03 CDT 2002 Adam Heath <doogie@debian.org>
 
   * lib/lock.c: Use setcloexec wrapper instead of calling fcntl directly.
index 910a3b50a8fb74eea697a1c0a1015d4a12dbfc31..54b10618d89973395a04678cc707f191f9f72fc6 100644 (file)
@@ -164,23 +164,13 @@ int main(int argc, const char *const *argv) NONRETURNING;
 int main(int argc, const char *const *argv) {
   jmp_buf ejbuf;
 
-  setlocale(LC_ALL, "");
   setlocale(LC_NUMERIC, "POSIX");
-  bindtextdomain(PACKAGE, LOCALEDIR);
-  textdomain(PACKAGE);
-
-  if (setjmp(ejbuf)) { /* expect warning about possible clobbering of argv */
-    error_unwind(ehflag_bombout); exit(2);
-  }
-  push_error_handler(&ejbuf,print_error_fatal,0);
-
-  myopt(&argv,cmdinfos);
+  standard_startup(&ejbuf, argc, &argv, NULL, 0, cmdinfos);
   if (!cipaction) badusage(_("need an action option"));
 
   unsetenv("GZIP");
   action(argv);
-  set_error_display(0,0);
-  error_unwind(ehflag_normaltidy);
+  standard_shutdown();
   exit(0);
 }
 
index 009a2d381b66cca14cdde88241856319c0dae8ce..831bfef91d434928fceea80623b844dfeda99eca 100644 (file)
@@ -467,7 +467,6 @@ urqresult urq_quit(void) {
 
 int main(int, const char *const *argv) {
   jmp_buf ejbuf;
-  char *home, *homerc;
 
   setlocale(LC_ALL, "");
   bindtextdomain(PACKAGE, LOCALEDIR);
@@ -479,13 +478,7 @@ int main(int, const char *const *argv) {
   }
   push_error_handler(&ejbuf,print_error_fatal,0);
 
-  myfileopt(CONFIGDIR "/" DSELECT ".cfg", cmdinfos);
-  if ((home= getenv("HOME")) != NULL) {
-       homerc= (char*)malloc((strlen(home)+strlen("/." DSELECT ".cfg")+1)*sizeof(char));
-       sprintf(homerc, "%s/.%s.cfg", home, DSELECT);
-       myfileopt(homerc, cmdinfos);
-       free(homerc);
-  }
+  loadcfgfile(DSELECT, cmdinfos);
   myopt(&argv,cmdinfos);
 
   if (*argv) {
@@ -501,8 +494,7 @@ int main(int, const char *const *argv) {
   }
 
   cursesoff();
-  set_error_display(0,0);
-  error_unwind(ehflag_normaltidy);
+  standard_shutdown();
   return(0);
 }
 
index aa67011fdca57c96e5d26e21fbeddadfe3476a1a..06c4074deb0fd954d8f7a2246f5e732bacb922be 100644 (file)
@@ -28,6 +28,8 @@
 #include <stdio.h>
 #include <sys/types.h>
 
+#include <myopt.h>
+
 #define ARCHIVEVERSION     "2.0"
 #define SPLITVERSION       "2.1"
 #define OLDARCHIVEVERSION  "0.939000"
 extern const char thisname[]; /* defined separately in each program */
 extern const char printforhelp[];
 
+/*** from startup.c ***/
+
+void standard_startup(jmp_buf *ejbuf, int argc, const char *const **argv, const char *prog, int loadcfg, const struct cmdinfo cmdinfos[]);
+void standard_shutdown(void);
+
 /*** from ehandle.c ***/
 
 void push_error_handler(jmp_buf *jbufp,
index dd7b9326a569d230683e763c6a2a88827b378ea1..cb59f824c380eb8986ea28b246e5581d63232701 100644 (file)
@@ -38,5 +38,5 @@ struct cmdinfo {
 
 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);
 #endif /* MYOPT_H */
index 05b91e57c481bab562f4d1a9af04a10ab7a2ff8a..74484383b53bf0a3a7a712e5d55b9f2a5d9ac831 100644 (file)
@@ -9,7 +9,7 @@ include ../Makefile.conf
 SOURCES                = compat.c database.c dbmodify.c dump.c ehandle.c fields.c \
                    lock.c mlib.c myopt.c nfmalloc.c parse.c parsehelp.c \
                    showcright.c showpkg.c tarfn.c varbuf.c vercmp.c md5.c \
-                   utils.c
+                   utils.c startup.c
 
 OBJECTS                = $(patsubst %.c, %.o, $(SOURCES))
 GENFILES       = $(OBJECTS) libdpkg.a
index b769a1e3b72273172468960b96aed5a7b441fe7b..9d7c044ce3ab56315aaafe3b282d46fd137629d3 100644 (file)
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <errno.h>
 #include <ctype.h>
+#include <stdlib.h>
 
 #include <config.h>
 #include <myopt.h>
@@ -84,6 +85,25 @@ void myfileopt(const char* fn, const struct cmdinfo* cmdinfos) {
   if (fclose(file)) ohshite(_("error closing configuration file `%.255s'"), fn);
 }
 
+void loadcfgfile(const char *prog, const struct cmdinfo* cmdinfos) {
+  char *home, *file;
+  int l1, l2;
+  l1 = strlen(CONFIGDIR "/.cfg") + strlen(prog);
+  file = malloc(l1 + 1);
+  sprintf(file, CONFIGDIR "/%s.cfg", prog);
+  myfileopt(file, cmdinfos);
+  if ((home = getenv("HOME")) != NULL) {
+    l2 = strlen(home) + strlen("/.cfg") + strlen(prog);
+    if (l2 > l1) {
+      free(file);
+      file = malloc(l2 + 1);
+      l1 = l2;
+    }
+    myfileopt(file, cmdinfos);
+  }
+  free(file);
+}
+
 void myopt(const char *const **argvp, const struct cmdinfo *cmdinfos) {
   const struct cmdinfo *cip;
   const char *p, *value;
diff --git a/lib/startup.c b/lib/startup.c
new file mode 100644 (file)
index 0000000..32c835d
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * dpkg - main program for package management
+ * main.c - main program
+ *
+ * Copyright (C) 1994,1995 Ian Jackson <ian@chiark.greenend.org.uk>
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * This is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with dpkg; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <limits.h>
+#include <ctype.h>
+
+#include <config.h>
+#include <dpkg.h>
+#include <dpkg-db.h>
+#include <version.h>
+#include <myopt.h>
+
+void standard_startup(jmp_buf *ejbuf, int argc, const char *const **argv, const char *prog, int loadcfg, const struct cmdinfo cmdinfos[]) {
+
+  setlocale(LC_ALL, "");
+  bindtextdomain(PACKAGE, LOCALEDIR);
+  textdomain(PACKAGE);
+
+  if (setjmp(*ejbuf)) { /* expect warning about possible clobbering of argv */
+    error_unwind(ehflag_bombout); exit(2);
+  }
+  push_error_handler(ejbuf,print_error_fatal,0);
+
+  umask(022); /* Make sure all our status databases are readable. */
+  if (loadcfg)
+    loadcfgfile(prog, cmdinfos);
+
+  myopt(argv,cmdinfos);
+}
+
+void standard_shutdown(void) {
+  set_error_display(0,0);
+  error_unwind(ehflag_normaltidy);
+}
index 8feb679e20c659def1ddb81a62815c03ee55f907..407702b945f0bbda540e6b46a14d91607ad08207 100644 (file)
@@ -547,27 +547,8 @@ printf("line=`%*s'\n",(int)linevb.used,linevb.buf);
 int main(int argc, const char *const *argv) {
   jmp_buf ejbuf;
   static void (*actionfunction)(const char *const *argv);
-  char *home, *homerc;
 
-  setlocale(LC_ALL, "");
-  bindtextdomain(PACKAGE, LOCALEDIR);
-  textdomain(PACKAGE);
-
-  if (setjmp(ejbuf)) { /* expect warning about possible clobbering of argv */
-    error_unwind(ehflag_bombout); exit(2);
-  }
-  push_error_handler(&ejbuf,print_error_fatal,0);
-
-  umask(022); /* Make sure all our status databases are readable. */
-  myfileopt(CONFIGDIR "/" DPKG ".cfg", cmdinfos);
-  if ((home= getenv("HOME")) != NULL) {
-       homerc= (char*)malloc((strlen(home)+strlen("/." DPKG ".cfg")+1)*sizeof(char));
-       sprintf(homerc, "%s/.%s.cfg", home, DPKG);
-       myfileopt(homerc, cmdinfos);
-       free(homerc);
-  }
-  myopt(&argv,cmdinfos);
+  standard_startup(&ejbuf, argc, &argv, DPKG, 1, cmdinfos);
   if (!cipaction) badusage(_("need an action option"));
 
   setvbuf(stdout,0,_IONBF,0);
@@ -577,8 +558,7 @@ int main(int argc, const char *const *argv) {
 
   actionfunction(argv);
 
-  set_error_display(0,0);
-  error_unwind(ehflag_normaltidy);
+  standard_shutdown();
 
   return reportbroken_retexitstatus();
 }
index ac0a309ec77bb61d26b07622c7c3ab70bff3bf2c..9b8c69cb47b3d3f4bd76559ed4f3aef255c8eefc 100644 (file)
@@ -533,18 +533,7 @@ int main(int argc, const char *const *argv) {
   jmp_buf ejbuf;
   static void (*actionfunction)(const char *const *argv);
 
-  setlocale(LC_ALL, "");
-  bindtextdomain(PACKAGE, LOCALEDIR);
-  textdomain(PACKAGE);
-
-  if (setjmp(ejbuf)) { /* expect warning about possible clobbering of argv */
-    error_unwind(ehflag_bombout); exit(2);
-  }
-  push_error_handler(&ejbuf,print_error_fatal,0);
-
-  umask(022); /* Make sure all our status databases are readable. */
-  myopt(&argv,cmdinfos);
+  standard_startup(&ejbuf, argc, &argv, NULL, 0, cmdinfos);
   if (!cipaction) badusage(_("need an action option"));
 
   setvbuf(stdout,0,_IONBF,0);
@@ -554,8 +543,7 @@ int main(int argc, const char *const *argv) {
 
   actionfunction(argv);
 
-  set_error_display(0,0);
-  error_unwind(ehflag_normaltidy);
+  standard_shutdown();
 
   return reportbroken_retexitstatus();
 }
index 6cbb0d3ed3371df4b69318447fbe669792193b9f..0f9d77b0ef51811b87fb47add27d9e8b7afb6606 100644 (file)
@@ -153,16 +153,7 @@ int main(int argc, const char *const *argv) {
   int l;
   char *p;
 
-  setlocale(LC_ALL, "");
-  bindtextdomain(PACKAGE, LOCALEDIR);
-  textdomain(PACKAGE);
-
-  if (setjmp(ejbuf)) { /* expect warning about possible clobbering of argv */
-    error_unwind(ehflag_bombout); exit(2);
-  }
-  push_error_handler(&ejbuf,print_error_fatal,NULL);
-
-  myopt(&argv,cmdinfos);
+  standard_startup(&ejbuf, argc, &argv, NULL, 0, cmdinfos);
   if (!cipaction) badusage(_("need an action option"));
 
   l= strlen(depotdir);
@@ -178,7 +169,6 @@ int main(int argc, const char *const *argv) {
 
   if (ferror(stderr)) werr("stderr");
   
-  set_error_display(NULL,NULL);
-  error_unwind(ehflag_normaltidy);
+  standard_shutdown();
   exit(0);
 }