Move the higher level convenience functions out of header.c
- header.c is big enough as it is, and none of these things needs header struct internals for anything - no functional changes, just moving stuff around
This commit is contained in:
parent
bb9878ed30
commit
220adf02de
177
lib/header.c
177
lib/header.c
|
@ -1486,100 +1486,6 @@ int headerPut(Header h, rpmtd td, headerPutFlags flags)
|
|||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sanity check data types against tag table before putting. Assume
|
||||
* append on all array-types.
|
||||
*/
|
||||
static int headerPutType(Header h, rpmTag tag, rpmTagType reqtype,
|
||||
rpm_constdata_t data, rpm_count_t size)
|
||||
{
|
||||
struct rpmtd_s td;
|
||||
rpmTagType type = rpmTagGetType(tag);
|
||||
headerPutFlags flags = HEADERPUT_APPEND;
|
||||
int valid = 1;
|
||||
|
||||
/* Basic sanity checks: type must match and there must be data to put */
|
||||
if ((type & RPM_MASK_TYPE) != reqtype
|
||||
|| size < 1 || data == NULL || h == NULL) {
|
||||
valid = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Non-array types can't be appended to. Binary types use size
|
||||
* for data length, for other non-array types size must be 1.
|
||||
*/
|
||||
if ((type & RPM_MASK_RETURN_TYPE) != RPM_ARRAY_RETURN_TYPE) {
|
||||
flags = HEADERPUT_DEFAULT;
|
||||
if ((type & RPM_MASK_TYPE) != RPM_BIN_TYPE && size != 1) {
|
||||
valid = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
rpmtdReset(&td);
|
||||
td.tag = tag;
|
||||
td.type = type & RPM_MASK_TYPE;
|
||||
td.data = (void *) data;
|
||||
td.count = size;
|
||||
|
||||
valid = headerPut(h, &td, flags);
|
||||
}
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
int headerPutString(Header h, rpmTag tag, const char *val)
|
||||
{
|
||||
rpmTagType type = rpmTagGetType(tag) & RPM_MASK_TYPE;
|
||||
const void *sptr = NULL;
|
||||
|
||||
/* string arrays expect char **, arrange that */
|
||||
if (type == RPM_STRING_ARRAY_TYPE || type == RPM_I18NSTRING_TYPE) {
|
||||
sptr = &val;
|
||||
} else if (type == RPM_STRING_TYPE) {
|
||||
sptr = val;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return headerPutType(h, tag, type, sptr, 1);
|
||||
}
|
||||
|
||||
int headerPutStringArray(Header h, rpmTag tag, const char **array, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_STRING_ARRAY_TYPE, array, size);
|
||||
}
|
||||
|
||||
int headerPutChar(Header h, rpmTag tag, char *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_CHAR_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutUint8(Header h, rpmTag tag, uint8_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_INT8_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutUint16(Header h, rpmTag tag, uint16_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_INT16_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutUint32(Header h, rpmTag tag, uint32_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_INT32_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutUint64(Header h, rpmTag tag, uint64_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_INT64_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutBin(Header h, rpmTag tag, uint8_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_BIN_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerAddI18NString(Header h, rpmTag tag, const char * string,
|
||||
const char * lang)
|
||||
{
|
||||
|
@ -1822,48 +1728,6 @@ int headerNext(HeaderIterator hi, rpmtd td)
|
|||
return ((rc == 1) ? 1 : 0);
|
||||
}
|
||||
|
||||
/** \ingroup header
|
||||
* Duplicate a header.
|
||||
* @param h header
|
||||
* @return new header instance
|
||||
*/
|
||||
Header headerCopy(Header h)
|
||||
{
|
||||
Header nh = headerNew();
|
||||
HeaderIterator hi;
|
||||
struct rpmtd_s td;
|
||||
|
||||
hi = headerInitIterator(h);
|
||||
while (headerNext(hi, &td)) {
|
||||
if (rpmtdCount(&td) > 0) {
|
||||
(void) headerPut(nh, &td, HEADERPUT_DEFAULT);
|
||||
}
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
hi = headerFreeIterator(hi);
|
||||
|
||||
return headerReload(nh, HEADER_IMAGE);
|
||||
}
|
||||
|
||||
void headerCopyTags(Header headerFrom, Header headerTo,
|
||||
const rpmTag * tagstocopy)
|
||||
{
|
||||
const rpmTag * p;
|
||||
struct rpmtd_s td;
|
||||
|
||||
if (headerFrom == headerTo)
|
||||
return;
|
||||
|
||||
for (p = tagstocopy; *p != 0; p++) {
|
||||
if (headerIsEntry(headerTo, *p))
|
||||
continue;
|
||||
if (!headerGet(headerFrom, *p, &td, HEADERGET_MINMEM))
|
||||
continue;
|
||||
(void) headerPut(headerTo, &td, HEADERPUT_DEFAULT);
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int headerGetInstance(Header h)
|
||||
{
|
||||
return h ? h->instance : 0;
|
||||
|
@ -1874,44 +1738,3 @@ void headerSetInstance(Header h, unsigned int instance)
|
|||
h->instance = instance;
|
||||
}
|
||||
|
||||
char * headerGetAsString(Header h, rpmTag tag)
|
||||
{
|
||||
char *res = NULL;
|
||||
struct rpmtd_s td;
|
||||
|
||||
if (headerGet(h, tag, &td, HEADERGET_EXT)) {
|
||||
if (rpmtdCount(&td) == 1) {
|
||||
res = rpmtdFormat(&td, RPMTD_FORMAT_STRING, NULL);
|
||||
}
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
const char * headerGetString(Header h, rpmTag tag)
|
||||
{
|
||||
const char *res = NULL;
|
||||
struct rpmtd_s td;
|
||||
|
||||
if (headerGet(h, tag, &td, HEADERGET_MINMEM)) {
|
||||
if (rpmtdCount(&td) == 1) {
|
||||
res = rpmtdGetString(&td);
|
||||
}
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
uint64_t headerGetNumber(Header h, rpmTag tag)
|
||||
{
|
||||
uint64_t res = 0;
|
||||
struct rpmtd_s td;
|
||||
|
||||
if (headerGet(h, tag, &td, HEADERGET_EXT)) {
|
||||
if (rpmtdCount(&td) == 1) {
|
||||
res = rpmtdGetNumber(&td);
|
||||
}
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
173
lib/headerutil.c
173
lib/headerutil.c
|
@ -69,3 +69,176 @@ int headerIsSource(Header h)
|
|||
return (!headerIsEntry(h, RPMTAG_SOURCERPM));
|
||||
}
|
||||
|
||||
Header headerCopy(Header h)
|
||||
{
|
||||
Header nh = headerNew();
|
||||
HeaderIterator hi;
|
||||
struct rpmtd_s td;
|
||||
|
||||
hi = headerInitIterator(h);
|
||||
while (headerNext(hi, &td)) {
|
||||
if (rpmtdCount(&td) > 0) {
|
||||
(void) headerPut(nh, &td, HEADERPUT_DEFAULT);
|
||||
}
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
hi = headerFreeIterator(hi);
|
||||
|
||||
return headerReload(nh, HEADER_IMAGE);
|
||||
}
|
||||
|
||||
void headerCopyTags(Header headerFrom, Header headerTo,
|
||||
const rpmTag * tagstocopy)
|
||||
{
|
||||
const rpmTag * p;
|
||||
struct rpmtd_s td;
|
||||
|
||||
if (headerFrom == headerTo)
|
||||
return;
|
||||
|
||||
for (p = tagstocopy; *p != 0; p++) {
|
||||
if (headerIsEntry(headerTo, *p))
|
||||
continue;
|
||||
if (!headerGet(headerFrom, *p, &td, HEADERGET_MINMEM))
|
||||
continue;
|
||||
(void) headerPut(headerTo, &td, HEADERPUT_DEFAULT);
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
}
|
||||
|
||||
char * headerGetAsString(Header h, rpmTag tag)
|
||||
{
|
||||
char *res = NULL;
|
||||
struct rpmtd_s td;
|
||||
|
||||
if (headerGet(h, tag, &td, HEADERGET_EXT)) {
|
||||
if (rpmtdCount(&td) == 1) {
|
||||
res = rpmtdFormat(&td, RPMTD_FORMAT_STRING, NULL);
|
||||
}
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
const char * headerGetString(Header h, rpmTag tag)
|
||||
{
|
||||
const char *res = NULL;
|
||||
struct rpmtd_s td;
|
||||
|
||||
if (headerGet(h, tag, &td, HEADERGET_MINMEM)) {
|
||||
if (rpmtdCount(&td) == 1) {
|
||||
res = rpmtdGetString(&td);
|
||||
}
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
uint64_t headerGetNumber(Header h, rpmTag tag)
|
||||
{
|
||||
uint64_t res = 0;
|
||||
struct rpmtd_s td;
|
||||
|
||||
if (headerGet(h, tag, &td, HEADERGET_EXT)) {
|
||||
if (rpmtdCount(&td) == 1) {
|
||||
res = rpmtdGetNumber(&td);
|
||||
}
|
||||
rpmtdFreeData(&td);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sanity check data types against tag table before putting. Assume
|
||||
* append on all array-types.
|
||||
*/
|
||||
static int headerPutType(Header h, rpmTag tag, rpmTagType reqtype,
|
||||
rpm_constdata_t data, rpm_count_t size)
|
||||
{
|
||||
struct rpmtd_s td;
|
||||
rpmTagType type = rpmTagGetType(tag);
|
||||
headerPutFlags flags = HEADERPUT_APPEND;
|
||||
int valid = 1;
|
||||
|
||||
/* Basic sanity checks: type must match and there must be data to put */
|
||||
if ((type & RPM_MASK_TYPE) != reqtype
|
||||
|| size < 1 || data == NULL || h == NULL) {
|
||||
valid = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Non-array types can't be appended to. Binary types use size
|
||||
* for data length, for other non-array types size must be 1.
|
||||
*/
|
||||
if ((type & RPM_MASK_RETURN_TYPE) != RPM_ARRAY_RETURN_TYPE) {
|
||||
flags = HEADERPUT_DEFAULT;
|
||||
if ((type & RPM_MASK_TYPE) != RPM_BIN_TYPE && size != 1) {
|
||||
valid = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
rpmtdReset(&td);
|
||||
td.tag = tag;
|
||||
td.type = type & RPM_MASK_TYPE;
|
||||
td.data = (void *) data;
|
||||
td.count = size;
|
||||
|
||||
valid = headerPut(h, &td, flags);
|
||||
}
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
int headerPutString(Header h, rpmTag tag, const char *val)
|
||||
{
|
||||
rpmTagType type = rpmTagGetType(tag) & RPM_MASK_TYPE;
|
||||
const void *sptr = NULL;
|
||||
|
||||
/* string arrays expect char **, arrange that */
|
||||
if (type == RPM_STRING_ARRAY_TYPE || type == RPM_I18NSTRING_TYPE) {
|
||||
sptr = &val;
|
||||
} else if (type == RPM_STRING_TYPE) {
|
||||
sptr = val;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return headerPutType(h, tag, type, sptr, 1);
|
||||
}
|
||||
|
||||
int headerPutStringArray(Header h, rpmTag tag, const char **array, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_STRING_ARRAY_TYPE, array, size);
|
||||
}
|
||||
|
||||
int headerPutChar(Header h, rpmTag tag, char *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_CHAR_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutUint8(Header h, rpmTag tag, uint8_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_INT8_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutUint16(Header h, rpmTag tag, uint16_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_INT16_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutUint32(Header h, rpmTag tag, uint32_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_INT32_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutUint64(Header h, rpmTag tag, uint64_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_INT64_TYPE, val, size);
|
||||
}
|
||||
|
||||
int headerPutBin(Header h, rpmTag tag, uint8_t *val, rpm_count_t size)
|
||||
{
|
||||
return headerPutType(h, tag, RPM_BIN_TYPE, val, size);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue