Blame lib/header_internal.h

2ff057
#ifndef H_HEADER_INTERNAL
2ff057
#define H_HEADER_INTERNAL
2ff057
2ff057
/** \ingroup header
2ff057
 * \file lib/header_internal.h
2ff057
 */
2ff057
2ff057
#include <rpm/header.h>
2ff057
#include <netinet/in.h>
2ff057
2ff057
/** \ingroup header
2ff057
 * Description of tag data.
2ff057
 */
2ff057
typedef struct entryInfo_s * entryInfo;
2ff057
struct entryInfo_s {
2ff057
    rpm_tag_t tag;		/*!< Tag identifier. */
2ff057
    rpm_tagtype_t type;		/*!< Tag data type. */
2ff057
    int32_t offset;		/*!< Offset into data segment (ondisk only). */
2ff057
    rpm_count_t count;		/*!< Number of tag elements. */
2ff057
};
2ff057
2ff057
typedef struct hdrblob_s * hdrblob;
2ff057
struct hdrblob_s {
2ff057
    int32_t *ei;
2ff057
    int32_t il;
2ff057
    int32_t dl;
2ff057
    entryInfo pe;
2ff057
    int32_t pvlen;
2ff057
    uint8_t *dataStart;
2ff057
    uint8_t *dataEnd;
2ff057
2ff057
    rpmTagVal regionTag;
2ff057
    int32_t ril;
2ff057
    int32_t rdl;
2ff057
};
2ff057
2ff057
#ifdef __cplusplus
2ff057
extern "C" {
2ff057
#endif
2ff057
2ff057
/* convert entry info to host endianess */
2ff057
static inline void ei2h(const struct entryInfo_s *pe, struct entryInfo_s *info)
2ff057
{
2ff057
    info->tag = ntohl(pe->tag);
2ff057
    info->type = ntohl(pe->type);
2ff057
    info->offset = ntohl(pe->offset);
2ff057
    info->count = ntohl(pe->count);
2ff057
}
2ff057
2ff057
static inline void ei2td(const struct entryInfo_s *info,
2ff057
		  unsigned char * dataStart, size_t len,
2ff057
		  struct rpmtd_s *td)
2ff057
{
2ff057
    td->tag = info->tag;
2ff057
    td->type = info->type;
2ff057
    td->count = info->count;
2ff057
    td->size = len;
2ff057
    td->data = dataStart + info->offset;
2ff057
    td->ix = -1;
2ff057
    td->flags = RPMTD_IMMUTABLE;
2ff057
}
2ff057
2ff057
RPM_GNUC_INTERNAL
2ff057
hdrblob hdrblobCreate(void);
2ff057
2ff057
RPM_GNUC_INTERNAL
2ff057
hdrblob hdrblobFree(hdrblob blob);
2ff057
2ff057
RPM_GNUC_INTERNAL
2ff057
rpmRC hdrblobInit(const void *uh, size_t uc,
2ff057
		rpmTagVal regionTag, int exact_size,
2ff057
		struct hdrblob_s *blob, char **emsg);
2ff057
2ff057
RPM_GNUC_INTERNAL
2ff057
rpmRC hdrblobRead(FD_t fd, int magic, int exact_size, rpmTagVal regionTag, hdrblob blob, char **emsg);
2ff057
2ff057
RPM_GNUC_INTERNAL
2ff057
rpmRC hdrblobImport(hdrblob blob, int fast, Header *hdrp, char **emsg);
2ff057
2ff057
RPM_GNUC_INTERNAL
2ff057
rpmRC hdrblobGet(hdrblob blob, uint32_t tag, rpmtd td);
2ff057
2ff057
/** \ingroup header
2ff057
 * Set header instance (rpmdb record number)
2ff057
 * @param h		header
2ff057
 * @param instance	record number
2ff057
 */
2ff057
RPM_GNUC_INTERNAL
2ff057
void headerSetInstance(Header h, unsigned int instance);
2ff057
2ff057
/* Package IO helper to consolidate partial read and error handling */
2ff057
RPM_GNUC_INTERNAL
2ff057
ssize_t Freadall(FD_t fd, void * buf, ssize_t size);
2ff057
2ff057
RPM_GNUC_INTERNAL
2ff057
int headerIsSourceHeuristic(Header h);
2ff057
#ifdef __cplusplus
2ff057
}   
2ff057
#endif
2ff057
2ff057
#endif  /* H_HEADER_INTERNAL */