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: 01-Mar-2008 19:39:03
Branch: HEAD Handle: 2008030118390300
Modified files:
rpm/rpmio rpmdav.c rpmdav.h
Log:
- jbj: prepare to refactor davOpendir => avOpendir.
Summary:
Revision Changes Path
2.61 +36 -17 rpm/rpmio/rpmdav.c
2.23 +6 -3 rpm/rpmio/rpmdav.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmdav.c
============================================================================
$ cvs diff -u -r2.60 -r2.61 rpmdav.c
--- rpm/rpmio/rpmdav.c 18 Feb 2008 16:55:29 -0000 2.60
+++ rpm/rpmio/rpmdav.c 1 Mar 2008 18:39:03 -0000 2.61
@@ -1705,27 +1705,33 @@
return dp;
}
-DIR * avOpendir(const char * path)
+DIR * avOpendir(const char * path, const char ** av, mode_t * modes)
{
AVDIR avdir;
struct dirent * dp;
- size_t nb = 0;
- const char ** av;
+ size_t nb;
+ const char ** nav;
unsigned char * dt;
char * t;
- int ac;
+ int ac, nac;
if (_av_debug)
-fprintf(stderr, "*** avOpendir(%s)\n", path);
- nb = sizeof(".") + sizeof("..");
- ac = 2;
+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);
- av = (const char **) (dp + 1);
- dt = (unsigned char *) (av + (ac + 1));
+ nav = (const char **) (dp + 1);
+ dt = (unsigned char *) (nav + (ac + 1));
t = (char *) (dt + ac + 1);
/[EMAIL PROTECTED]@*/
@@ -1745,13 +1751,24 @@
/[EMAIL PROTECTED] =noeffectuncon =nullpass @*/
#endif
- ac = 0;
+ nac = 0;
/[EMAIL PROTECTED] [EMAIL PROTECTED]/
- dt[ac] = (unsigned char)DT_DIR; av[ac++] = t; t = stpcpy(t, ".");
t++;
- dt[ac] = (unsigned char)DT_DIR; av[ac++] = t; t = stpcpy(t, "..");
t++;
+ 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]/
- av[ac] = NULL;
+ /* 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;
@@ -1833,14 +1850,16 @@
{
struct fetch_context_s * ctx;
struct stat sb, *st = &sb; /* XXX HACK: davHEAD needs ctx->st. */
+ const char ** av;
+ int rc;
+
DAVDIR avdir;
struct dirent * dp;
size_t nb;
- const char ** av, ** nav;
+ const char ** nav;
unsigned char * dt;
char * t;
int ac, nac;
- int rc;
if (_dav_debug < 0)
fprintf(stderr, "*** davOpendir(%s)\n", path);
@@ -1864,9 +1883,9 @@
return NULL;
}
+ av = ctx->av;
nb = 0;
ac = 0;
- av = ctx->av;
if (av != NULL)
while (av[ac] != NULL)
nb += strlen(av[ac++]) + 1;
@@ -1904,7 +1923,7 @@
dt[nac] = (unsigned char)DT_DIR; nav[nac++] = t; t = stpcpy(t, "..");
t++;
/[EMAIL PROTECTED] [EMAIL PROTECTED]/
- /* Copy DAV items into DIR elments. */
+ /* Append av strings to DIR elements. */
ac = 0;
if (av != NULL)
while (av[ac] != NULL) {
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmdav.h
============================================================================
$ cvs diff -u -r2.22 -r2.23 rpmdav.h
--- rpm/rpmio/rpmdav.h 1 Mar 2008 16:54:56 -0000 2.22
+++ rpm/rpmio/rpmdav.h 1 Mar 2008 18:39:03 -0000 2.23
@@ -90,12 +90,15 @@
/[EMAIL PROTECTED] fileSystem @*/;
/**
- * Create an argv directory from URL collection.
- * @param path URL for collection path
+ * Create an argv directory from an argv array.
+ * @param path directory path
+ * @param av argv array
+ * @param modes element modes (NULL will use pesky trailing '/')
* @return argv DIR
*/
/[EMAIL PROTECTED]@*/
-DIR * avOpendir(const char * path)
+DIR * avOpendir(const char * path,
+ /[EMAIL PROTECTED]@*/ const char ** av, /[EMAIL PROTECTED]@*/
mode_t * modes)
/[EMAIL PROTECTED] fileSystem, internalState @*/
/[EMAIL PROTECTED] fileSystem, internalState @*/;
@@ .
______________________________________________________________________
RPM Package Manager http://rpm5.org
CVS Sources Repository [email protected]