RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/lib/ poptALL.c rpm/rpmio/ Makefile.am popt...

From: Jeff Johnson <jbj@rpm5.org>
Date: Sat 09 Feb 2008 - 21:12:20 CET
Message-Id: <20080209201220.BDF2D348489@rpm5.org>
  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
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.