RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   02-Mar-2008 01:22:03
  Branch: HEAD                             Handle: 2008030200220200

  Modified files:
    rpm/build               rpmspec.h spec.c
    rpm/lib                 fsm.h
    rpm/rpmio               ar.c ar.h getpass.c librpmio.vers rpmdav.c
                            rpmdav.h rpmio.c rpmrpc.c

  Log:
    - jbj: splint fiddles.
    - jbj: don't include <rpmlib.h> in ar.c.
    - jbj: add avContext to accumulate argv container elements.

  Summary:
    Revision    Changes     Path
    2.74        +2  -2      rpm/build/rpmspec.h
    2.182       +6  -5      rpm/build/spec.c
    2.35        +1  -1      rpm/lib/fsm.h
    1.6         +38 -24     rpm/rpmio/ar.c
    1.2         +3  -3      rpm/rpmio/ar.h
    1.9         +2  -2      rpm/rpmio/getpass.c
    2.55        +3  -1      rpm/rpmio/librpmio.vers
    2.63        +178 -143   rpm/rpmio/rpmdav.c
    2.25        +47 -9      rpm/rpmio/rpmdav.h
    1.123       +2  -2      rpm/rpmio/rpmio.c
    2.71        +9  -67     rpm/rpmio/rpmrpc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/build/rpmspec.h
  ============================================================================
  $ cvs diff -u -r2.73 -r2.74 rpmspec.h
  --- rpm/build/rpmspec.h       18 Feb 2008 00:40:45 -0000      2.73
  +++ rpm/build/rpmspec.h       2 Mar 2008 00:22:02 -0000       2.74
  @@ -293,10 +293,10 @@
    * @return           0 on success
    */
   int addSource(Spec spec, Package pkg, const char * field, rpmTag tag)
  -     /[EMAIL PROTECTED] rpmGlobalMacroContext, h_errno @*/
  +     /[EMAIL PROTECTED] rpmGlobalMacroContext, h_errno, fileSystem @*/
        /[EMAIL PROTECTED] spec->sources, spec->numSources,
                spec->st, spec->macros,
  -             rpmGlobalMacroContext @*/;
  +             rpmGlobalMacroContext, fileSystem @*/;
   
   /** \ingroup rpmbuild
    * parseNoSource.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/spec.c
  ============================================================================
  $ cvs diff -u -r2.181 -r2.182 spec.c
  --- rpm/build/spec.c  27 Feb 2008 07:52:52 -0000      2.181
  +++ rpm/build/spec.c  2 Mar 2008 00:22:02 -0000       2.182
  @@ -22,8 +22,7 @@
   #define SKIPWHITE(_x)        {while(*(_x) && (xisspace(*_x) || *(_x) == 
',')) (_x)++;}
   #define SKIPNONWHITE(_x){while(*(_x) &&!(xisspace(*_x) || *(_x) == ',')) 
(_x)++;}
   
  -/[EMAIL PROTECTED] Header @*/        /* compared with NULL */
  -/[EMAIL PROTECTED] rpmfi @*/ /* compared with NULL */
  +/[EMAIL PROTECTED] rpmluav @*/
   
   /**
    * @param p          trigger entry chain
  @@ -177,7 +176,7 @@
       pkg->ds = rpmdsFree(pkg->ds);
       pkg->fileList = freeStringBuf(pkg->fileList);
       pkg->fileFile = _free(pkg->fileFile);
  -    if (pkg->cpioList) {
  +    if (pkg->cpioList != NULL) {
        rpmfi fi = pkg->cpioList;
        pkg->cpioList = NULL;
        fi = rpmfiFree(fi);
  @@ -406,7 +405,9 @@
        rpmluavSetListMode(var, 1);
        rpmluavSetValue(var, RPMLUAV_STRING, body);
        rpmluaSetVar(lua, var);
  -     var = rpmluavFree(var);
  +/[EMAIL PROTECTED]@*/
  +     var = (rpmluav) rpmluavFree(var);
  +/[EMAIL PROTECTED]@*/
        rpmluaPop(lua);
       }
   #endif
  @@ -575,7 +576,7 @@
       spec->sourcePkgId = _free(spec->sourcePkgId);
       spec->sourceHeader = headerFree(spec->sourceHeader);
   
  -    if (spec->sourceCpioList) {
  +    if (spec->sourceCpioList != NULL) {
        rpmfi fi = spec->sourceCpioList;
        spec->sourceCpioList = NULL;
        fi = rpmfiFree(fi);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/fsm.h
  ============================================================================
  $ cvs diff -u -r2.34 -r2.35 fsm.h
  --- rpm/lib/fsm.h     1 Mar 2008 04:13:23 -0000       2.34
  +++ rpm/lib/fsm.h     2 Mar 2008 00:22:02 -0000       2.35
  @@ -212,7 +212,7 @@
       int (*headerWrite) (FSM_t fsm, struct stat *st)
        /[EMAIL PROTECTED] fsm, st @*/;
       int (*trailerWrite) (FSM_t fsm)
  -     /[EMAIL PROTECTED] fsm, st @*/;
  +     /[EMAIL PROTECTED] fsm @*/;
   
       char * lmtab;            /*!< ar(1) long member name table. */
       size_t lmtablen;         /*!< ar(1) no. bytes in lmtab. */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/ar.c
  ============================================================================
  $ cvs diff -u -r1.5 -r1.6 ar.c
  --- rpm/rpmio/ar.c    1 Mar 2008 16:17:20 -0000       1.5
  +++ rpm/rpmio/ar.c    2 Mar 2008 00:22:02 -0000       1.6
  @@ -5,12 +5,21 @@
   
   #include "system.h"
   
  -#include <rpmio_internal.h>  /* XXX fdGetCpioPos AR_MAGIC */
  -#include <rpmlib.h>
  +#include <rpmio_internal.h>  /* XXX fdGetCpioPos writing AR_MAGIC */
   
  -#include "ar.h"
  -#include "fsm.h"
  -#include "ugid.h"
  +#include <ar.h>
  +#include <rpmmacro.h>
  +#include <ugid.h>
  +
  +/* XXX no <rpmlib.h> here */
  +typedef /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ struct rpmts_s * rpmts;
  +typedef /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ struct rpmfi_s * rpmfi;
  +typedef /[EMAIL PROTECTED]@*/ struct fsmIterator_s * FSMI_t;
  +typedef /[EMAIL PROTECTED]@*/ struct fsm_s * FSM_t;
  +
  +#include "../rpmdb/rpmtag.h"
  +#include "../lib/rpmfi.h"
  +#include "../lib/fsm.h"
   
   #include "debug.h"
   
  @@ -22,18 +31,21 @@
   /**
    *  * Vector to fsmNext.
    *   */
  +/[EMAIL PROTECTED]@*/
   int (*_fsmNext) (void * _fsm, int nstage)
           /[EMAIL PROTECTED] _fsm @*/;
  +/[EMAIL PROTECTED]@*/
   
   /**
    * Convert string to unsigned integer (with buffer size check).
    * @param str                input string
  - * @retval endptr    address of 1st character not processed
  + * @retval *endptr   1st character not processed
    * @param base               numerical conversion base
    * @param num                max no. of bytes to read
    * @return           converted integer
    */
  -static int strntoul(const char *str, /[EMAIL PROTECTED]@*/char **endptr, int 
base, int num)
  +static int strntoul(const char *str, /[EMAIL PROTECTED]@*/ /[EMAIL 
PROTECTED]@*/char **endptr,
  +             int base, size_t num)
        /[EMAIL PROTECTED] *endptr @*/
   {
       char * buf, * end;
  @@ -55,7 +67,8 @@
   }
   
   static ssize_t arRead(void * _fsm, void * buf, size_t count)
  -     /[EMAIL PROTECTED] _fsm, *buf @*/
  +     /[EMAIL PROTECTED] fileSystem @*/
  +     /[EMAIL PROTECTED] _fsm, *buf, fileSystem @*/
   {
       FSM_t fsm = _fsm;
       char * t = buf;
  @@ -85,7 +98,7 @@
   }
   
   int arHeaderRead(void * _fsm, struct stat * st)
  -     /[EMAIL PROTECTED] fsm, *st @*/
  +     /[EMAIL PROTECTED] _fsm, *st @*/
   {
       FSM_t fsm = _fsm;
       arHeader hdr = (arHeader) fsm->wrbuf;
  @@ -101,7 +114,7 @@
   
   top:
       rc = arRead(fsm, hdr, sizeof(*hdr));
  -    if (rc <= 0)     return -rc;
  +    if (rc <= 0)     return (int) -rc;
   if (_ar_debug)
   fprintf(stderr, "==> %p[%u] \"%.*s\"\n", hdr, (unsigned)rc, 
(int)sizeof(*hdr), (char *)hdr);
       rc = 0;
  @@ -117,10 +130,10 @@
        /* GNU: on "//":        Read long member name string table. */
        if (hdr->name[1] == '/' && hdr->name[2] == ' ') {
            char * t;
  -         int i;
  +         size_t i;
   
            rc = arRead(fsm, fsm->wrbuf, st->st_size);
  -         if (rc <= 0)        return -rc;
  +         if (rc <= 0)        return (int) -rc;
   
            fsm->wrbuf[rc] = '\0';
            fsm->lmtab = t = xstrdup(fsm->wrbuf);
  @@ -139,14 +152,14 @@
        /* GNU: on "/": Skip symbol table. */
        if (hdr->name[1] == ' ') {
            rc = arRead(fsm, fsm->wrbuf, st->st_size);
  -         if (rc <= 0)        return -rc;
  +         if (rc <= 0)        return (int) -rc;
            goto top;
        }
        /* GNU: on "/123": Read "123" offset to substitute long member name. */
  -     if (xisdigit(hdr->name[1])) {
  +     if (xisdigit((int)hdr->name[1])) {
            char * te = NULL;
            int i = strntoul(&hdr->name[1], &te, 10, sizeof(hdr->name)-2);
  -         if (*te == ' ' && fsm->lmtab != NULL && i < fsm->lmtablen)
  +         if (*te == ' ' && fsm->lmtab != NULL && i < (int)fsm->lmtablen)
                fsm->path = xstrdup(fsm->lmtab + i);
        }
       } else
  @@ -179,11 +192,12 @@
                   (int)st->st_uid, (int)st->st_gid, (int)st->st_size,
                   (fsm->path ? fsm->path : ""));
   
  -    return rc;
  +    return (int) rc;
   }
   
   static ssize_t arWrite(void * _fsm, const void *buf, size_t count)
  -     /[EMAIL PROTECTED] _fsm @*/
  +     /[EMAIL PROTECTED] fileSystem @*/
  +     /[EMAIL PROTECTED] _fsm, fileSystem @*/
   {
       FSM_t fsm = _fsm;
       const char * s = buf;
  @@ -227,29 +241,29 @@
        (void) arWrite(fsm, AR_MAGIC, sizeof(AR_MAGIC)-1);
        /* GNU: on "//":        Write long member name string table. */
        if (fsm->lmtab != NULL) {
  -         memset(hdr, ' ', sizeof(*hdr));
  +         memset(hdr, (int) ' ', sizeof(*hdr));
            hdr->name[0] = '/';
            hdr->name[1] = '/';
            sprintf(hdr->filesize, "%-10d", (unsigned) (fsm->lmtablen & 
037777777777));
            strncpy(hdr->marker, AR_MARKER, sizeof(AR_MARKER)-1);
   
  -         rc = arWrite(fsm, hdr, sizeof(*hdr));
  +         rc = (int) arWrite(fsm, hdr, sizeof(*hdr));
            if (rc < 0) return -rc;
  -         rc = arWrite(fsm, fsm->lmtab, fsm->lmtablen);
  +         rc = (int) arWrite(fsm, fsm->lmtab, fsm->lmtablen);
            if (rc < 0) return -rc;
            rc = _fsmNext(fsm, FSM_PAD);
            if (rc < 0) return -rc;
        }
       }
   
  -    memset(hdr, ' ', sizeof(*hdr));
  +    memset(hdr, (int)' ', sizeof(*hdr));
   
       nb = strlen(fsm->path);
       if (nb >= sizeof(hdr->name)) {
        const char * t = fsm->lmtab + fsm->lmtaboff;
        const char * te = strchr(t, '\n');
        /* GNU: on "/123": Write "/123" offset for long member name. */
  -     nb = snprintf(hdr->name, sizeof(hdr->name)-1, "/%u", fsm->lmtaboff);
  +     nb = snprintf(hdr->name, sizeof(hdr->name)-1, "/%u", 
(unsigned)fsm->lmtaboff);
        hdr->name[nb] = ' ';
        if (te != NULL)
            fsm->lmtaboff += (te - t) + 1;
  @@ -267,11 +281,11 @@
   
       strncpy(hdr->marker, AR_MARKER, sizeof(AR_MARKER)-1);
   
  -rc = sizeof(*hdr);
  +rc = (int) sizeof(*hdr);
   if (_ar_debug)
   fprintf(stderr, "==> %p[%u] \"%.*s\"\n", hdr, (unsigned)rc, 
(int)sizeof(*hdr), (char *)hdr);
   
  -    rc = arWrite(fsm, hdr, sizeof(*hdr));
  +    rc = (int) arWrite(fsm, hdr, sizeof(*hdr));
       if (rc < 0)      return -rc;
       rc = 0;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/ar.h
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 ar.h
  --- rpm/rpmio/ar.h    29 Feb 2008 19:25:37 -0000      1.1
  +++ rpm/rpmio/ar.h    2 Mar 2008 00:22:02 -0000       1.2
  @@ -44,7 +44,7 @@
    * @return           0 on success
    */
   int arTrailerWrite(void * _fsm)
  -     /[EMAIL PROTECTED] h_errno, fileSystem, internalState @*/
  +     /[EMAIL PROTECTED] fileSystem, internalState @*/
        /[EMAIL PROTECTED] _fsm, fileSystem, internalState @*/;
   
   /**
  @@ -54,7 +54,7 @@
    * @return           0 on success
    */
   int arHeaderWrite(void * _fsm, struct stat * st)
  -     /[EMAIL PROTECTED] h_errno, fileSystem, internalState @*/
  +     /[EMAIL PROTECTED] fileSystem, internalState @*/
        /[EMAIL PROTECTED] _fsm, fileSystem, internalState @*/;
   
   /**
  @@ -64,7 +64,7 @@
    * @return           0 on success
    */
   int arHeaderRead(void * _fsm, struct stat * st)
  -     /[EMAIL PROTECTED] h_errno, fileSystem, internalState @*/
  +     /[EMAIL PROTECTED] fileSystem, internalState @*/
        /[EMAIL PROTECTED] _fsm, *st, fileSystem, internalState @*/;
   
   #ifdef __cplusplus
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/getpass.c
  ============================================================================
  $ cvs diff -u -r1.8 -r1.9 getpass.c
  --- rpm/rpmio/getpass.c       6 Oct 2007 21:33:50 -0000       1.8
  +++ rpm/rpmio/getpass.c       2 Mar 2008 00:22:02 -0000       1.9
  @@ -36,7 +36,7 @@
   
   char * _RequestPass(/[EMAIL PROTECTED]@*/ const char * prompt)
   {
  -/[EMAIL PROTECTED]@*/
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
       static char * password = NULL;
   #if defined(HAVE_KEYUTILS_H)
       const char * foo = "user rpm:yyyy spoon";
  @@ -45,7 +45,7 @@
       key_serial_t dest = 0;
       key_serial_t key = 0;
   
  -    if (password) {
  +    if (password != NULL) {
        free(password);
        password = NULL;
       }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/librpmio.vers
  ============================================================================
  $ cvs diff -u -r2.54 -r2.55 librpmio.vers
  --- rpm/rpmio/librpmio.vers   1 Mar 2008 19:12:21 -0000       2.54
  +++ rpm/rpmio/librpmio.vers   2 Mar 2008 00:22:02 -0000       2.55
  @@ -27,8 +27,10 @@
       argvSort;
       argvSplit;
       argvStrcasecmp;
  -    avClosedir;
       _av_debug;
  +    avClosedir;
  +    avContextCreate;
  +    avContextDestroy;
       avmagicdir;
       avOpendir;
       avReaddir;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmdav.c
  ============================================================================
  $ cvs diff -u -r2.62 -r2.63 rpmdav.c
  --- rpm/rpmio/rpmdav.c        1 Mar 2008 19:12:21 -0000       2.62
  +++ rpm/rpmio/rpmdav.c        2 Mar 2008 00:22:02 -0000       2.63
  @@ -60,13 +60,13 @@
   
   #include <rpmio_internal.h>
   
  -#define _RPMDAV_INTERNAL
  -#include <rpmdav.h>
  -
   #include <rpmhash.h>
  -#include <argv.h>
   #include <ugid.h>
   
  +#define _RPMAV_INTERNAL
  +#define _RPMDAV_INTERNAL
  +#include <rpmdav.h>
  +
   #include "debug.h"
   
   /* Should http OPTIONS be run only once? */
  @@ -85,8 +85,180 @@
   /[EMAIL PROTECTED]@*/
   static int httpTimeoutSecs = TIMEOUT_SECS;
   
  -#ifdef WITH_NEON
  +/* =============================================================== */
  +void * avContextDestroy(avContext ctx)
  +{
  +    if (ctx == NULL)
  +     return NULL;
  +    if (ctx->av != NULL)
  +     ctx->av = argvFree(ctx->av);
  +    ctx->modes = _free(ctx->modes);
  +    ctx->sizes = _free(ctx->sizes);
  +    ctx->mtimes = _free(ctx->mtimes);
  +    ctx->u = urlFree(ctx->u, "avContextDestroy");
  +    ctx->uri = _free(ctx->uri);
  +    memset(ctx, 0, sizeof(*ctx));
  +    ctx = _free(ctx);
  +    return NULL;
  +}
  +
  +void * avContextCreate(const char *uri, struct stat *st)
  +{
  +    avContext ctx;
  +    urlinfo u;
  +
  +/[EMAIL PROTECTED]@*/        /* FIX: h_errno annoyance. */
  +    if (urlSplit(uri, &u))
  +     return NULL;
  +/[EMAIL PROTECTED]@*/
  +
  +    ctx = xcalloc(1, sizeof(*ctx));
  +    ctx->uri = xstrdup(uri);
  +    ctx->u = urlLink(u, "avContextCreate");
  +/[EMAIL PROTECTED]@*/        /* XXX note the assignment */
  +    if ((ctx->st = st) != NULL)
  +     memset(ctx->st, 0, sizeof(*ctx->st));
  +/[EMAIL PROTECTED]@*/
  +    return ctx;
  +}
  +
  +int avClosedir(/[EMAIL PROTECTED]@*/ DIR * dir)
  +{
  +    AVDIR avdir = (AVDIR)dir;
  +
  +if (_av_debug)
  +fprintf(stderr, "*** avClosedir(%p)\n", avdir);
  +
  +#if defined(HAVE_PTHREAD_H)
  +/[EMAIL PROTECTED] -noeffectuncon @*/
  +    (void) pthread_mutex_destroy(&avdir->lock);
  +/[EMAIL PROTECTED] =noeffectuncon @*/
  +#endif
  +
  +    avdir = _free(avdir);
  +    return 0;
  +}
  +
  +struct dirent * avReaddir(DIR * dir)
  +{
  +    AVDIR avdir = (AVDIR)dir;
  +    struct dirent * dp;
  +    const char ** av;
  +    unsigned char * dt;
  +    int ac;
  +    int i;
  +
  +    if (avdir == NULL || !ISAVMAGIC(avdir) || avdir->data == NULL) {
  +     /* XXX TODO: EBADF errno. */
  +     return NULL;
  +    }
  +
  +    dp = (struct dirent *) avdir->data;
  +    av = (const char **) (dp + 1);
  +    ac = (int)avdir->size;
  +    dt = (unsigned char *) (av + (ac + 1));
  +    i = avdir->offset + 1;
  +
  +    if (i < 0 || i >= ac || av[i] == NULL)
  +     return NULL;
  +
  +    avdir->offset = i;
  +
  +    /* XXX glob(3) uses REAL_DIR_ENTRY(dp) test on d_ino */
  +/[EMAIL PROTECTED]@*/
  +    /* Hash the name (starting with parent hash) for a d_ino analogue. */
  +    dp->d_ino = hashFunctionString(avdir->filepos, dp->d_name, 0);
  +
  +#if !defined(__DragonFly__) && !defined(__CYGWIN__)
  +    dp->d_reclen = 0;                /* W2DO? */
  +#endif
  +
  +#if !(defined(hpux) || defined(__hpux) || defined(sun) || 
defined(RPM_OS_AIX) || defined(__CYGWIN__) || defined(__QNXNTO__))
  +#if !defined(__APPLE__) && !defined(__FreeBSD_kernel__) && 
!defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
  +    dp->d_off = 0;           /* W2DO? */
  +#endif
  +    dp->d_type = dt[i];
  +#endif
  +/[EMAIL PROTECTED]@*/
  +
  +    strncpy(dp->d_name, av[i], sizeof(dp->d_name));
  +if (_av_debug)
  +fprintf(stderr, "*** avReaddir(%p) %p \"%s\"\n", (void *)avdir, dp, 
dp->d_name);
  +
  +    return dp;
  +}
  +
  +DIR * avOpendir(const char * path, const char ** av, mode_t * modes)
  +{
  +    AVDIR avdir;
  +    struct dirent * dp;
  +    size_t nb;
  +    const char ** nav;
  +    unsigned char * dt;
  +    char * t;
  +    int ac, nac;
  +
  +if (_av_debug)
  +fprintf(stderr, "*** avOpendir(%s, %p)\n", path, av);
  +
  +    nb = 0;
  +    ac = 0;
  +    if (av != NULL)
  +    while (av[ac] != NULL)
  +     nb += strlen(av[ac++]) + 1;
  +    ac += 2; /* for "." and ".." */
  +    nb += sizeof(".") + sizeof("..");
  +
  +    nb += sizeof(*avdir) + sizeof(*dp) + ((ac + 1) * sizeof(*av)) + (ac + 1);
  +    avdir = xcalloc(1, nb);
  +/[EMAIL PROTECTED]@*/
  +    dp = (struct dirent *) (avdir + 1);
  +    nav = (const char **) (dp + 1);
  +    dt = (unsigned char *) (nav + (ac + 1));
  +    t = (char *) (dt + ac + 1);
  +/[EMAIL PROTECTED]@*/
   
  +    avdir->fd = avmagicdir;
  +/[EMAIL PROTECTED]@*/
  +    avdir->data = (char *) dp;
  +/[EMAIL PROTECTED]@*/
  +    avdir->allocation = nb;
  +    avdir->size = ac;
  +    avdir->offset = -1;
  +    /* Hash the directory path for a d_ino analogue. */
  +    avdir->filepos = hashFunctionString(0, path, 0);
  +
  +#if defined(HAVE_PTHREAD_H)
  +/[EMAIL PROTECTED] -noeffectuncon -nullpass @*/
  +    (void) pthread_mutex_init(&avdir->lock, NULL);
  +/[EMAIL PROTECTED] =noeffectuncon =nullpass @*/
  +#endif
  +
  +    nac = 0;
  +    /[EMAIL PROTECTED] [EMAIL PROTECTED]/
  +    dt[nac] = (unsigned char)DT_DIR; nav[nac++] = t; t = stpcpy(t, "."); t++;
  +    dt[nac] = (unsigned char)DT_DIR; nav[nac++] = t; t = stpcpy(t, ".."); 
t++;
  +    /[EMAIL PROTECTED] [EMAIL PROTECTED]/
  +
  +    /* Append av strings to DIR elements. */
  +    ac = 0;
  +    if (av != NULL)
  +    while (av[ac] != NULL) {
  +     nav[nac] = t;
  +     dt[nac] = (unsigned char) (modes && S_ISDIR(modes[ac]) ? DT_DIR : 
DT_REG);
  +     t = stpcpy(t, av[ac]);
  +     t++;    /* trailing \0 */
  +     ac++;
  +     nac++;
  +    }
  +    nav[nac] = NULL;
  +
  +/[EMAIL PROTECTED]@*/
  +    return (DIR *) avdir;
  +/[EMAIL PROTECTED]@*/
  +}
  +
  +#ifdef WITH_NEON
   /* =============================================================== */
   void davDestroy(void)
   {
  @@ -1639,144 +1811,7 @@
   /[EMAIL PROTECTED]@*/
   #endif
   
  -int avClosedir(/[EMAIL PROTECTED]@*/ DIR * dir)
  -{
  -    AVDIR avdir = (AVDIR)dir;
  -
  -if (_av_debug)
  -fprintf(stderr, "*** avClosedir(%p)\n", avdir);
  -
  -#if defined(HAVE_PTHREAD_H)
  -/[EMAIL PROTECTED] -noeffectuncon @*/
  -    (void) pthread_mutex_destroy(&avdir->lock);
  -/[EMAIL PROTECTED] =noeffectuncon @*/
  -#endif
  -
  -    avdir = _free(avdir);
  -    return 0;
  -}
  -
  -struct dirent * avReaddir(DIR * dir)
  -{
  -    AVDIR avdir = (AVDIR)dir;
  -    struct dirent * dp;
  -    const char ** av;
  -    unsigned char * dt;
  -    int ac;
  -    int i;
  -
  -    if (avdir == NULL || !ISAVMAGIC(avdir) || avdir->data == NULL) {
  -     /* XXX TODO: EBADF errno. */
  -     return NULL;
  -    }
  -
  -    dp = (struct dirent *) avdir->data;
  -    av = (const char **) (dp + 1);
  -    ac = (int)avdir->size;
  -    dt = (unsigned char *) (av + (ac + 1));
  -    i = avdir->offset + 1;
  -
  -    if (i < 0 || i >= ac || av[i] == NULL)
  -     return NULL;
  -
  -    avdir->offset = i;
  -
  -    /* XXX glob(3) uses REAL_DIR_ENTRY(dp) test on d_ino */
  -/[EMAIL PROTECTED]@*/
  -    /* Hash the name (starting with parent hash) for a d_ino analogue. */
  -    dp->d_ino = hashFunctionString(avdir->filepos, dp->d_name, 0);
  -
  -#if !defined(__DragonFly__) && !defined(__CYGWIN__)
  -    dp->d_reclen = 0;                /* W2DO? */
  -#endif
  -
  -#if !(defined(hpux) || defined(__hpux) || defined(sun) || 
defined(RPM_OS_AIX) || defined(__CYGWIN__) || defined(__QNXNTO__))
  -#if !defined(__APPLE__) && !defined(__FreeBSD_kernel__) && 
!defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
  -    dp->d_off = 0;           /* W2DO? */
  -#endif
  -    dp->d_type = dt[i];
  -#endif
  -/[EMAIL PROTECTED]@*/
  -
  -    strncpy(dp->d_name, av[i], sizeof(dp->d_name));
  -if (_av_debug)
  -fprintf(stderr, "*** avReaddir(%p) %p \"%s\"\n", (void *)avdir, dp, 
dp->d_name);
  -
  -    return dp;
  -}
  -
  -DIR * avOpendir(const char * path, const char ** av, mode_t * modes)
  -{
  -    AVDIR avdir;
  -    struct dirent * dp;
  -    size_t nb;
  -    const char ** nav;
  -    unsigned char * dt;
  -    char * t;
  -    int ac, nac;
  -
  -if (_av_debug)
  -fprintf(stderr, "*** avOpendir(%s, %p)\n", path, av);
  -
  -    nb = 0;
  -    ac = 0;
  -    if (av != NULL)
  -    while (av[ac] != NULL)
  -     nb += strlen(av[ac++]) + 1;
  -    ac += 2; /* for "." and ".." */
  -    nb += sizeof(".") + sizeof("..");
  -
  -    nb += sizeof(*avdir) + sizeof(*dp) + ((ac + 1) * sizeof(*av)) + (ac + 1);
  -    avdir = xcalloc(1, nb);
  -/[EMAIL PROTECTED]@*/
  -    dp = (struct dirent *) (avdir + 1);
  -    nav = (const char **) (dp + 1);
  -    dt = (unsigned char *) (nav + (ac + 1));
  -    t = (char *) (dt + ac + 1);
  -/[EMAIL PROTECTED]@*/
  -
  -    avdir->fd = avmagicdir;
  -/[EMAIL PROTECTED]@*/
  -    avdir->data = (char *) dp;
  -/[EMAIL PROTECTED]@*/
  -    avdir->allocation = nb;
  -    avdir->size = ac;
  -    avdir->offset = -1;
  -    /* Hash the directory path for a d_ino analogue. */
  -    avdir->filepos = hashFunctionString(0, path, 0);
  -
  -#if defined(HAVE_PTHREAD_H)
  -/[EMAIL PROTECTED] -noeffectuncon -nullpass @*/
  -    (void) pthread_mutex_init(&avdir->lock, NULL);
  -/[EMAIL PROTECTED] =noeffectuncon =nullpass @*/
  -#endif
  -
  -    nac = 0;
  -    /[EMAIL PROTECTED] [EMAIL PROTECTED]/
  -    dt[nac] = (unsigned char)DT_DIR; nav[nac++] = t; t = stpcpy(t, "."); t++;
  -    dt[nac] = (unsigned char)DT_DIR; nav[nac++] = t; t = stpcpy(t, ".."); 
t++;
  -    /[EMAIL PROTECTED] [EMAIL PROTECTED]/
  -
  -    /* Append av strings to DIR elements. */
  -    ac = 0;
  -    if (av != NULL)
  -    while (av[ac] != NULL) {
  -     nav[nac] = t;
  -     dt[nac] = (unsigned char) (modes && S_ISDIR(modes[ac]) ? DT_DIR : 
DT_REG);
  -     t = stpcpy(t, av[ac]);
  -     t++;    /* trailing \0 */
  -     ac++;
  -     nac++;
  -    }
  -    nav[nac] = NULL;
  -
  -/[EMAIL PROTECTED]@*/
  -    return (DIR *) avdir;
  -/[EMAIL PROTECTED]@*/
  -}
  -
   #ifdef WITH_NEON
  -
   /* =============================================================== */
   int davClosedir(/[EMAIL PROTECTED]@*/ DIR * dir)
   {
  @@ -1817,7 +1852,7 @@
        return NULL;
       }
   
  -    avdir = avOpendir(path, ctx->av, ctx->modes);
  +    avdir = (AVDIR) avOpendir(path, ctx->av, ctx->modes);
   
       ctx = fetch_destroy_context(ctx);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmdav.h
  ============================================================================
  $ cvs diff -u -r2.24 -r2.25 rpmdav.h
  --- rpm/rpmio/rpmdav.h        1 Mar 2008 19:12:21 -0000       2.24
  +++ rpm/rpmio/rpmdav.h        2 Mar 2008 00:22:02 -0000       2.25
  @@ -5,6 +5,8 @@
    * \file rpmio/rpmdav.h
    */
   
  +#include <argv.h>
  +
   #if defined(_RPMDAV_INTERNAL)
   struct __dirstream {
       int fd;                  /* File descriptor.  */
  @@ -42,27 +44,50 @@
   #endif
   
   
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
  +
  +#if defined(_RPMAV_INTERNAL)
  +/**
  + */
  +typedef struct avContext_s * avContext;
  +
   /**
    */
   /[EMAIL PROTECTED]@*/
   extern int avmagicdir;
   #define ISAVMAGIC(_dir) (!memcmp((_dir), &avmagicdir, sizeof(avmagicdir)))
   
  -#ifdef __cplusplus
  -extern "C" {
  -#endif
  +/**
  + */
  +struct avContext_s {
  +    const char *uri;
  +/[EMAIL PROTECTED]@*/
  +    urlinfo u;
  +    int ac;
  +    int nalloced;
  +    ARGV_t av;
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +    struct stat *st;
  +    mode_t * modes;
  +    size_t * sizes;
  +    time_t * mtimes;
  +};
   
   /**
    */
  -int davFree(urlinfo u)
  -     /[EMAIL PROTECTED] internalState @*/
  -     /[EMAIL PROTECTED] u, internalState @*/;
  +/[EMAIL PROTECTED]@*/
  +void * avContextDestroy(/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ 
avContext ctx)
  +        /[EMAIL PROTECTED] internalState @*/
  +        /[EMAIL PROTECTED] ctx, internalState @*/;
   
   /**
    */
  -void davDestroy(void)
  -     /[EMAIL PROTECTED] internalState @*/
  -     /[EMAIL PROTECTED] internalState @*/;
  +/[EMAIL PROTECTED]@*/
  +void * avContextCreate(const char *uri, /[EMAIL PROTECTED]@*/ struct stat 
*st)
  +        /[EMAIL PROTECTED] internalState @*/
  +        /[EMAIL PROTECTED] *st, internalState @*/;
   
   /**
    * Close an argv directory.
  @@ -95,6 +120,19 @@
                /[EMAIL PROTECTED]@*/ const char ** av, /[EMAIL PROTECTED]@*/ 
mode_t * modes)
        /[EMAIL PROTECTED] fileSystem, internalState @*/
        /[EMAIL PROTECTED] fileSystem, internalState @*/;
  +#endif
  +
  +/**
  + */
  +int davFree(urlinfo u)
  +     /[EMAIL PROTECTED] internalState @*/
  +     /[EMAIL PROTECTED] u, internalState @*/;
  +
  +/**
  + */
  +void davDestroy(void)
  +     /[EMAIL PROTECTED] internalState @*/
  +     /[EMAIL PROTECTED] internalState @*/;
   
   /**
    * Send a http request.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio.c
  ============================================================================
  $ cvs diff -u -r1.122 -r1.123 rpmio.c
  --- rpm/rpmio/rpmio.c 17 Feb 2008 17:44:18 -0000      1.122
  +++ rpm/rpmio/rpmio.c 2 Mar 2008 00:22:02 -0000       1.123
  @@ -108,9 +108,9 @@
   #undef       fdClose
   #define      fdClose __fdClose
   
  +#include <ugid.h>
  +#include <rpmcb.h>
   #include <rpmdav.h>
  -#include "ugid.h"
  -#include "rpmcb.h"
   
   #include "debug.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmrpc.c
  ============================================================================
  $ cvs diff -u -r2.70 -r2.71 rpmrpc.c
  --- rpm/rpmio/rpmrpc.c        1 Mar 2008 22:11:13 -0000       2.70
  +++ rpm/rpmio/rpmrpc.c        2 Mar 2008 00:22:02 -0000       2.71
  @@ -6,8 +6,8 @@
   
   #include <rpmio_internal.h>
   #include <rpmmacro.h>
  -#include <argv.h>
   
  +#define      _RPMAV_INTERNAL
   #define      _RPMDAV_INTERNAL
   #include <rpmdav.h>
   
  @@ -944,64 +944,6 @@
        
   #define alloca_strdup(_s)       strcpy(alloca(strlen(_s)+1), (_s))
   
  -/* =============================================================== */
  -struct ftp_context_s {
  -    const char *uri;
  -/[EMAIL PROTECTED]@*/
  -    urlinfo u;
  -    int ac;
  -    int nalloced;
  -    ARGV_t av;
  -/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  -    struct stat *st;
  -    mode_t * modes;
  -    size_t * sizes;
  -    time_t * mtimes;
  -};
  -
  -/[EMAIL PROTECTED]@*/
  -static void *ftp_destroy_context(/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ 
struct ftp_context_s *ctx)
  -     /[EMAIL PROTECTED] internalState @*/
  -     /[EMAIL PROTECTED] ctx, internalState @*/
  -{
  -    if (ctx == NULL)
  -     return NULL;
  -    if (ctx->av != NULL)
  -     ctx->av = argvFree(ctx->av);
  -    ctx->modes = _free(ctx->modes);
  -    ctx->sizes = _free(ctx->sizes);
  -    ctx->mtimes = _free(ctx->mtimes);
  -    ctx->u = urlFree(ctx->u, "ftp_destroy_context");
  -    ctx->uri = _free(ctx->uri);
  -    memset(ctx, 0, sizeof(*ctx));
  -    ctx = _free(ctx);
  -    return NULL;
  -}
  -
  -/[EMAIL PROTECTED]@*/
  -static void *ftp_create_context(const char *uri, /[EMAIL PROTECTED]@*/ 
struct stat *st)
  -     /[EMAIL PROTECTED] internalState @*/
  -     /[EMAIL PROTECTED] *st, internalState @*/
  -{
  -    struct ftp_context_s * ctx;
  -    urlinfo u;
  -
  -/[EMAIL PROTECTED]@*/        /* FIX: h_errno annoyance. */
  -    if (urlSplit(uri, &u))
  -     return NULL;
  -/[EMAIL PROTECTED]@*/
  -
  -    ctx = xcalloc(1, sizeof(*ctx));
  -    ctx->uri = xstrdup(uri);
  -    ctx->u = urlLink(u, "ftp_create_context");
  -/[EMAIL PROTECTED]@*/        /* XXX note the assignment */
  -    if ((ctx->st = st) != NULL)
  -     memset(ctx->st, 0, sizeof(*ctx->st));
  -/[EMAIL PROTECTED]@*/
  -    return ctx;
  -}
  -/* =============================================================== */
  -
   static int ftpNLST(const char * url, ftpSysCall_t ftpSysCall,
                /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ struct stat * st,
                /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ char * rlbuf, 
size_t rlbufsiz)
  @@ -1269,11 +1211,11 @@
   
   /[EMAIL PROTECTED]@*/
   static DIR * ftpOpendir(const char * path)
  -     /[EMAIL PROTECTED] h_errno, fileSystem, internalState @*/
  -     /[EMAIL PROTECTED] fileSystem, internalState @*/
  +     /[EMAIL PROTECTED] h_errno, errno, fileSystem, internalState @*/
  +     /[EMAIL PROTECTED] errno, fileSystem, internalState @*/
   {
       AVDIR avdir;
  -    struct ftp_context_s * ctx;
  +    avContext ctx;
       struct stat * st = NULL;
       const char * s, * sb, * se;
       int nac;
  @@ -1284,7 +1226,7 @@
   fprintf(stderr, "*** ftpOpendir(%s)\n", path);
   
       /* Load FTP collection into argv. */
  -    ctx = ftp_create_context(path, st);
  +    ctx = avContextCreate(path, st);
       if (ctx == NULL) {
           errno = ENOENT;         /* Note: ctx is NULL iff urlSplit() fails. */
           return NULL;
  @@ -1348,9 +1290,9 @@
                for (sb = se; sb > s && sb[-1] != ' '; sb--)
                    {};
            }
  -         /[EMAIL PROTECTED]@*/
  +         /[EMAIL PROTECTED]@*/
            ctx->av[nac] = strndup(sb, (se-sb-1));
  -         /[EMAIL PROTECTED]@*/
  +         /[EMAIL PROTECTED]@*/
            nac++;
            if (*se == '\n') se++;
            sb = NULL;
  @@ -1361,9 +1303,9 @@
        }
       }
   
  -    avdir = avOpendir(path, ctx->av, ctx->modes);
  +    avdir = (AVDIR) avOpendir(path, ctx->av, ctx->modes);
   
  -    ctx = ftp_destroy_context(ctx);
  +    ctx = avContextDestroy(ctx);
   
   /[EMAIL PROTECTED]@*/
       return (DIR *) avdir;
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to