From 8f9eea953f6e0d13cf622ce5ef5d958a55977282 Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Wed, 10 Oct 2007 14:25:29 +0300 Subject: Move per-header method typedefs etc out of main header.h - new header_method.h include --- rpmdb/header.h | 367 +----------------------------------------------- rpmdb/header_method.h | 378 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 379 insertions(+), 366 deletions(-) create mode 100644 rpmdb/header_method.h (limited to 'rpmdb') diff --git a/rpmdb/header.h b/rpmdb/header.h index ef6cc7db3..1eee67b32 100644 --- a/rpmdb/header.h +++ b/rpmdb/header.h @@ -288,372 +288,7 @@ typedef struct HE_s { hCNT_t cnt; } * HE_t; -/** \ingroup header - * Create new (empty) header instance. - * @return header - */ -typedef -Header (*HDRnew) (void); - -/** \ingroup header - * Dereference a header instance. - * @param h header - * @return NULL always - */ -typedef -Header (*HDRfree) (Header h); - -/** \ingroup header - * Reference a header instance. - * @param h header - * @return referenced header instance - */ -typedef -Header (*HDRlink) (Header h); - -/** \ingroup header - * Dereference a header instance. - * @param h header - * @return NULL always - */ -typedef -Header (*HDRunlink) (Header h); - -/** \ingroup header - * Sort tags in header. - * @todo Eliminate from API. - * @param h header - */ -typedef -void (*HDRsort) (Header h); - -/** \ingroup header - * Restore tags in header to original ordering. - * @todo Eliminate from API. - * @param h header - */ -typedef -void (*HDRunsort) (Header h); - -/** \ingroup header - * Return size of on-disk header representation in bytes. - * @param h header - * @param magicp include size of 8 bytes for (magic, 0)? - * @return size of on-disk header - */ -typedef -unsigned int (*HDRsizeof) (Header h, enum hMagic magicp); - -/** \ingroup header - * Convert header to on-disk representation. - * @param h header (with pointers) - * @return on-disk header blob (i.e. with offsets) - */ -typedef -void * (*HDRunload) (Header h); - -/** \ingroup header - * Convert header to on-disk representation, and then reload. - * This is used to insure that all header data is in one chunk. - * @param h header (with pointers) - * @param tag region tag - * @return on-disk header (with offsets) - */ -typedef -Header (*HDRreload) (Header h, int tag); - -/** \ingroup header - * Duplicate a header. - * @param h header - * @return new header instance - */ -typedef -Header (*HDRcopy) (Header h); - -/** \ingroup header - * Convert header to in-memory representation. - * @param uh on-disk header blob (i.e. with offsets) - * @return header - */ -typedef -Header (*HDRload) (void * uh); - -/** \ingroup header - * Make a copy and convert header to in-memory representation. - * @param uh on-disk header blob (i.e. with offsets) - * @return header - */ -typedef -Header (*HDRcopyload) (const void * uh); - -/** \ingroup header - * Read (and load) header from file handle. - * @param fd file handle - * @param magicp read (and verify) 8 bytes of (magic, 0)? - * @return header (or NULL on error) - */ -typedef -Header (*HDRread) (FD_t fd, enum hMagic magicp); - -/** \ingroup header - * Write (with unload) header to file handle. - * @param fd file handle - * @param h header - * @param magicp prefix write with 8 bytes of (magic, 0)? - * @return 0 on success, 1 on error - */ -typedef -int (*HDRwrite) (FD_t fd, Header h, enum hMagic magicp); - -/** \ingroup header - * Check if tag is in header. - * @param h header - * @param tag tag - * @return 1 on success, 0 on failure - */ -typedef -int (*HDRisentry) (Header h, int_32 tag); - -/** \ingroup header - * Free data allocated when retrieved from header. - * @param h header - * @param data address of data (or NULL) - * @param type type of data (or -1 to force free) - * @return NULL always - */ -typedef -void * (*HDRfreetag) (Header h, - const void * data, rpmTagType type); - -/** \ingroup header - * Retrieve tag value. - * Will never return RPM_I18NSTRING_TYPE! RPM_STRING_TYPE elements with - * RPM_I18NSTRING_TYPE equivalent entries are translated (if HEADER_I18NTABLE - * entry is present). - * - * @param h header - * @param tag tag - * @retval type address of tag value data type (or NULL) - * @retval p address of pointer to tag value(s) (or NULL) - * @retval c address of number of values (or NULL) - * @return 1 on success, 0 on failure - */ -typedef -int (*HDRget) (Header h, int_32 tag, - hTYP_t type, - void ** p, - hCNT_t c); - -/** \ingroup header - * Retrieve tag value using header internal array. - * Get an entry using as little extra RAM as possible to return the tag value. - * This is only an issue for RPM_STRING_ARRAY_TYPE. - * - * @param h header - * @param tag tag - * @retval type address of tag value data type (or NULL) - * @retval p address of pointer to tag value(s) (or NULL) - * @retval c address of number of values (or NULL) - * @return 1 on success, 0 on failure - */ -typedef -int (*HDRgetmin) (Header h, int_32 tag, - hTYP_t type, - hPTR_t * p, - hCNT_t c); - -/** \ingroup header - * Add tag to header. - * Duplicate tags are okay, but only defined for iteration (with the - * exceptions noted below). While you are allowed to add i18n string - * arrays through this function, you probably don't mean to. See - * headerAddI18NString() instead. - * - * @param h header - * @param tag tag - * @param type tag value data type - * @param p pointer to tag value(s) - * @param c number of values - * @return 1 on success, 0 on failure - */ -typedef -int (*HDRadd) (Header h, int_32 tag, int_32 type, const void * p, int_32 c); - -/** \ingroup header - * Append element to tag array in header. - * Appends item p to entry w/ tag and type as passed. Won't work on - * RPM_STRING_TYPE. Any pointers into header memory returned from - * headerGetEntryMinMemory() for this entry are invalid after this - * call has been made! - * - * @param h header - * @param tag tag - * @param type tag value data type - * @param p pointer to tag value(s) - * @param c number of values - * @return 1 on success, 0 on failure - */ -typedef -int (*HDRappend) (Header h, int_32 tag, int_32 type, const void * p, int_32 c); - -/** \ingroup header - * Add or append element to tag array in header. - * @todo Arg "p" should have const. - * @param h header - * @param tag tag - * @param type tag value data type - * @param p pointer to tag value(s) - * @param c number of values - * @return 1 on success, 0 on failure - */ -typedef -int (*HDRaddorappend) (Header h, int_32 tag, int_32 type, const void * p, int_32 c); - -/** \ingroup header - * Add locale specific tag to header. - * A NULL lang is interpreted as the C locale. Here are the rules: - * \verbatim - * - If the tag isn't in the header, it's added with the passed string - * as new value. - * - If the tag occurs multiple times in entry, which tag is affected - * by the operation is undefined. - * - If the tag is in the header w/ this language, the entry is - * *replaced* (like headerModifyEntry()). - * \endverbatim - * This function is intended to just "do the right thing". If you need - * more fine grained control use headerAddEntry() and headerModifyEntry(). - * - * @param h header - * @param tag tag - * @param string tag value - * @param lang locale - * @return 1 on success, 0 on failure - */ -typedef -int (*HDRaddi18n) (Header h, int_32 tag, const char * string, - const char * lang); - -/** \ingroup header - * Modify tag in header. - * If there are multiple entries with this tag, the first one gets replaced. - * @param h header - * @param tag tag - * @param type tag value data type - * @param p pointer to tag value(s) - * @param c number of values - * @return 1 on success, 0 on failure - */ -typedef -int (*HDRmodify) (Header h, int_32 tag, int_32 type, const void * p, int_32 c); - -/** \ingroup header - * Delete tag in header. - * Removes all entries of type tag from the header, returns 1 if none were - * found. - * - * @param h header - * @param tag tag - * @return 0 on success, 1 on failure (INCONSISTENT) - */ -typedef -int (*HDRremove) (Header h, int_32 tag); - -/** \ingroup header - * Return formatted output string from header tags. - * The returned string must be free()d. - * - * @param h header - * @param fmt format to use - * @param tags array of tag name/value pairs - * @param extensions chained table of formatting extensions. - * @retval errmsg error message (if any) - * @return formatted output string (malloc'ed) - */ -typedef -char * (*HDRsprintf) (Header h, const char * fmt, - const struct headerTagTableEntry_s * tags, - const struct headerSprintfExtension_s * extensions, - errmsg_t * errmsg); - -/** \ingroup header - * Duplicate tag values from one header into another. - * @param headerFrom source header - * @param headerTo destination header - * @param tagstocopy array of tags that are copied - */ -typedef -void (*HDRcopytags) (Header headerFrom, Header headerTo, hTAG_t tagstocopy); - -/** \ingroup header - * Destroy header tag iterator. - * @param hi header tag iterator - * @return NULL always - */ -typedef -HeaderIterator (*HDRfreeiter) (HeaderIterator hi); - -/** \ingroup header - * Create header tag iterator. - * @param h header - * @return header tag iterator - */ -typedef -HeaderIterator (*HDRinititer) (Header h); - -/** \ingroup header - * Return next tag from header. - * @param hi header tag iterator - * @retval tag address of tag - * @retval type address of tag value data type - * @retval p address of pointer to tag value(s) - * @retval c address of number of values - * @return 1 on success, 0 on failure - */ -typedef -int (*HDRnextiter) (HeaderIterator hi, - hTAG_t tag, - hTYP_t type, - hPTR_t * p, - hCNT_t c); - -/** \ingroup header - * Header method vectors. - */ -typedef struct HV_s * HV_t; -struct HV_s { - HDRlink hdrlink; - HDRunlink hdrunlink; - HDRfree hdrfree; - HDRnew hdrnew; - HDRsort hdrsort; - HDRunsort hdrunsort; - HDRsizeof hdrsizeof; - HDRunload hdrunload; - HDRreload hdrreload; - HDRcopy hdrcopy; - HDRload hdrload; - HDRcopyload hdrcopyload; - HDRread hdrread; - HDRwrite hdrwrite; - HDRisentry hdrisentry; - HDRfreetag hdrfreetag; - HDRget hdrget; - HDRgetmin hdrgetmin; - HDRadd hdradd; - HDRappend hdrappend; - HDRaddorappend hdraddorappend; - HDRaddi18n hdraddi18n; - HDRmodify hdrmodify; - HDRremove hdrremove; - HDRsprintf hdrsprintf; - HDRcopytags hdrcopytags; - HDRfreeiter hdrfreeiter; - HDRinititer hdrinititer; - HDRnextiter hdrnextiter; - void * hdrvecs; - void * hdrdata; - int hdrversion; -}; +#include "header_method.h" /** \ingroup header * Free data allocated when retrieved from header. diff --git a/rpmdb/header_method.h b/rpmdb/header_method.h new file mode 100644 index 000000000..64b8899bb --- /dev/null +++ b/rpmdb/header_method.h @@ -0,0 +1,378 @@ +#ifndef H_HEADER_METHOD +#define H_HEADER_METHOD + +/** \ingroup header + * \file rpmdb/header_method.h + * Header method prototypes + */ + +#include "header.h" + +/** \ingroup header + * Create new (empty) header instance. + * @return header + */ +typedef +Header (*HDRnew) (void); + +/** \ingroup header + * Dereference a header instance. + * @param h header + * @return NULL always + */ +typedef +Header (*HDRfree) (Header h); + +/** \ingroup header + * Reference a header instance. + * @param h header + * @return referenced header instance + */ +typedef +Header (*HDRlink) (Header h); + +/** \ingroup header + * Dereference a header instance. + * @param h header + * @return NULL always + */ +typedef +Header (*HDRunlink) (Header h); + +/** \ingroup header + * Sort tags in header. + * @todo Eliminate from API. + * @param h header + */ +typedef +void (*HDRsort) (Header h); + +/** \ingroup header + * Restore tags in header to original ordering. + * @todo Eliminate from API. + * @param h header + */ +typedef +void (*HDRunsort) (Header h); + +/** \ingroup header + * Return size of on-disk header representation in bytes. + * @param h header + * @param magicp include size of 8 bytes for (magic, 0)? + * @return size of on-disk header + */ +typedef +unsigned int (*HDRsizeof) (Header h, enum hMagic magicp); + +/** \ingroup header + * Convert header to on-disk representation. + * @param h header (with pointers) + * @return on-disk header blob (i.e. with offsets) + */ +typedef +void * (*HDRunload) (Header h); + +/** \ingroup header + * Convert header to on-disk representation, and then reload. + * This is used to insure that all header data is in one chunk. + * @param h header (with pointers) + * @param tag region tag + * @return on-disk header (with offsets) + */ +typedef +Header (*HDRreload) (Header h, int tag); + +/** \ingroup header + * Duplicate a header. + * @param h header + * @return new header instance + */ +typedef +Header (*HDRcopy) (Header h); + +/** \ingroup header + * Convert header to in-memory representation. + * @param uh on-disk header blob (i.e. with offsets) + * @return header + */ +typedef +Header (*HDRload) (void * uh); + +/** \ingroup header + * Make a copy and convert header to in-memory representation. + * @param uh on-disk header blob (i.e. with offsets) + * @return header + */ +typedef +Header (*HDRcopyload) (const void * uh); + +/** \ingroup header + * Read (and load) header from file handle. + * @param fd file handle + * @param magicp read (and verify) 8 bytes of (magic, 0)? + * @return header (or NULL on error) + */ +typedef +Header (*HDRread) (FD_t fd, enum hMagic magicp); + +/** \ingroup header + * Write (with unload) header to file handle. + * @param fd file handle + * @param h header + * @param magicp prefix write with 8 bytes of (magic, 0)? + * @return 0 on success, 1 on error + */ +typedef +int (*HDRwrite) (FD_t fd, Header h, enum hMagic magicp); + +/** \ingroup header + * Check if tag is in header. + * @param h header + * @param tag tag + * @return 1 on success, 0 on failure + */ +typedef +int (*HDRisentry) (Header h, int_32 tag); + +/** \ingroup header + * Free data allocated when retrieved from header. + * @param h header + * @param data address of data (or NULL) + * @param type type of data (or -1 to force free) + * @return NULL always + */ +typedef +void * (*HDRfreetag) (Header h, + const void * data, rpmTagType type); + +/** \ingroup header + * Retrieve tag value. + * Will never return RPM_I18NSTRING_TYPE! RPM_STRING_TYPE elements with + * RPM_I18NSTRING_TYPE equivalent entries are translated (if HEADER_I18NTABLE + * entry is present). + * + * @param h header + * @param tag tag + * @retval type address of tag value data type (or NULL) + * @retval p address of pointer to tag value(s) (or NULL) + * @retval c address of number of values (or NULL) + * @return 1 on success, 0 on failure + */ +typedef +int (*HDRget) (Header h, int_32 tag, + hTYP_t type, + void ** p, + hCNT_t c); + +/** \ingroup header + * Retrieve tag value using header internal array. + * Get an entry using as little extra RAM as possible to return the tag value. + * This is only an issue for RPM_STRING_ARRAY_TYPE. + * + * @param h header + * @param tag tag + * @retval type address of tag value data type (or NULL) + * @retval p address of pointer to tag value(s) (or NULL) + * @retval c address of number of values (or NULL) + * @return 1 on success, 0 on failure + */ +typedef +int (*HDRgetmin) (Header h, int_32 tag, + hTYP_t type, + hPTR_t * p, + hCNT_t c); + +/** \ingroup header + * Add tag to header. + * Duplicate tags are okay, but only defined for iteration (with the + * exceptions noted below). While you are allowed to add i18n string + * arrays through this function, you probably don't mean to. See + * headerAddI18NString() instead. + * + * @param h header + * @param tag tag + * @param type tag value data type + * @param p pointer to tag value(s) + * @param c number of values + * @return 1 on success, 0 on failure + */ +typedef +int (*HDRadd) (Header h, int_32 tag, int_32 type, const void * p, int_32 c); + +/** \ingroup header + * Append element to tag array in header. + * Appends item p to entry w/ tag and type as passed. Won't work on + * RPM_STRING_TYPE. Any pointers into header memory returned from + * headerGetEntryMinMemory() for this entry are invalid after this + * call has been made! + * + * @param h header + * @param tag tag + * @param type tag value data type + * @param p pointer to tag value(s) + * @param c number of values + * @return 1 on success, 0 on failure + */ +typedef +int (*HDRappend) (Header h, int_32 tag, int_32 type, const void * p, int_32 c); + +/** \ingroup header + * Add or append element to tag array in header. + * @todo Arg "p" should have const. + * @param h header + * @param tag tag + * @param type tag value data type + * @param p pointer to tag value(s) + * @param c number of values + * @return 1 on success, 0 on failure + */ +typedef +int (*HDRaddorappend) (Header h, int_32 tag, int_32 type, const void * p, int_32 c); + +/** \ingroup header + * Add locale specific tag to header. + * A NULL lang is interpreted as the C locale. Here are the rules: + * \verbatim + * - If the tag isn't in the header, it's added with the passed string + * as new value. + * - If the tag occurs multiple times in entry, which tag is affected + * by the operation is undefined. + * - If the tag is in the header w/ this language, the entry is + * *replaced* (like headerModifyEntry()). + * \endverbatim + * This function is intended to just "do the right thing". If you need + * more fine grained control use headerAddEntry() and headerModifyEntry(). + * + * @param h header + * @param tag tag + * @param string tag value + * @param lang locale + * @return 1 on success, 0 on failure + */ +typedef +int (*HDRaddi18n) (Header h, int_32 tag, const char * string, + const char * lang); + +/** \ingroup header + * Modify tag in header. + * If there are multiple entries with this tag, the first one gets replaced. + * @param h header + * @param tag tag + * @param type tag value data type + * @param p pointer to tag value(s) + * @param c number of values + * @return 1 on success, 0 on failure + */ +typedef +int (*HDRmodify) (Header h, int_32 tag, int_32 type, const void * p, int_32 c); + +/** \ingroup header + * Delete tag in header. + * Removes all entries of type tag from the header, returns 1 if none were + * found. + * + * @param h header + * @param tag tag + * @return 0 on success, 1 on failure (INCONSISTENT) + */ +typedef +int (*HDRremove) (Header h, int_32 tag); + +/** \ingroup header + * Return formatted output string from header tags. + * The returned string must be free()d. + * + * @param h header + * @param fmt format to use + * @param tags array of tag name/value pairs + * @param extensions chained table of formatting extensions. + * @retval errmsg error message (if any) + * @return formatted output string (malloc'ed) + */ +typedef +char * (*HDRsprintf) (Header h, const char * fmt, + const struct headerTagTableEntry_s * tags, + const struct headerSprintfExtension_s * extensions, + errmsg_t * errmsg); + +/** \ingroup header + * Duplicate tag values from one header into another. + * @param headerFrom source header + * @param headerTo destination header + * @param tagstocopy array of tags that are copied + */ +typedef +void (*HDRcopytags) (Header headerFrom, Header headerTo, hTAG_t tagstocopy); + +/** \ingroup header + * Destroy header tag iterator. + * @param hi header tag iterator + * @return NULL always + */ +typedef +HeaderIterator (*HDRfreeiter) (HeaderIterator hi); + +/** \ingroup header + * Create header tag iterator. + * @param h header + * @return header tag iterator + */ +typedef +HeaderIterator (*HDRinititer) (Header h); + +/** \ingroup header + * Return next tag from header. + * @param hi header tag iterator + * @retval tag address of tag + * @retval type address of tag value data type + * @retval p address of pointer to tag value(s) + * @retval c address of number of values + * @return 1 on success, 0 on failure + */ +typedef +int (*HDRnextiter) (HeaderIterator hi, + hTAG_t tag, + hTYP_t type, + hPTR_t * p, + hCNT_t c); + +/** \ingroup header + * Header method vectors. + */ +typedef struct HV_s * HV_t; +struct HV_s { + HDRlink hdrlink; + HDRunlink hdrunlink; + HDRfree hdrfree; + HDRnew hdrnew; + HDRsort hdrsort; + HDRunsort hdrunsort; + HDRsizeof hdrsizeof; + HDRunload hdrunload; + HDRreload hdrreload; + HDRcopy hdrcopy; + HDRload hdrload; + HDRcopyload hdrcopyload; + HDRread hdrread; + HDRwrite hdrwrite; + HDRisentry hdrisentry; + HDRfreetag hdrfreetag; + HDRget hdrget; + HDRgetmin hdrgetmin; + HDRadd hdradd; + HDRappend hdrappend; + HDRaddorappend hdraddorappend; + HDRaddi18n hdraddi18n; + HDRmodify hdrmodify; + HDRremove hdrremove; + HDRsprintf hdrsprintf; + HDRcopytags hdrcopytags; + HDRfreeiter hdrfreeiter; + HDRinititer hdrinititer; + HDRnextiter hdrnextiter; + void * hdrvecs; + void * hdrdata; + int hdrversion; +}; + +#endif /* H_HEADER_METHOD */ -- cgit v1.2.3