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