diff options
author | Per Øyvind Karlsen <peroyvind@mandriva.org> | 2008-02-28 00:56:39 +0000 |
---|---|---|
committer | Per Øyvind Karlsen <peroyvind@mandriva.org> | 2008-02-28 00:56:39 +0000 |
commit | 27f70acbbb663974e567e90df7a54030f7308061 (patch) | |
tree | 0ff44728e48d10a45e19c638066c0a99383793ce /rpm5compat.h | |
parent | 95ccfb112016c55b159e351fb0d732ea54ce638f (diff) | |
download | perl-URPM-27f70acbbb663974e567e90df7a54030f7308061.tar perl-URPM-27f70acbbb663974e567e90df7a54030f7308061.tar.gz perl-URPM-27f70acbbb663974e567e90df7a54030f7308061.tar.bz2 perl-URPM-27f70acbbb663974e567e90df7a54030f7308061.tar.xz perl-URPM-27f70acbbb663974e567e90df7a54030f7308061.zip |
add rpm5 wrapper functions, work in progress, URPM builds now at least :o)
Diffstat (limited to 'rpm5compat.h')
-rw-r--r-- | rpm5compat.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/rpm5compat.h b/rpm5compat.h new file mode 100644 index 0000000..565e0e9 --- /dev/null +++ b/rpm5compat.h @@ -0,0 +1,101 @@ +#define RPM_NULL_TYPE 0 +#define RPM_CHAR_TYPE RPM_UINT8_TYPE +#define RPM_INT8_TYPE RPM_UINT8_TYPE +#define RPM_INT16_TYPE RPM_UINT16_TYPE +#define RPM_INT32_TYPE RPM_UINT32_TYPE + +#include <rpm/rpmio.h> +#include <rpm/pkgio.h> +#include <rpm/rpmcb.h> +# define _RPMTAG_INTERNAL +#include <rpm/rpmtag.h> +#include <rpm/rpmts.h> + + +enum hMagic { + HEADER_MAGIC_NO = 0, + HEADER_MAGIC_YES = 1 +}; + + +typedef uint32_t * hTAG_t; +typedef uint32_t * hTYP_t; +typedef const void * hPTR_t; +typedef uint32_t * hCNT_t; +typedef uint32_t int_32; +typedef uint16_t uint_16; +typedef uint8_t byte; +typedef union hRET_s { + const void * ptr; + const char ** argv; + const char * str; + uint32_t * ui32p; + uint16_t * ui16p; + uint32_t * i32p; + uint16_t * i16p; + uint8_t * i8p; +} * hRET_t; + +static inline int headerGetEntry(Header h, int_32 tag, hTYP_t type, void ** p, hCNT_t c){ + HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); + int rc; + + he->tag = tag; + rc = headerGet(h, he, tag); + if (rc) { + if (type) *type = he->t; + if (p) *(void **) p = he->p.ptr; + if (c) *c = he->c; + } + return rc; +} + +/*static Header headerRead(FD_t fd, enum hMagic magicp){ + +}*/ + +static int headerAddEntry(Header h, int_32 tag, int_32 type, const void * p, int_32 c) { + HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); + he->tag = tag; + he->t = type; + he->p.str = p; + he->c = c; + return headerPut(h, he, 0); +} + +static int headerRemoveEntry(Header h, int_32 tag) { + HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); + + he->tag = (rpmTag)tag; + return headerDel(h, he, 0); +} + +static int headerNextIterator(HeaderIterator hi, hTAG_t tag, hTYP_t type, hPTR_t * p, hCNT_t c) { + HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he)); + headerNext(hi, he, 0); +} + +static HeaderIterator headerFreeIterator(HeaderIterator hi) { + return headerFini(hi); +} + +static HeaderIterator headerInitIterator(Header h){ + return headerInit(h); +} + +static int headerWrite(void * _fd, Header h, enum hMagic magicp) { + const char item[] = "Header"; + Header nh = NULL; + const char * msg = NULL; + rpmRC rc = rpmpkgWrite(item, _fd, nh, &msg); + if (rc != RPMRC_OK) { +/* rpmlog(RPMLOG_ERR, "%s: %s: %s\n", sigtarget, item, + (msg && *msg ? msg : "write failed\n"));*/ + msg = _free(msg); + rc = RPMRC_FAIL; +// goto exit; + } + msg = _free(msg); + return rc; +} + |