1 /* RPM - Copyright (C) 1995 Red Hat Software
3 * header.h - routines for managing rpm tagged structures
6 /* WARNING: 1 means success, 0 means failure (yes, this is backwards) */
12 #if defined(__alpha__)
13 typedef long int int_64;
15 typedef short int int_16;
18 typedef unsigned int uint_32;
19 typedef unsigned short uint_16;
23 typedef long long int int_64;
25 typedef short int int_16;
28 typedef unsigned int uint_32;
29 typedef unsigned short uint_16;
32 typedef struct headerToken *Header;
33 typedef struct headerIteratorS *HeaderIterator;
35 struct headerTagTableEntry {
40 enum headerSprintfExtenstionType { HEADER_EXT_LAST = 0, HEADER_EXT_FORMAT,
41 HEADER_EXT_MORE, HEADER_EXT_TAG };
43 /* This will only ever be passed RPM_TYPE_INT32 or RPM_TYPE_STRING to
44 help keep things simple */
45 typedef char * (*headerTagFormatFunction)(int_32 type, const void * data,
47 int padding, int element);
48 typedef int (*headerTagTagFunction)(Header h, int_32 * type, void ** data,
49 int_32 * count, int * freeData);
51 struct headerSprintfExtension {
52 enum headerSprintfExtenstionType type;
56 headerTagFormatFunction formatFunction;
57 headerTagTagFunction tagFunction;
58 struct headerSprintfExtension * more;
62 /* This defines some basic conversions all header users would probably like
64 extern const struct headerSprintfExtension headerDefaultFormats[];
66 /* read and write a header from a file */
67 Header headerRead(int fd, int magicp);
68 void headerWrite(int fd, Header h, int magicp);
69 unsigned int headerSizeof(Header h, int magicp);
71 #define HEADER_MAGIC_NO 0
72 #define HEADER_MAGIC_YES 1
74 /* load and unload a header from a chunk of memory */
75 Header headerLoad(void *p);
76 void *headerUnload(Header h);
78 Header headerNew(void);
79 void headerFree(Header h);
81 /* dump a header to a file, in human readable format */
82 void headerDump(Header h, FILE *f, int flags,
83 const struct headerTagTableEntry * tags);
85 /* the returned string must be free()d */
86 char * headerSprintf(Header h, const char * fmt,
87 const struct headerTagTableEntry * tags,
88 const struct headerSprintfExtension * extentions,
91 #define HEADER_DUMP_INLINE 1
93 /* I18N items need an RPM_STRING_TYPE entry (used by default) and an
94 RPM_18NSTRING_TYPE table added. Dups are okay, but only defined for
95 iteration (with the exceptions noted below) */
96 int headerAddEntry(Header h, int_32 tag, int_32 type, void *p, int_32 c);
97 int headerModifyEntry(Header h, int_32 tag, int_32 type, void *p, int_32 c);
99 /* Appends item p to entry w/ tag and type as passed. Won't work on
100 RPM_STRING_TYPE. Any pointers from headerGetEntry() for this entry
101 are invalid after this call has been made! */
102 int headerAppendEntry(Header h, int_32 tag, int_32 type, void * p, int_32 c);
104 /* Will never return RPM_I18NSTRING_TYPE! RPM_STRING_TYPE elements w/
105 RPM_I18NSTRING_TYPE equivalent enreies are translated (if HEADER_I18NTABLE
106 entry is present). */
107 int headerGetEntry(Header h, int_32 tag, int_32 *type, void **p, int_32 *c);
109 /* If *type is RPM_NULL_TYPE any type will match, otherwise only *type will
111 int headerGetRawEntry(Header h, int_32 tag, int_32 *type, void **p, int_32 *c);
113 int headerIsEntry(Header h, int_32 tag);
114 /* removes all entries of type tag from the header, returns 1 if none were
116 int headerRemoveEntry(Header h, int_32 tag);
118 HeaderIterator headerInitIterator(Header h);
119 int headerNextIterator(HeaderIterator iter,
120 int_32 *tag, int_32 *type, void **p, int_32 *c);
121 void headerFreeIterator(HeaderIterator iter);
123 Header headerCopy(Header h);
124 void headerSort(Header h);
128 #define RPM_NULL_TYPE 0
129 #define RPM_CHAR_TYPE 1
130 #define RPM_INT8_TYPE 2
131 #define RPM_INT16_TYPE 3
132 #define RPM_INT32_TYPE 4
133 /* #define RPM_INT64_TYPE 5 ---- These aren't supported (yet) */
134 #define RPM_STRING_TYPE 6
135 #define RPM_BIN_TYPE 7
136 #define RPM_STRING_ARRAY_TYPE 8
137 #define RPM_I18NSTRING_TYPE 9
139 /* Tags -- general use tags should start at 1000 (RPM's tag space starts
142 #define HEADER_I18NTABLE 100