RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 09-Feb-2008 21:12:20
Branch: HEAD Handle: 2008020920121901
Added files:
rpm/rpmio poptIO.c poptIO.h
Modified files:
rpm CHANGES
rpm/lib poptALL.c
rpm/rpmio Makefile.am
Log:
- jbj: rpmio: clone poptIO.[ch] from poptALL.c for rpmio noinst_PROGRAMS.
- jbj: rpmcli: remove duplicate nolibio entry in poptALL.c
Summary:
Revision Changes Path
1.2167 +2 -0 rpm/CHANGES
2.79 +0 -4 rpm/lib/poptALL.c
1.126 +6 -5 rpm/rpmio/Makefile.am
1.1 +538 -0 rpm/rpmio/poptIO.c
1.1 +82 -0 rpm/rpmio/poptIO.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.2166 -r1.2167 CHANGES
--- rpm/CHANGES 9 Feb 2008 17:55:31 -0000 1.2166
+++ rpm/CHANGES 9 Feb 2008 20:12:19 -0000 1.2167
@@ -1,4 +1,6 @@
5.0.0 -> 5.1a1:
+ - jbj: rpmio: clone poptIO.[ch] from poptALL.c for rpmio noinst_PROGRAMS.
+ - jbj: rpmcli: remove duplicate nolibio entry in poptALL.c
- jbj: pemit %{___NVRA} to parameterize the displayed NVRA while installing.
- jbj: create %___NVRA to split external <-> internal package names.
- rpm.org: Mass convert (back) to rpmTag as it's usable everywhere now
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/poptALL.c
============================================================================
$ cvs diff -u -r2.78 -r2.79 poptALL.c
--- rpm/lib/poptALL.c 29 Jan 2008 19:11:51 -0000 2.78
+++ rpm/lib/poptALL.c 9 Feb 2008 20:12:20 -0000 2.79
@@ -469,10 +469,6 @@
N_("don't verify package digest(s)"), NULL },
{ "nohdrchk", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOHDRCHK,
N_("don't verify database header(s) when retrieved"), NULL },
-#if defined(HAVE_LIBIO_H) && defined(_G_IO_IO_FILE_VERSION)
- { "nolibio", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &noLibio, 1,
- N_("disable use of libio(3) API"), NULL},
-#endif
{ "nosignature", '\0', 0, NULL, RPMCLI_POPT_NOSIGNATURE,
N_("don't verify package signature(s)"), NULL },
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/Makefile.am
============================================================================
$ cvs diff -u -r1.125 -r1.126 Makefile.am
--- rpm/rpmio/Makefile.am 9 Feb 2008 15:28:03 -0000 1.125
+++ rpm/rpmio/Makefile.am 9 Feb 2008 20:12:20 -0000 1.126
@@ -40,11 +40,12 @@
pkgincdir = $(pkgincludedir)$(WITH_PATH_VERSIONED_SUFFIX)
pkginc_HEADERS = \
- argv.h envvar.h fts.h mire.h rpmbc.h rpmcb.h rpmdav.h rpmhash.h \
- rpmio.h rpmio-stub.h rpmlog.h rpmmacro.h rpmmg.h rpmnss.h rpmpgp.h \
- rpmsq.h rpmssl.h rpmsw.h rpmurl.h rpmxar.h stringbuf.h ugid.h rpmuuid.h
+ argv.h envvar.h fts.h mire.h rpmbc.h rpmcb.h rpmdav.h \
+ rpmhash.h rpmio.h rpmio-stub.h rpmlog.h rpmmacro.h rpmmg.h \
+ rpmnss.h rpmpgp.h rpmsq.h rpmssl.h rpmsw.h rpmurl.h rpmxar.h \
+ stringbuf.h ugid.h rpmuuid.h
noinst_HEADERS = \
- md2.h md4.h rmd128.h rmd160.h rmd256.h rmd320.h sha224.h \
+ md2.h md4.h poptIO.h rmd128.h rmd160.h rmd256.h rmd320.h sha224.h \
salsa10.h salsa20.h tiger.h \
LzmaDecode.h rpmhook.h rpmio_internal.h rpmlua.h
@@ -52,7 +53,7 @@
usrlib_LTLIBRARIES = librpmio.la
librpmio_la_SOURCES = \
argv.c digest.c fts.c getpass.c macro.c mire.c mount.c \
- md2.c md4.c rmd128.c rmd160.c rmd256.c rmd320.c sha224.c \
+ md2.c md4.c poptIO.c rmd128.c rmd160.c rmd256.c rmd320.c sha224.c \
salsa10.c salsa20.c tiger.c LzmaDecode.c \
rpmbc.c rpmdav.c rpmhash.c rpmhook.c rpmio.c rpmio-stub.c \
rpmlog.c rpmlua.c rpmmalloc.c rpmmg.c rpmnss.c rpmpgp.c \
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/poptIO.c
============================================================================
$ cvs diff -u -r0 -r1.1 poptIO.c
--- /dev/null 2008-02-09 21:11:00 +0100
+++ poptIO.c 2008-02-09 21:12:20 +0100
@@ -0,0 +1,538 @@
+/** \ingroup rpmio
+ * \file rpmio/poptIO.c
+ * Popt tables for all rpmio-only executables.
+ */
+
+#include "system.h"
+const char *__progname;
+
+#include <poptIO.h>
+
+#define _RPMPGP_INTERNAL
+#if defined(WITH_BEECRYPT)
+#define _RPMBC_INTERNAL
+#include <rpmbc.h>
+#endif
+#if defined(WITH_GCRYPT)
+#define _RPMGC_INTERNAL
+#include <rpmgc.h>
+#endif
+#if defined(WITH_NSS)
+#define _RPMNSS_INTERNAL
+#include <rpmnss.h>
+#endif
+#if defined(WITH_SSL)
+#define _RPMSSL_INTERNAL
+#include <rpmssl.h>
+#endif
+
+#include "debug.h"
+
+#define POPT_SHOWVERSION -999
+#define POPT_UNDEFINE -994
+#define POPT_CRYPTO -993
+
+/*@unchecked@*/
+static int _debug = 0;
+
+#ifdef NOTYET
+/*@unchecked@*/
+extern int _cpio_debug;
+
+/*@unchecked@*/
+extern int _tar_debug;
+#endif
+
+/*@unchecked@*/
+extern int _mire_debug;
+
+/*@unchecked@*/
+extern int _rpmmg_debug;
+
+/*@unchecked@*/
+extern int _rpmsq_debug;
+
+/*@unchecked@*/
+extern int _xar_debug;
+
+/*@unchecked@*/
+extern int noLibio;
+/*@=exportheadervar@*/
+
+/*@unchecked@*/ /*@null@*/
+const char * rpmioPipeOutput = NULL;
+
+/*@unchecked@*/
+const char * rpmioRootDir = "/";
+
+/*@observer@*/ /*@unchecked@*/
+const char *rpmioEVR = VERSION;
+
+/*@-exportheadervar@*/
+/*@unchecked@*/
+extern int _ftp_debug;
+/*@unchecked@*/
+extern int _av_debug;
+/*@unchecked@*/
+extern int _dav_debug;
+
+/*@unchecked@*/
+extern int noLibio;
+
+/*@unchecked@*/
+extern int _rpmio_debug;
+/*@=exportheadervar@*/
+
+/*@unchecked@*/
+static int rpmioInitialized = -1;
+
+#if defined(RPM_VENDOR_OPENPKG) /* support-rpmlua-option */
+#ifdef WITH_LUA
+/*@unchecked@*/
+extern const char *rpmluaFiles;
+#endif
+#endif
+
+#if defined(RPM_VENDOR_OPENPKG) /* support-rpmpopt-option */
+/*@unchecked@*/
+static char *rpmpoptfiles = RPMPOPTFILES;
+#endif
+
+/**
+ * Display rpm version.
+ */
+static void printVersion(FILE * fp)
+ /*@globals rpmEVR, fileSystem @*/
+ /*@modifies *fp, fileSystem @*/
+{
+ fprintf(fp, _("%s (" RPM_NAME ") %s\n"), __progname, rpmioEVR);
+}
+
+void rpmioConfigured(void)
+ /*@globals rpmioInitialized, rpmCLIMacroContext, rpmGlobalMacroContext,
+ h_errno, fileSystem, internalState @*/
+ /*@modifies rpmioInitialized, rpmCLIMacroContext, rpmGlobalMacroContext,
+ fileSystem, internalState @*/
+{
+
+ if (rpmioInitialized < 0) {
+ /* XXX TODO: add initialization side-effects. */
+ rpmioInitialized = 0;
+ }
+ if (rpmioInitialized)
+ exit(EXIT_FAILURE);
+}
+
+/**
+ */
+static void rpmioAllArgCallback(poptContext con,
+ /*@unused@*/ enum poptCallbackReason reason,
+ const struct poptOption * opt, const char * arg,
+ /*@unused@*/ const void * data)
+ /*@globals rpmioTargets, rpmioQueryFlags, rpmCLIMacroContext,
+ rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
+ /*@modifies con, rpmioTargets, rpmioQueryFlags, rpmCLIMacroContext,
+ rpmGlobalMacroContext, fileSystem, internalState @*/
+{
+
+ /* XXX avoid accidental collisions with POPT_BIT_SET for flags */
+ if (opt->arg == NULL)
+ switch (opt->val) {
+ case 'q':
+ rpmSetVerbosity(RPMLOG_WARNING);
+ break;
+ case 'v':
+ rpmIncreaseVerbosity();
+ break;
+ case 'D':
+ { char *s, *t;
+ /* XXX Convert '-' in macro name to underscore, skip leading %. */
+ s = t = xstrdup(arg);
+ while (*t && !xisspace(*t)) {
+ if (*t == '-') *t = '_';
+ t++;
+ }
+ t = s;
+ if (*t == '%') t++;
+ rpmioConfigured();
+/*@-type@*/
+ /* XXX adding macro to global context isn't Right Thing Todo. */
+ (void) rpmDefineMacro(NULL, t, RMIL_CMDLINE);
+ (void) rpmDefineMacro(rpmCLIMacroContext, t, RMIL_CMDLINE);
+/*@=type@*/
+ s = _free(s);
+ } break;
+ case POPT_UNDEFINE:
+ { char *s, *t;
+ /* XXX Convert '-' in macro name to underscore, skip leading %. */
+ s = t = xstrdup(arg);
+ while (*t && !xisspace(*t)) {
+ if (*t == '-') *t = '_';
+ t++;
+ }
+ t = s;
+ if (*t == '%') t++;
+/*@-type@*/
+ rpmioConfigured();
+ (void) rpmUndefineMacro(NULL, t);
+ (void) rpmUndefineMacro(rpmCLIMacroContext, t);
+/*@=type@*/
+ s = _free(s);
+ } break;
+ case POPT_CRYPTO:
+ rpmioConfigured();
+ { const char *val = rpmExpand(arg, NULL);
+#if defined(WITH_BEECRYPT)
+ if (!xstrcasecmp(val, "beecrypt") || !xstrcasecmp(val, "bc"))
+ pgpImplVecs = &rpmbcImplVecs;
+#endif
+#if defined(WITH_GCRYPT)
+ if (!xstrcasecmp(val, "gcrypt") || !xstrcasecmp(val, "gc"))
+ pgpImplVecs = &rpmgcImplVecs;
+#endif
+#if defined(WITH_NSS)
+ if (!xstrcasecmp(val, "NSS"))
+ pgpImplVecs = &rpmnssImplVecs;
+#endif
+#if defined(WITH_SSL)
+ if (!xstrcasecmp(val, "OpenSSL") || !xstrcasecmp(val, "ssl"))
+ pgpImplVecs = &rpmsslImplVecs;
+#endif
+ val = _free(val);
+ }
+ break;
+ case 'E':
+ rpmioConfigured();
+ { const char *val = rpmExpand(arg, NULL);
+#if defined(RPM_VENDOR_OPENPKG) /* no-extra-terminating-newline-on-eval */
+ size_t val_len;
+ val_len = strlen(val);
+ if (val[val_len - 1] == '\n')
+ fwrite(val, val_len, 1, stdout);
+ else
+#endif
+ fprintf(stdout, "%s\n", val);
+ val = _free(val);
+ }
+ break;
+ case POPT_SHOWVERSION:
+ printVersion(stdout);
+/*@i@*/ con = rpmioFini(con);
+ exit(EXIT_SUCCESS);
+ /*@notreached@*/ break;
+ }
+}
+
+/*@unchecked@*/
+int rpmioFtsOpts = 0;
+
+/*@unchecked@*/
+struct poptOption rpmioFtsPoptTable[] = {
+ { "comfollow", '\0', POPT_BIT_SET, &rpmioFtsOpts, FTS_COMFOLLOW,
+ N_("FTS_COMFOLLOW: follow command line symlinks"), NULL },
+ { "logical", '\0', POPT_BIT_SET, &rpmioFtsOpts, FTS_LOGICAL,
+ N_("FTS_LOGICAL: logical walk"), NULL },
+ { "nochdir", '\0', POPT_BIT_SET, &rpmioFtsOpts, FTS_NOCHDIR,
+ N_("FTS_NOCHDIR: don't change directories"), NULL },
+ { "nostat", '\0', POPT_BIT_SET, &rpmioFtsOpts, FTS_NOSTAT,
+ N_("FTS_NOSTAT: don't get stat info"), NULL },
+ { "physical", '\0', POPT_BIT_SET, &rpmioFtsOpts, FTS_PHYSICAL,
+ N_("FTS_PHYSICAL: physical walk"), NULL },
+ { "seedot", '\0', POPT_BIT_SET, &rpmioFtsOpts, FTS_SEEDOT,
+ N_("FTS_SEEDOT: return dot and dot-dot"), NULL },
+ { "xdev", '\0', POPT_BIT_SET, &rpmioFtsOpts, FTS_XDEV,
+ N_("FTS_XDEV: don't cross devices"), NULL },
+ { "whiteout", '\0', POPT_BIT_SET, &rpmioFtsOpts, FTS_WHITEOUT,
+ N_("FTS_WHITEOUT: return whiteout information"), NULL },
+ POPT_TABLEEND
+};
+
+/*@-bitwisesigned -compmempass @*/
+/*@unchecked@*/
+struct poptOption rpmioAllPoptTable[] = {
+/*@-type@*/ /* FIX: cast? */
+ { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE,
+ rpmioAllArgCallback, 0, NULL, NULL },
+/*@=type@*/
+
+ { "debug", 'd', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_debug, -1,
+ NULL, NULL },
+
+ { "define", 'D', POPT_ARG_STRING, NULL, 'D',
+ N_("define MACRO with value EXPR"),
+ N_("'MACRO EXPR'") },
+ { "undefine", '\0', POPT_ARG_STRING, NULL, POPT_UNDEFINE,
+ N_("undefine MACRO"),
+ N_("'MACRO'") },
+ { "eval", 'E', POPT_ARG_STRING, NULL, 'E',
+ N_("print macro expansion of EXPR"),
+ N_("'EXPR'") },
+
+#ifdef NOTYET
+ { "macros", '\0', POPT_ARG_STRING, &rpmMacrofiles, 0,
+ N_("read <FILE:...> instead of default file(s)"),
+ N_("<FILE:...>") },
+#if defined(RPM_VENDOR_OPENPKG) /* support-rpmlua-option */
+#ifdef WITH_LUA
+ { "rpmlua", '\0', POPT_ARG_STRING, &rpmluaFiles, 0,
+ N_("read <FILE:...> instead of default RPM Lua file(s)"),
+ N_("<FILE:...>") },
+#endif
+#endif
+#if defined(RPM_VENDOR_OPENPKG) /* support-rpmpopt-option */
+ { "rpmpopt", '\0', POPT_ARG_STRING, NULL, 0,
+ N_("read <FILE:...> instead of default POPT file(s)"),
+ N_("<FILE:...>") },
+#endif
+#endif /* NOTYET */
+
+#if defined(HAVE_LIBIO_H) && defined(_G_IO_IO_FILE_VERSION)
+ { "nolibio", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &noLibio, 1,
+ N_("disable use of libio(3) API"), NULL},
+#endif
+
+ { "pipe", '\0', POPT_ARG_STRING|POPT_ARGFLAG_DOC_HIDDEN, &rpmioPipeOutput, 0,
+ N_("send stdout to CMD"),
+ N_("CMD") },
+ { "root", 'r', POPT_ARG_STRING|POPT_ARGFLAG_SHOW_DEFAULT, &rpmioRootDir, 0,
+ N_("use ROOT as top level directory"),
+ N_("ROOT") },
+
+ { "quiet", '\0', 0, NULL, 'q',
+ N_("provide less detailed output"), NULL},
+ { "verbose", 'v', 0, NULL, 'v',
+ N_("provide more detailed output"), NULL},
+ { "version", '\0', 0, NULL, POPT_SHOWVERSION,
+ N_("print the version of rpm being used"), NULL },
+
+#if defined(HAVE_LIBIO_H) && defined(_G_IO_IO_FILE_VERSION)
+ { "nolibio", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &noLibio, 1,
+ N_("disable use of libio(3) API"), NULL},
+#endif
+
+ { "usecrypto",'\0', POPT_ARG_STRING|POPT_ARGFLAG_DOC_HIDDEN, NULL, POPT_CRYPTO,
+ N_("select cryptography implementation"),
+ N_("CRYPTO") },
+
+ { "avdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_av_debug, -1,
+ N_("debug argv collections"), NULL},
+#ifdef NOTYET
+ { "cpiodebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_cpio_debug, -1,
+ N_("debug cpio payloads"), NULL},
+#endif
+ { "davdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_dav_debug, -1,
+ N_("debug WebDAV data stream"), NULL},
+ { "ftpdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_ftp_debug, -1,
+ N_("debug FTP/HTTP data stream"), NULL},
+ { "miredebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_mire_debug, -1,
+ NULL, NULL},
+#ifdef DYING
+ { "poptdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_popt_debug, -1,
+ N_("debug option/argument processing"), NULL},
+#endif
+ { "rpmiodebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmio_debug, -1,
+ N_("debug rpmio I/O"), NULL},
+ { "rpmmgdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmmg_debug, -1,
+ NULL, NULL},
+ { "rpmsqdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmsq_debug, -1,
+ NULL, NULL},
+ { "xardebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_xar_debug, -1,
+ NULL, NULL},
+#ifdef NOTYET
+ { "tardebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_tar_debug, -1,
+ N_("debug tar payloads"), NULL},
+ { "stats", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmts_stats, -1,
+ NULL, NULL},
+#endif
+ { "urldebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_url_debug, -1,
+ N_("debug URL cache handling"), NULL},
+
+ POPT_TABLEEND
+};
+/*@=bitwisesigned =compmempass @*/
+
+poptContext
+rpmioFini(poptContext optCon)
+{
+ /* XXX this should be done in the rpmioClean() wrapper. */
+ /* keeps memory leak checkers quiet */
+ rpmFreeMacros(NULL);
+/*@i@*/ rpmFreeMacros(rpmCLIMacroContext);
+
+ rpmioClean();
+
+ optCon = poptFreeContext(optCon);
+
+#if defined(HAVE_MCHECK_H) && defined(HAVE_MTRACE)
+ /*@-noeffect@*/
+ muntrace(); /* Trace malloc only if MALLOC_TRACE=mtrace-output-file. */
+ /*@=noeffect@*/
+#endif
+
+ return NULL;
+}
+
+static inline int checkfd(const char * devnull, int fdno, int flags)
+{
+ struct stat sb;
+ int ret = 0;
+
+ if (fstat(fdno, &sb) == -1 && errno == EBADF)
+ ret = (open(devnull, flags) == fdno) ? 1 : 2;
+ return ret;
+}
+
+/*@-globstate@*/
+poptContext
+rpmioInit(int argc, char *const argv[], struct poptOption * optionsTable)
+{
+ poptContext optCon;
+#ifdef NOTYET
+ char *path_buf, *path, *path_next;
+#endif
+ int rc;
+#if defined(RPM_VENDOR_OPENPKG) /* support-rpmpopt-option */
+ int i;
+#endif
+
+#if defined(HAVE_MCHECK_H) && defined(HAVE_MTRACE)
+ /*@-noeffect@*/
+ mtrace(); /* Trace malloc only if MALLOC_TRACE=mtrace-output-file. */
+ /*@=noeffect@*/
+#endif
+/*@-globs -mods@*/
+ setprogname(argv[0]); /* Retrofit glibc __progname */
+
+ /* XXX glibc churn sanity */
+ if (__progname == NULL) {
+ if ((__progname = strrchr(argv[0], '/')) != NULL) __progname++;
+ else __progname = argv[0];
+ }
+/*@=globs =mods@*/
+
+ /* Insure that stdin/stdout/stderr are open, lest stderr end up in rpmdb. */
+ { static const char _devnull[] = "/dev/null";
+#if defined(STDIN_FILENO)
+ (void) checkfd(_devnull, STDIN_FILENO, O_RDONLY);
+#endif
+#if defined(STDOUT_FILENO)
+ (void) checkfd(_devnull, STDOUT_FILENO, O_WRONLY);
+#endif
+#if defined(STDERR_FILENO)
+ (void) checkfd(_devnull, STDERR_FILENO, O_WRONLY);
+#endif
+ }
+
+#if defined(ENABLE_NLS) && !defined(__LCLINT__)
+ (void) setlocale(LC_ALL, "" );
+ (void) bindtextdomain(PACKAGE, LOCALEDIR);
+ (void) textdomain(PACKAGE);
+#endif
+
+ rpmSetVerbosity(RPMLOG_NOTICE);
+
+ if (optionsTable == NULL) {
+ /* Read rpm configuration (if not already read). */
+ rpmioConfigured();
+ return NULL;
+ }
+
+/*@-nullpass -temptrans@*/
+ optCon = poptGetContext(__progname, argc, (const char **)argv, optionsTable, 0);
+/*@=nullpass =temptrans@*/
+
+#ifdef NOTYET
+ /* read all RPM POPT configuration files */
+#if defined(RPM_VENDOR_OPENPKG) /* support-rpmpopt-option */
+ for (i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "--rpmpopt") == 0 && i+1 < argc) {
+ rpmpoptfiles = argv[i+1];
+ break;
+ }
+ else if (strncmp(argv[i], "--rpmpopt=", 10) == 0) {
+ rpmpoptfiles = argv[i]+10;
+ break;
+ }
+ }
+ path_buf = xstrdup(rpmpoptfiles);
+#else
+ path_buf = xstrdup(RPMPOPTFILES);
+#endif
+ for (path = path_buf; path != NULL && *path != '\0'; path = path_next) {
+ const char **av;
+ int ac, i;
+
+ /* locate start of next path element */
+ path_next = strchr(path, ':');
+ if (path_next != NULL && *path_next == ':')
+ *path_next++ = '\0';
+ else
+ path_next = path + strlen(path);
+
+ /* glob-expand the path element */
+ ac = 0;
+ av = NULL;
+ if ((i = rpmGlob(path, &ac, &av)) != 0)
+ continue;
+
+ /* work-off each resulting file from the path element */
+ for (i = 0; i < ac; i++) {
+ const char *fn = av[i];
+#if defined(RPM_VENDOR_OPENPKG) /* security-sanity-check-rpmpopt-and-rpmmacros */
+ if (fn[0] == '@' /* attention */) {
+ fn++;
+ if (!rpmSecuritySaneFile(fn)) {
+ rpmlog(RPMLOG_WARNING, "existing POPT configuration file \"%s\" considered INSECURE -- not loaded\n", fn);
+ continue;
+ }
+ }
+#endif
+ (void)poptReadConfigFile(optCon, fn);
+ av[i] = _free(av[i]);
+ }
+ av = _free(av);
+ }
+ path_buf = _free(path_buf);
+
+ /* read standard POPT configuration files */
+ (void) poptReadDefaultConfig(optCon, 1);
+
+ poptSetExecPath(optCon, USRLIBRPM, 1);
+#endif /* NOTYET */
+
+ /* Process all options, whine if unknown. */
+ while ((rc = poptGetNextOpt(optCon)) > 0) {
+ const char * optArg = poptGetOptArg(optCon);
+ optArg = _free(optArg);
+ switch (rc) {
+ default:
+/*@-nullpass@*/
+ fprintf(stderr, _("%s: option table misconfigured (%d)\n"),
+ __progname, rc);
+/*@=nullpass@*/
+ exit(EXIT_FAILURE);
+
+ /*@notreached@*/ /*@switchbreak@*/ break;
+ }
+ }
+
+ if (rc < -1) {
+/*@-nullpass@*/
+ fprintf(stderr, "%s: %s: %s\n", __progname,
+ poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
+ poptStrerror(rc));
+/*@=nullpass@*/
+ exit(EXIT_FAILURE);
+ }
+
+ /* Read rpm configuration (if not already read). */
+ rpmioConfigured();
+
+ if (_debug) {
+ rpmIncreaseVerbosity();
+ rpmIncreaseVerbosity();
+ }
+
+ return optCon;
+}
+/*@=globstate@*/
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/poptIO.h
============================================================================
$ cvs diff -u -r0 -r1.1 poptIO.h
--- /dev/null 2008-02-09 21:11:00 +0100
+++ poptIO.h 2008-02-09 21:12:20 +0100
@@ -0,0 +1,82 @@
+#ifndef H_POPTIO
+#define H_POPTIO
+
+/** \ingroup rpmio
+ * \file rpmio/poptIO.h
+ */
+
+#include <rpmio.h>
+#include <rpmmacro.h>
+#include <rpmcb.h>
+#include <rpmmg.h>
+#include <rpmurl.h>
+#include <argv.h>
+#include <fts.h>
+#include <mire.h>
+#include <popt.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \ingroup rpmio
+ * Popt option table for options shared by all modes and executables.
+ */
+/*@unchecked@*/
+extern struct poptOption rpmioAllPoptTable[];
+
+/*@unchecked@*/
+extern int rpmioFtsOpts;
+
+/*@unchecked@*/
+extern struct poptOption rpmioFtsPoptTable[];
+
+/*@unchecked@*/ /*@observer@*/ /*@null@*/
+extern const char * rpmioPipeOutput;
+
+/*@unchecked@*/ /*@observer@*/ /*@null@*/
+extern const char * rpmioRootDir;
+
+/**
+ * Initialize most everything needed by an rpmio executable context.
+ * @param argc no. of args
+ * @param argv arg array
+ * @param optionsTable popt option table
+ * @return popt context (or NULL)
+ */
+/*@null@*/
+poptContext
+rpmioInit(int argc, char *const argv[], struct poptOption * optionsTable)
+ /*@globals rpmCLIMacroContext, rpmGlobalMacroContext, h_errno, stderr,
+ fileSystem, internalState @*/
+ /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext, stderr,
+ fileSystem, internalState @*/;
+
+/**
+ * Make sure that rpm configuration has been read.
+ * @warning Options like --rcfile and --verbose must precede callers option.
+ */
+/*@mayexit@*/
+void rpmioConfigured(void)
+ /*@globals rpmCLIMacroContext,
+ rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
+ /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext,
+ fileSystem, internalState @*/;
+
+/**
+ * Destroy most everything needed by an rpm CLI executable context.
+ * @param optCon popt context
+ * @return NULL always
+ */
+poptContext
+rpmioFini(/*@only@*/ /*@null@*/ poptContext optCon)
+ /*@globals rpmGlobalMacroContext,
+ fileSystem, internalState @*/
+ /*@modifies optCon, rpmGlobalMacroContext,
+ fileSystem, internalState @*/;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_POPTIO */
@@ .
Received on Sat Feb 9 21:12:20 2008