RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ hdrfmt.c tagname.c

From: Jeff Johnson <jbj@rpm5.org>
Date: Mon 03 Dec 2007 - 15:42:04 CET
Message-Id: <20071203144204.7CBC834845C@rpm5.org>
  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:   03-Dec-2007 15:42:04
  Branch: HEAD                             Handle: 2007120314420301

  Modified files:
    rpm                     CHANGES
    rpm/rpmdb               hdrfmt.c tagname.c

  Log:
    - re-enable binary, not linear, tag lookups.
    - strip leading "RPMTAG_" prefix, in tagValue lookup.
    - test arbitrary bit, not tag lookup failure, for --yaml/--xml display.

  Summary:
    Revision    Changes     Path
    1.1912      +3  -0      rpm/CHANGES
    1.50        +17 -15     rpm/rpmdb/hdrfmt.c
    1.21        +4  -0      rpm/rpmdb/tagname.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1911 -r1.1912 CHANGES
  --- rpm/CHANGES	3 Dec 2007 13:11:45 -0000	1.1911
  +++ rpm/CHANGES	3 Dec 2007 14:42:03 -0000	1.1912
  @@ -1,4 +1,7 @@
   5.0a4 -> 5.0b1:
  +    - jbj: re-enable binary, not linear, tag lookups.
  +    - jbj: strip leading "RPMTAG_" prefix, in tagValue lookup.
  +    - jbj: test arbitrary bit, not tag lookup failure, for --yaml/--xml display.
       - afb: pass level on, to %{__lzma}.
       - jbj: revert binary search, todo++.
       - jbj: using tagValue instead permits queries of arbitrary tags.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  ============================================================================
  $ cvs diff -u -r1.49 -r1.50 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c	3 Dec 2007 12:59:08 -0000	1.49
  +++ rpm/rpmdb/hdrfmt.c	3 Dec 2007 14:42:04 -0000	1.50
  @@ -2061,7 +2061,6 @@
       const char * s;
       char *t;
   
  -#ifdef	NOTYET
       /* XXX Use bsearch on the "normal" rpmTagTable lookup. */
       if (tbl == NULL || tbl == rpmTagTable) {
   	s = tagName(val);
  @@ -2069,7 +2068,6 @@
   	    *typep = tagType(val);
   	return s;
       }
  -#endif
   
       for (; tbl->name != NULL; tbl++) {
   	if (tbl->val == val)
  @@ -2097,17 +2095,19 @@
   static uint32_t myTagValue(headerTagTableEntry tbl, const char * name)
   	/*@*/
   {
  -#ifdef	NOTYET
  +    uint32_t val = 0;
  +
       /* XXX Use bsearch on the "normal" rpmTagTable lookup. */
       if (tbl == NULL || tbl == rpmTagTable)
   	return tagValue(name);
  -#endif
   
       for (; tbl->name != NULL; tbl++) {
  -	if (!xstrcasecmp(tbl->name, name))
  -	    return tbl->val;
  +	if (xstrcasecmp(tbl->name, name))
  +	    continue;
  +	val = tbl->val;
  +	break;
       }
  -    return 0;
  +    return val;
   }
   
   /**
  @@ -2847,14 +2847,15 @@
   		!strcmp(tag->type, "yaml"));
   
   	    if (isxml) {
  -		const char * tagN = myTagName(hsa->tags, tag->tagno, NULL);
  -		/* XXX display "Tag_0x01234567" for unknown tags. */
  -		if (tagN == NULL) {
  +		const char * tagN;
  +		/* XXX display "Tag_0x01234567" for arbitrary tags. */
  +		if (tag->tagno & 0x40000000) {
   		    (void) snprintf(numbuf, sizeof(numbuf), "Tag_0x%08x",
   				(unsigned) tag->tagno);
   		    numbuf[sizeof(numbuf)-1] = '\0';
   		    tagN = numbuf;
  -		}
  +		} else
  +		    tagN = myTagName(hsa->tags, tag->tagno, NULL);
   		need = sizeof("  <rpmTag name=\"\">\n") + strlen(tagN);
   		te = t = hsaReserve(hsa, need);
   		te = stpcpy( stpcpy( stpcpy(te, "  <rpmTag name=\""), tagN), "\">\n");
  @@ -2862,9 +2863,9 @@
   	    }
   	    if (isyaml) {
   		rpmTag tagT = 0;
  -		const char * tagN = myTagName(hsa->tags, tag->tagno, &tagT);
  -		/* XXX display "Tag_0x01234567" for unknown tags. */
  -		if (tagN == NULL) {
  +		const char * tagN;
  +		/* XXX display "Tag_0x01234567" for arbitrary tags. */
  +		if (tag->tagno & 0x40000000) {
   		    (void) snprintf(numbuf, sizeof(numbuf), "Tag_0x%08x",
   				(unsigned) tag->tagno);
   		    numbuf[sizeof(numbuf)-1] = '\0';
  @@ -2873,7 +2874,8 @@
   		    tagT = numElements > 1
   			?  RPM_ARRAY_RETURN_TYPE : RPM_SCALAR_RETURN_TYPE;
   /*@=type@*/
  -		}
  +		} else
  +		    tagN = myTagName(hsa->tags, tag->tagno, &tagT);
   		need = sizeof("  :     - ") + strlen(tagN);
   		te = t = hsaReserve(hsa, need);
   		*te++ = ' ';
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/tagname.c
  ============================================================================
  $ cvs diff -u -r1.20 -r1.21 tagname.c
  --- rpm/rpmdb/tagname.c	2 Dec 2007 23:06:02 -0000	1.20
  +++ rpm/rpmdb/tagname.c	3 Dec 2007 14:42:04 -0000	1.21
  @@ -320,6 +320,10 @@
       rpmTag tag;
       int xx;
   
  +    /* XXX headerSprintf looks up by "RPMTAG_FOO", not "FOO". */
  +    if (!strncasecmp(tagstr, "RPMTAG_", sizeof("RPMTAG_")-1))
  +	tagstr += sizeof("RPMTAG_") - 1;
  +
       if (!xstrcasecmp(tagstr, "Packages"))
   	return RPMDBI_PACKAGES;
       if (!xstrcasecmp(tagstr, "Depends"))
  @@ .
Received on Mon Dec 3 15:42:04 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.