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]