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]

Reply via email to