RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ header.c header.h

From: Jeff Johnson <jbj@rpm5.org>
Date: Sun 21 Oct 2007 - 05:40:48 CEST
Message-Id: <20071021034048.8DAA9348457@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:   21-Oct-2007 05:40:48
  Branch: HEAD                             Handle: 2007102104404701

  Modified files:
    rpm                     CHANGES
    rpm/rpmdb               header.c header.h

  Log:
    - start rearranging header.h prior to moving typedefs to rpmtag.h.
    - rewrite several toy routines to use HE_t instead.
    - replace hRET_t with rpmTagType, avoiding "hRET_t *" issues for now.

  Summary:
    Revision    Changes     Path
    1.1748      +3  -0      rpm/CHANGES
    1.108       +38 -55     rpm/rpmdb/header.c
    1.52        +28 -23     rpm/rpmdb/header.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1747 -r1.1748 CHANGES
  --- rpm/CHANGES	21 Oct 2007 00:25:23 -0000	1.1747
  +++ rpm/CHANGES	21 Oct 2007 03:40:47 -0000	1.1748
  @@ -1,4 +1,7 @@
   4.5 -> 5.0:
  +    - jbj: start rearranging header.h prior to moving typedefs to rpmtag.h.
  +    - jbj: rewrite several toy routines to use HE_t instead.
  +    - jbj: replace hRET_t with rpmTagType, avoiding "hRET_t *" issues for now.
       - jbj: hmmm, b0rken --fileclass et al extensions in lib/format.c, todo++.
       - jbj: mark private extension handling for destruction, enabled for now.
       - jbj: permit headerSprintf tbls/exts args tp be NULL using sane default.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.c
  ============================================================================
  $ cvs diff -u -r1.107 -r1.108 header.c
  --- rpm/rpmdb/header.c	21 Oct 2007 00:25:24 -0000	1.107
  +++ rpm/rpmdb/header.c	21 Oct 2007 03:40:48 -0000	1.108
  @@ -382,8 +382,8 @@
    * @param pend		pointer to end of data (or NULL)
    * @return		no. bytes in data, -1 on failure
    */
  -static int dataLength(rpmTagType type, hRET_t p, rpmTagCount count, int onDisk,
  -		/*@null@*/ hRET_t pend)
  +static int dataLength(rpmTagType type, rpmTagData p, rpmTagCount count, int onDisk,
  +		/*@null@*/ rpmTagData pend)
   	/*@*/
   {
       const unsigned char * s = p.ui8p;
  @@ -471,7 +471,7 @@
   		int regionid)
   	/*@modifies *entry, *dataStart @*/
   {
  -    hRET_t p, pend;
  +    rpmTagData p, pend;
       unsigned char * tprev = NULL;
       unsigned char * t = NULL;
       int tdel = 0;
  @@ -2051,7 +2051,7 @@
   
   /**
    */
  -static void copyData(rpmTagType type, /*@out@*/ void * dstPtr, hRET_t srcPtr,
  +static void copyData(rpmTagType type, /*@out@*/ void * dstPtr, rpmTagData srcPtr,
   		rpmTagCount cnt, int dataLength)
   	/*@modifies *dstPtr @*/
   {
  @@ -2087,14 +2087,14 @@
    */
   /*@null@*/
   static void *
  -grabData(rpmTagType type, hRET_t p, rpmTagCount c, /*@out@*/ int * lenp)
  +grabData(rpmTagType type, rpmTagData p, rpmTagCount c, /*@out@*/ int * lenp)
   	/*@modifies *lenp @*/
   	/*@requires maxSet(lenp) >= 0 @*/
   {
       void * data = NULL;
       int length;
   
  -    length = dataLength(type, p, c, 0, (hRET_t)NULL);	/* NOCAST */
  +    length = dataLength(type, p, c, 0, (rpmTagData)NULL);	/* NOCAST */
       if (length > 0) {
   	data = xmalloc(length);
   	copyData(type, data, p, c, length);
  @@ -2120,7 +2120,7 @@
    * @return		1 on success, 0 on failure
    */
   static
  -int headerAddEntry(Header h, int_32 tag, rpmTagType type, hRET_t p, rpmTagCount c)
  +int headerAddEntry(Header h, int_32 tag, rpmTagType type, rpmTagData p, rpmTagCount c)
   	/*@modifies h @*/
   {
       indexEntry entry;
  @@ -2179,7 +2179,7 @@
    */
   static
   int headerAppendEntry(Header h, int_32 tag, rpmTagType type,
  -		hRET_t p, rpmTagCount c)
  +		rpmTagData p, rpmTagCount c)
   	/*@modifies h @*/
   {
       indexEntry entry;
  @@ -2195,7 +2195,7 @@
       if (!entry)
   	return 0;
   
  -    length = dataLength(type, p, c, 0, (hRET_t)NULL);	/* NOCAST */
  +    length = dataLength(type, p, c, 0, (rpmTagData)NULL);	/* NOCAST */
       if (length < 0)
   	return 0;
   
  @@ -2227,7 +2227,7 @@
    */
   static
   int headerAddOrAppendEntry(Header h, int_32 tag, rpmTagType type,
  -		hRET_t p, rpmTagCount c)
  +		rpmTagData p, rpmTagCount c)
   	/*@modifies h @*/
   {
       return (findEntry(h, tag, type)
  @@ -2261,7 +2261,7 @@
   	/*@modifies h @*/
   {
       indexEntry table, entry;
  -    hRET_t p;
  +    rpmTagData p;
       int length;
       int ghosts;
       int i, langNum;
  @@ -2400,12 +2400,12 @@
    */
   static
   int headerModifyEntry(Header h, int_32 tag, rpmTagType type,
  -			hRET_t p, rpmTagCount c)
  +			rpmTagData p, rpmTagCount c)
   	/*@modifies h @*/
   {
       indexEntry entry;
       void * oldData;
  -    hRET_t data;
  +    rpmTagData data;
       int length;
   
       /* First find the tag */
  @@ -2670,18 +2670,15 @@
   Header headerCopy(Header h)
   	/*@modifies h @*/
   {
  +    HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
       Header nh = headerNew();
       HeaderIterator hi;
  -    int_32 tag;
  -    rpmTagType type;
  -    rpmTagCount count;
  -    hRET_t ptr;
      
       for (hi = headerInitIterator(h);
  -	headerNextIterator(hi, &tag, &type, &ptr, &count);
  -	ptr.ptr = headerFreeData(ptr.ptr, type))
  +	headerNextIterator(hi, &he->tag, &he->t, &he->p, &he->c);
  +	he->p.ptr = headerFreeData(he->p.ptr, he->t))
       {
  -	if (ptr.ptr) (void) headerAddEntry(nh, tag, type, ptr, count);
  +	if (he->p.ptr) (void) headerAddEntry(nh, he->tag, he->t, he->p, he->c);
       }
       hi = headerFreeIterator(hi);
   
  @@ -2702,8 +2699,10 @@
       const char * errmsg;
       HE_t ec;			/*!< Extension data cache. */
       int nec;			/*!< No. of extension cache items. */
  +#ifdef	NOTYET
       HE_t tc;			/*!< Tag data cache. */
       int ntc;			/*!< No. of tag cache items. */
  +#endif
       sprintfToken format;
   /*@relnull@*/
       HeaderIterator hi;
  @@ -3566,38 +3565,25 @@
    * Call a header extension only once, saving results.
    * @param hsa		headerSprintf args
    * @param fn		function
  - * @retval *typeptr	extension type
  - * @retval *data	extension data
  - * @retval *countptr	extension size
  + * @retval he		tag container
    * @retval ec		extension cache
    * @return		0 on success, 1 on failure
    */
   static int getExtension(headerSprintfArgs hsa, headerTagTagFunction fn,
  -		/*@out@*/ hTYP_t typeptr,
  -		/*@out@*/ hRET_t * data,
  -		/*@out@*/ hCNT_t countptr,
  -		HE_t ec)
  -	/*@modifies *typeptr, *data, *countptr, ec @*/
  +		HE_t he, HE_t ec)
  +	/*@modifies he, ec @*/
   {
  +    int rc = 0;
       if (!ec->avail) {
  -	HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
  -	int xx;
  -
  -	xx = fn(hsa->h, he);
  -	ec->t = he->t;
  -	ec->p.ptr = he->p.ptr;
  -	ec->c = he->c;
  -	ec->freeData = he->freeData;
  -	if (xx)
  -	    return 1;
  -	ec->avail = 1;
  -    }
  -
  -    if (typeptr) *typeptr = ec->t;
  -    if (data) (*data).ptr = ec->p.ptr;
  -    if (countptr) *countptr = ec->c;
  -
  -    return 0;
  +	he = rpmheClean(he);
  +	rc = fn(hsa->h, he);
  +	*ec = *he;	/* structure copy. */
  +	if (!rc)
  +	    ec->avail = 1;
  +    } else
  +	*he = *ec;	/* structure copy. */
  +    he->freeData = 0;
  +    return rc;
   }
   #endif	/* SUPPORT_SPRINTF_EXTTABLE */
   
  @@ -3612,21 +3598,19 @@
   static char * formatValue(headerSprintfArgs hsa, sprintfTag tag, int element)
   	/*@modifies hsa @*/
   {
  +    HE_t vhe = memset(alloca(sizeof(*vhe)), 0, sizeof(*vhe));
       HE_t he = &tag->he;
       char * val = NULL;
       size_t need = 0;
       char * t, * te;
  -    int xx;
  -    
  -    rpmTagCount countBuf;
  -
  -    HE_t vhe = memset(alloca(sizeof(*vhe)), 0, sizeof(*vhe));
       int_64 ival = 0;
  +    rpmTagCount countBuf;
  +    int xx;
   
   /* XXX likely need to check !he->avail and he->tag == tag->tagno. */
   #if defined(SUPPORT_SPRINTF_EXTTABLE)
       if (tag->ext) {
  -	if (getExtension(hsa, tag->ext, &he->t, &he->p, &he->c, hsa->ec + tag->extNum))
  +	if (getExtension(hsa, tag->ext, he, hsa->ec + tag->extNum))
   	{
   	    he->c = 1;
   	    he->t = RPM_STRING_TYPE;	
  @@ -3836,8 +3820,7 @@
   /* XXX likely need to check !he->avail and he->tag == tag->tagno. */
   #if defined(SUPPORT_SPRINTF_EXTTABLE)
   	    if (tag->ext) {
  -		if (getExtension(hsa, tag->ext, &he->t, &he->p, &he->c, 
  -				 hsa->ec + tag->extNum))
  +		if (getExtension(hsa, tag->ext, he, hsa->ec + tag->extNum))
   		     continue;
   	    } else
   #endif	/* SUPPORT_SPRINTF_EXTTABLE */
  @@ -3853,7 +3836,7 @@
   fprintf(stderr, " NEW: %p tag %s(%d)\t%d %p[%d:%d] free %d avail %d\n", he, tagName(he->tag), he->tag, he->t, he->p.ptr, he->ix, he->c, he->freeData, he->avail);
   	    } 
   
  -	    /* Check that all iteration items are same size (or scalar). */
  +	    /* Check iteration arrays are same dimension (or scalar). */
   	    switch (he->t) {
   	    default:
   		if (numElements == -1) {
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.h
  ============================================================================
  $ cvs diff -u -r1.51 -r1.52 header.h
  --- rpm/rpmdb/header.h	21 Oct 2007 00:25:24 -0000	1.51
  +++ rpm/rpmdb/header.h	21 Oct 2007 03:40:48 -0000	1.52
  @@ -107,27 +107,6 @@
   
   /** \ingroup header
    */
  -/*@-typeuse -fielduse@*/
  -typedef union hRET_s hRET_t;
  -#if !defined(SWIG)
  -union hRET_s {
  -    void * ptr;
  -    const char ** argv;
  -    const char * str;
  -    uint_64 * ui64p;
  -    uint_32 * ui32p;
  -    uint_16 * ui16p;
  -    uint_8 * ui8p;
  -    int_64 * i64p;
  -    int_32 * i32p;
  -    int_16 * i16p;
  -    int_8 * i8p;
  -};
  -#endif
  -/*@=typeuse =fielduse@*/
  -
  -/** \ingroup header
  - */
   typedef enum rpmTag_e rpmTag;
   
   /** \ingroup header
  @@ -157,7 +136,7 @@
   
   /** \ingroup header
    */
  -typedef hRET_t rpmTagData;
  +typedef union rpmDataType_u rpmTagData;
   
   /** \ingroup header
    */
  @@ -165,6 +144,33 @@
   
   /** \ingroup header
    */
  +typedef struct _HE_s * HE_t;		/* tag container. */
  +
  +/** \ingroup header
  + */
  +/*@-typeuse -fielduse@*/
  +typedef union rpmDataType_u hRET_t;
  +#if !defined(SWIG)
  +union rpmDataType_u {
  +    void * ptr;
  +    int_8 * i8p;		/*!< RPM_INT8_TYPE | RPM_CHAR_TYPE */
  +    int_32 * i32p;		/*!< RPM_INT32_TYPE */
  +    int_16 * i16p;		/*!< RPM_INT16_TYPE */
  +    int_64 * i64p;		/*!< RPM_INT64_TYPE */
  +    const char * str;		/*!< RPM_STRING_TYPE */
  +    unsigned char * blob;	/*!< RPM_BIN_TYPE */
  +    const char ** argv;		/*!< RPM_STRING_ARRAY_TYPE */
  +    uint_8 * ui8p;
  +    uint_16 * ui16p;
  +    uint_32 * ui32p;
  +    uint_64 * ui64p;
  +    HE_t * he;
  +};
  +#endif
  +/*@=typeuse =fielduse@*/
  +
  +/** \ingroup header
  + */
   typedef int_32 *	hTAG_t;
   typedef rpmTagType *	hTYP_t;
   typedef rpmTagData *	hPTR_t;
  @@ -186,7 +192,6 @@
   };
   typedef struct _HE_s HE_s;
   #endif
  -typedef HE_s * HE_t;		/* tag container. */
   /*@=typeuse =fielduse@*/
   
   /** \ingroup header
  @@ .
Received on Sun Oct 21 05:40:48 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.