/usr/include/rpm/header.h is in librpm-dev 4.14.1+dfsg1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 | #ifndef H_HEADER
#define H_HEADER
/** \ingroup header
* \file lib/header.h
*
* An rpm header carries all information about a package. A header is
* a collection of data elements called tags. Each tag has a data type,
* and includes 1 or more values.
*
*/
/* RPM - Copyright (C) 1995-2001 Red Hat Software */
#include <rpm/rpmio.h>
#include <rpm/rpmtypes.h>
#include <rpm/rpmtd.h>
#include <rpm/rpmutil.h>
#ifdef __cplusplus
extern "C" {
#endif
/** \ingroup header
* Header magic value
*/
extern const unsigned char rpm_header_magic[8];
/** \ingroup header
* Include calculation for 8 bytes of (magic, 0)?
*/
enum hMagic {
HEADER_MAGIC_NO = 0,
HEADER_MAGIC_YES = 1
};
/** \ingroup header
* Create new (empty) header instance.
* @return header
*/
Header headerNew(void);
/** \ingroup header
* Dereference a header instance.
* @param h header
* @return NULL always
*/
Header headerFree( Header h);
/** \ingroup header
* Reference a header instance.
* @param h header
* @return new header reference
*/
Header headerLink(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
*/
unsigned int headerSizeof(Header h, int magicp);
/** \ingroup header
* Convert header to on-disk representation.
* @deprecated Use headerExport() instead
* @param h header (with pointers)
* @return on-disk header blob (i.e. with offsets)
*/
void * headerUnload(Header h);
/** \ingroup header
* Export header to on-disk representation.
* @param h header (with pointers)
* @retval bsize on-disk header blob size in bytes
* @return on-disk header blob (i.e. with offsets)
*/
void * headerExport(Header h, unsigned int * bsize);
/** \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)
*/
Header headerReload(Header h, rpmTagVal tag);
/** \ingroup header
* Duplicate a header.
* @param h header
* @return new header instance
*/
Header headerCopy(Header h);
/** \ingroup header
* Convert header to in-memory representation.
* @deprecated Use headerImport() instead
* @param uh on-disk header blob (i.e. with offsets)
* @return header
*/
Header headerLoad(void * uh);
/** \ingroup header
* Make a copy and convert header to in-memory representation.
* @deprecated Use headerImport() instead
* @param uh on-disk header blob (i.e. with offsets)
* @return header
*/
Header headerCopyLoad(const void * uh);
enum headerImportFlags_e {
HEADERIMPORT_COPY = (1 << 0), /* Make copy of blob on import? */
HEADERIMPORT_FAST = (1 << 1), /* Faster but less safe? */
};
typedef rpmFlags headerImportFlags;
/** \ingroup header
* Import header to in-memory representation.
* @param blob on-disk header blob (i.e. with offsets)
* @param bsize on-disk header blob size in bytes (0 if unknown)
* @param flags flags to control operation
* @return header
*/
Header headerImport(void *blob, unsigned int bsize, headerImportFlags flags);
/** \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)
*/
Header headerRead(FD_t fd, int 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
*/
int headerWrite(FD_t fd, Header h, int magicp);
/** \ingroup header
* Check if tag is in header.
* @param h header
* @param tag tag
* @return 1 on success, 0 on failure
*/
int headerIsEntry(Header h, rpmTagVal tag);
/** \ingroup header
* Modifier flags for headerGet() operation.
* For consistent behavior you'll probably want to use ALLOC to ensure
* the caller owns the data, but MINMEM is useful for avoiding extra
* copy of data when you are sure the header wont go away.
* Most of the time you'll probably want EXT too, but note that extensions
* tags don't generally honor the other flags, MINMEM, RAW, ALLOC and ARGV
* are only relevant for non-extension data.
*/
enum headerGetFlags_e {
HEADERGET_DEFAULT = 0, /* legacy headerGetEntry() behavior */
HEADERGET_MINMEM = (1 << 0), /* pointers can refer to header memory */
HEADERGET_EXT = (1 << 1), /* lookup extension types too */
HEADERGET_RAW = (1 << 2), /* return raw contents (no i18n lookups) */
HEADERGET_ALLOC = (1 << 3), /* always allocate memory for all data */
HEADERGET_ARGV = (1 << 4), /* return string arrays NULL-terminated */
};
typedef rpmFlags headerGetFlags;
/** \ingroup header
* Retrieve tag value.
* @param h header
* @param tag tag
* @retval td tag data container
* @param flags retrieval modifier flags
* @return 1 on success, 0 on failure
*/
int headerGet(Header h, rpmTagVal tag, rpmtd td, headerGetFlags flags);
enum headerPutFlags_e {
HEADERPUT_DEFAULT = 0,
HEADERPUT_APPEND = (1 << 0),
};
typedef rpmFlags headerPutFlags;
/** \ingroup header
* Add or append tag to header.
*
* @param h header
* @param td tag data container
* @param flags flags to control operation
* @return 1 on success, 0 on failure
*/
int headerPut(Header h, rpmtd td, headerPutFlags flags);
/** \ingroup header
* @{
* Type-safe methods for inserting tag data to header.
* Tag data type is validated to match the function type, ie things like
* headerPutUint32(h, RPMTAG_NAME, ...) will return failure. For non-array
* types size must equal 1, and data is checked to be non-NULL. For array
* types, add-or-append mode is always used.
*
* headerPutString() can be used on both RPM_STRING_TYPE and
* RPM_STRING_ARRAY_TYPE (to add a single string into the array) tags,
* for others the type must match exactly.
*
* These are intended to "do the right thing" in the common case, if you
* need more fine grained control use headerPut() & friends instead.
* @todo Make doxygen group these meaningfully.
*
* @param h header
* @param tag tag to insert
* @param val pointer to value(s)
* @param size number of items in array (1 or larger)
* @return 1 on success, 0 on failure
*
*/
int headerPutBin(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size);
int headerPutString(Header h, rpmTagVal tag, const char *val);
int headerPutStringArray(Header h, rpmTagVal tag, const char **val, rpm_count_t size);
int headerPutChar(Header h, rpmTagVal tag, const char *val, rpm_count_t size);
int headerPutUint8(Header h, rpmTagVal tag, const uint8_t *val, rpm_count_t size);
int headerPutUint16(Header h, rpmTagVal tag, const uint16_t *val, rpm_count_t size);
int headerPutUint32(Header h, rpmTagVal tag, const uint32_t *val, rpm_count_t size);
int headerPutUint64(Header h, rpmTagVal tag, const uint64_t *val, rpm_count_t size);
/** @} */
/** \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 headerMod()).
* \endverbatim
* This function is intended to just "do the right thing". If you need
* more fine grained control use headerPut() and headerMod().
*
* @param h header
* @param tag tag
* @param string tag value
* @param lang locale
* @return 1 on success, 0 on failure
*/
int headerAddI18NString(Header h, rpmTagVal 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 td tag data container
* @return 1 on success, 0 on failure
*/
int headerMod(Header h, rpmtd td);
/** \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)
*/
int headerDel(Header h, rpmTagVal 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
* @retval errmsg error message (if any)
* @return formatted output string (malloc'ed)
*/
char * headerFormat(Header h, const char * fmt, 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
*/
void headerCopyTags(Header headerFrom, Header headerTo,
const rpmTagVal * tagstocopy);
/** \ingroup header
* Destroy header tag iterator.
* @param hi header tag iterator
* @return NULL always
*/
HeaderIterator headerFreeIterator(HeaderIterator hi);
/** \ingroup header
* Create header tag iterator.
* @param h header
* @return header tag iterator
*/
HeaderIterator headerInitIterator(Header h);
/** \ingroup header
* Return next tag contents from header.
* @param hi header tag iterator
* @retval td tag data container
* @return 1 on success, 0 on failure
*/
int headerNext(HeaderIterator hi, rpmtd td);
/** \ingroup header
* Return next tag number from header.
* @param hi header tag iterator
* @return next tag, RPMTAG_NOT_FOUND to stop iteration
*/
rpmTagVal headerNextTag(HeaderIterator hi);
/** \ingroup header
* Return any non-array tag from header, converted to string
* @param h header
* @param tag tag to retrieve
* @return string pointer (malloced) or NULL on failure
*/
char * headerGetAsString(Header h, rpmTagVal tag);
/** \ingroup header
* Return a simple string tag from header
* @param h header
* @param tag tag to retrieve
* @return string pointer (to header memory) or NULL on failure
*/
const char * headerGetString(Header h, rpmTagVal tag);
/* \ingroup header
* Return a simple number tag (or extension) from header
* @param h header
* @param tag tag to retrieve
* @return numeric tag value or 0 on failure
*/
uint64_t headerGetNumber(Header h, rpmTagVal tag);
/** \ingroup header
* Check if header is a source or binary package header
* @param h header
* @return 0 == binary, 1 == source
*/
int headerIsSource(Header h);
/** \ingroup header
* Return header instance, ie is the header from rpmdb.
* @param h header
* @return rpmdb record number or 0
*/
unsigned int headerGetInstance(Header h);
typedef enum headerConvOps_e {
HEADERCONV_EXPANDFILELIST = 0,
HEADERCONV_COMPRESSFILELIST = 1,
HEADERCONV_RETROFIT_V3 = 2,
} headerConvOps;
/** \ingroup header
* Convert header to/from (legacy) data presentation
* @param h header
* @param op one of headerConvOps operations
* @return 1 on success, 0 on failure
*/
int headerConvert(Header h, int op);
#ifdef __cplusplus
}
#endif
#endif /* H_HEADER */
|