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

  Server: rpm5.org                         Name:   Alexey Tourbin
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   06-Jul-2008 06:24:43
  Branch: HEAD                             Handle: 2008070604244200

  Modified files:
    rpm                     CHANGES
    rpm/build               files.c
    rpm/lib                 librpm.vers rpmfi.c rpmfi.h

  Log:
    rpmfi: changed fi->fnlen meaning, added rpmfiFMaxLen() function
    
    - fi->fnlen: now indicates max file name lengith, without '\0' (like strlen)
    - rpmfiNew: find the exact max file name lengith, not dnlmax + bnlmax
    - rpmfiFN: allocate (fi->fnlen + 1) bytes
    - rpmfiFMaxLen: new function
    - librpm.vers: added rpmfiFMaxLen
    - pkgUnpackagedSubdirs: use rpmfiFMaxLen
    - genCpioListAndHeader: when setting fi->fnlen, use fileURL, not diskURL
    - genCpioListAndHeader: also assert that fi->fn has not been allocated yet

  Summary:
    Revision    Changes     Path
    1.2465      +1  -0      rpm/CHANGES
    1.336       +10 -4      rpm/build/files.c
    1.45        +1  -0      rpm/lib/librpm.vers
    2.125       +13 -13     rpm/lib/rpmfi.c
    2.56        +8  -0      rpm/lib/rpmfi.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2464 -r1.2465 CHANGES
  --- rpm/CHANGES       6 Jul 2008 00:26:19 -0000       1.2464
  +++ rpm/CHANGES       6 Jul 2008 04:24:42 -0000       1.2465
  @@ -1,5 +1,6 @@
   
   5.1.0 -> 5.2a0:
  +    - at: rpmfi: new function: size_t rpmfiFMaxLen(rpmfi).
       - at: rpmbuild: check for unpackaged subdirectories.
       - jbj: fix: resurrect cpuinfo() probe, hack-o-rounds for both /proc & 
libio.
       - jbj: rpmio: remove fdSize, rewrite rpmioSlurp to use Fstat(2) instead.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/files.c
  ============================================================================
  $ cvs diff -u -r1.335 -r1.336 files.c
  --- rpm/build/files.c 6 Jul 2008 02:07:14 -0000       1.335
  +++ rpm/build/files.c 6 Jul 2008 04:24:42 -0000       1.336
  @@ -1275,7 +1275,6 @@
       int skipLen = 0;
       security_context_t scon = NULL;
       const char * sxfn;
  -    size_t fnlen;
       FileListRec flp;
       char buf[BUFSIZ];
       int i, xx;
  @@ -1667,8 +1666,15 @@
            continue;
        }
   
  -     if ((fnlen = strlen(flp->diskURL) + 1) > fi->fnlen)
  -         fi->fnlen = fnlen;
  +     {
  +         size_t fnlen = strlen(flp->fileURL);
  +         if (fnlen > fi->fnlen) {
  +             /* fnlen-sized buffer must not be allocated yet */
  +             assert(fi->fn == NULL);
  +             fi->fnlen = fnlen;
  +         }
  +     }
  +
   
        /* Create disk directory and base name. */
        fi->dil[i] = i;
  @@ -2964,7 +2970,7 @@
        fi = rpmfiFree(fi);
        return 0;
       }
  -    fn = alloca(fi->fnlen);
  +    fn = alloca(rpmfiFMaxLen(fi) + 1);
   
       fi = rpmfiInit(fi, 0);
       while ((i = rpmfiNext(fi)) >= 0) {
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/librpm.vers
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 librpm.vers
  --- rpm/lib/librpm.vers       5 Jul 2008 23:35:11 -0000       1.44
  +++ rpm/lib/librpm.vers       6 Jul 2008 04:24:42 -0000       1.45
  @@ -160,6 +160,7 @@
       rpmfiFGroup;
       rpmfiFInode;
       rpmfiFLink;
  +    rpmfiFMaxLen;
       rpmfiFMode;
       rpmfiFMtime;
       rpmfiFN;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmfi.c
  ============================================================================
  $ cvs diff -u -r2.124 -r2.125 rpmfi.c
  --- rpm/lib/rpmfi.c   3 Jul 2008 15:08:05 -0000       2.124
  +++ rpm/lib/rpmfi.c   6 Jul 2008 04:24:42 -0000       2.125
  @@ -143,7 +143,7 @@
        const char *dn;
        char * t;
        if (fi->fn == NULL)
  -         fi->fn = xmalloc(fi->fnlen);
  +         fi->fn = xmalloc(fi->fnlen + 1);
        FN = t = fi->fn;
        (void) urlPath(fi->dnl[fi->dil[fi->i]], &dn);
        *t = '\0';
  @@ -153,6 +153,13 @@
       return FN;
   }
   
  +size_t rpmfiFMaxLen(rpmfi fi)
  +{
  +    if (fi != NULL)
  +     return fi->fnlen;
  +    return 0;
  +}
  +
   uint32_t rpmfiFFlags(rpmfi fi)
   {
       uint32_t FFlags = 0;
  @@ -1278,9 +1285,7 @@
       rpmte p;
       rpmfi fi = NULL;
       const char * Type;
  -    int dnlmax, bnlmax;
       unsigned char * t;
  -    int len;
       int xx;
       int i;
   
  @@ -1554,18 +1559,13 @@
       if (!scareMem)
        fi->h = headerFree(fi->h);
   
  -    dnlmax = -1;
  -    for (i = 0; i < (int)fi->dc; i++) {
  -     if ((len = strlen(fi->dnl[i])) > dnlmax)
  -         dnlmax = len;
  -    }
  -    bnlmax = -1;
  +    fi->fn = NULL;
  +    fi->fnlen = 0;
       for (i = 0; i < (int)fi->fc; i++) {
  -     if ((len = strlen(fi->bnl[i])) > bnlmax)
  -         bnlmax = len;
  +     size_t fnlen = strlen(fi->dnl[fi->dil[i]]) + strlen(fi->bnl[i]);
  +     if (fnlen > fi->fnlen)
  +         fi->fnlen = fnlen;
       }
  -    fi->fnlen = dnlmax + bnlmax + 1;
  -    fi->fn = NULL;
   
       fi->dperms = 0755;
       fi->fperms = 0644;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmfi.h
  ============================================================================
  $ cvs diff -u -r2.55 -r2.56 rpmfi.h
  --- rpm/lib/rpmfi.h   3 Jul 2008 15:08:05 -0000       2.55
  +++ rpm/lib/rpmfi.h   6 Jul 2008 04:24:42 -0000       2.56
  @@ -393,6 +393,14 @@
        /[EMAIL PROTECTED] fi @*/;
   
   /**
  + * Return maximum file name length from file info set.
  + * @param fi         file info set
  + * @return           maximum file name length (not including '\0')
  + */
  +/[EMAIL PROTECTED]@*/
  +extern size_t rpmfiFMaxLen(/[EMAIL PROTECTED]@*/ rpmfi fi);
  +
  +/**
    * Return current file flags from file info set.
    * @param fi         file info set
    * @return           current file flags, 0 on invalid
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to