RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 02-Dec-2007 21:51:49
Branch: HEAD Handle: 2007120220514900
Modified files:
rpm CHANGES
rpm/rpmdb tagname.c
Log:
- jbj: eliminate hard-wired static nameBuf for tag strings.
Summary:
Revision Changes Path
1.1907 +1 -0 rpm/CHANGES
1.19 +13 -8 rpm/rpmdb/tagname.c
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1906 -r1.1907 CHANGES
--- rpm/CHANGES 2 Dec 2007 15:54:33 -0000 1.1906
+++ rpm/CHANGES 2 Dec 2007 20:51:49 -0000 1.1907
@@ -1,6 +1,7 @@
5.0a4 -> 5.0b1:
5.0a3 -> 5.0a4:
+ - jbj: eliminate hard-wired static nameBuf for tag strings.
- rse: provide RPM version in API via macros RPM_{VERSION,TIMESTAMP,VENDOR} and functions rpm_{version,timestamp,vendor}
- jbj: pkgio: hdlist readers need RPMRC_NOTFOUND EOF indicator.
- jbj: pkgio: drill in sufficient debugging to sort per/python I/O issues.
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/tagname.c
============================================================================
$ cvs diff -u -r1.18 -r1.19 tagname.c
--- rpm/rpmdb/tagname.c 30 Nov 2007 04:51:30 -0000 1.18
+++ rpm/rpmdb/tagname.c 2 Dec 2007 20:51:49 -0000 1.19
@@ -78,12 +78,15 @@
static char * _tagCanonicalize(const char * s)
/*@*/
{
- const char * se = s;
+ const char * se;
size_t nb = 0;
char * te;
char * t;
int c;
+ if (!strncasecmp(s, "RPMTAG_", sizeof("RPMTAG_")-1))
+ s += sizeof("RPMTAG_") - 1;
+ se = s;
while ((c = *se++) && xisalpha(c))
nb++;
@@ -142,7 +145,8 @@
static const char * _tagName(rpmTag tag)
{
- static char nameBuf[128]; /* XXX yuk */
+ static size_t nameBufLen = 256;
+ char * nameBuf;
headerTagTableEntry t;
int comparison, i, l, u;
int xx;
@@ -150,6 +154,9 @@
if (_rpmTags.byValue == NULL)
xx = tagLoadIndex(&_rpmTags.byValue, &_rpmTags.byValueSize, tagCmpValue);
+ if (_rpmTags.nameBuf == NULL)
+ _rpmTags.nameBuf = xcalloc(1, nameBufLen);
+ nameBuf = _rpmTags.nameBuf;
switch (tag) {
case RPMDBI_PACKAGES:
@@ -209,18 +216,16 @@
t--;
}
t = _rpmTags.byValue[i];
- if (t->name != NULL)
- strcpy(nameBuf, t->name + (sizeof("RPMTAG_")-1));
- for (s = nameBuf+1; *s != '\0'; s++)
- *s = (char) xtolower((int)*s);
+ s = (*_rpmTags.tagCanonicalize) (t->name);
+ strncpy(nameBuf, s, nameBufLen);
+ nameBuf[nameBufLen-1] = '\0';
+ s = _free(s);
/*@loopbreak@*/ break;
}
}
break;
}
-/*@-statictrans@*/
return nameBuf;
-/*@=statictrans@*/
}
static unsigned int _tagType(rpmTag tag)
@@ .
Received on Sun Dec 2 21:51:49 2007