00001 #ifndef H_HEADER_INTERNAL
00002 #define H_HEADER_INTERNAL
00003
00008 #include <header.h>
00009
00010 #if !defined(__LCLINT__)
00011 #include <netinet/in.h>
00012 #endif
00013
00014 #define INDEX_MALLOC_SIZE 8
00015
00016
00017
00018
00019 #define HEADER_OLDFILENAMES 1027
00020 #define HEADER_BASENAMES 1117
00021
00025 typedef struct entryInfo_s * entryInfo;
00026 struct entryInfo_s {
00027 int_32 tag;
00028 int_32 type;
00029 int_32 offset;
00030 int_32 count;
00031 };
00032
00033 #define REGION_TAG_TYPE RPM_BIN_TYPE
00034 #define REGION_TAG_COUNT sizeof(struct entryInfo_s)
00035
00036 #define ENTRY_IS_REGION(_e) \
00037 (((_e)->info.tag >= HEADER_IMAGE) && ((_e)->info.tag < HEADER_REGIONS))
00038 #define ENTRY_IN_REGION(_e) ((_e)->info.offset < 0)
00039
00043 typedef struct indexEntry_s * indexEntry;
00044 struct indexEntry_s {
00045 struct entryInfo_s info;
00046 void * data;
00047 int length;
00048 int rdlen;
00049 };
00050
00054 struct headerToken {
00055 struct HV_s hv;
00056
00057 void * blob;
00058 indexEntry index;
00059 int indexUsed;
00060 int indexAlloced;
00061 int flags;
00062 #define HEADERFLAG_SORTED (1 << 0)
00063 #define HEADERFLAG_ALLOCATED (1 << 1)
00064 #define HEADERFLAG_LEGACY (1 << 2)
00065 #define HEADERFLAG_DEBUG (1 << 3)
00066 int nrefs;
00067 };
00068
00071 typedef struct sprintfTag_s * sprintfTag;
00072 struct sprintfTag_s {
00073 headerTagTagFunction ext;
00074 int extNum;
00075 int_32 tag;
00076 int justOne;
00077 int arrayCount;
00078 char * format;
00079 char * type;
00080 int pad;
00081 };
00082
00085 typedef struct extensionCache_s * extensionCache;
00086 struct extensionCache_s {
00087 int_32 type;
00088 int_32 count;
00089 int avail;
00090 int freeit;
00091 const void * data;
00092 };
00093
00096 typedef struct sprintfToken * sprintfToken;
00097
00098 struct sprintfToken {
00099 enum {
00100 PTOK_NONE = 0,
00101 PTOK_TAG,
00102 PTOK_ARRAY,
00103 PTOK_STRING,
00104 PTOK_COND
00105 } type;
00106 union {
00107 struct {
00108 sprintfToken format;
00109 int numTokens;
00110 } array;
00111 struct sprintfTag_s tag;
00112 struct {
00113 char * string;
00114 int len;
00115 } string;
00116 struct {
00117 sprintfToken ifFormat;
00118 int numIfTokens;
00119 sprintfToken elseFormat;
00120 int numElseTokens;
00121 struct sprintfTag_s tag;
00122 } cond;
00123 } u;
00124 };
00125
00126
00127 #ifdef __cplusplus
00128 extern "C" {
00129 #endif
00130
00137
00138 char ** headerGetLangs(Header h)
00139 ;
00140
00153
00154
00155 int headerGetRawEntry(Header h, int_32 tag,
00156 hTYP_t type,
00157 hPTR_t * p,
00158 hCNT_t c)
00159
00160 ;
00161
00162
00163
00169
00170 static inline int headerUsageCount(Header h) {
00171 return h->nrefs;
00172 }
00173
00174
00182
00183 void headerDump(Header h, FILE *f, int flags,
00184 const struct headerTagTableEntry_s * tags)
00185
00186 ;
00187 #define HEADER_DUMP_INLINE 1
00188
00189 #ifdef __cplusplus
00190 }
00191 #endif
00192
00193 #endif