/* ALLOC overrides MINMEM */
int allocMem = flags & HEADERGET_ALLOC;
int minMem = allocMem ? 0 : flags & HEADERGET_MINMEM;
+ int argvArray = (flags & HEADERGET_ARGV) ? 1 : 0;
assert(td != NULL);
+ td->flags = RPMTD_IMMUTABLE;
switch (entry->info.type) {
case RPM_BIN_TYPE:
/*
case RPM_STRING_ARRAY_TYPE:
case RPM_I18NSTRING_TYPE:
{ const char ** ptrEntry;
- int tableSize = count * sizeof(char *);
+ int tableSize = (count + argvArray) * sizeof(char *);
char * t;
int i;
t = strchr(t, 0);
t++;
}
+ if (argvArray) {
+ *ptrEntry = NULL;
+ td->flags |= RPMTD_ARGV;
+ }
} break;
case RPM_CHAR_TYPE:
case RPM_INT8_TYPE:
td->type = entry->info.type;
td->count = count;
- td->flags = RPMTD_IMMUTABLE;
if (td->data && entry->data != td->data) {
td->flags |= RPMTD_ALLOCED;
}
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 */
} headerGetFlags;
/** \ingroup header
RPMTD_ALLOCED = (1 << 0), /* was memory allocated? */
RPMTD_PTR_ALLOCED = (1 << 1), /* were array pointers allocated? */
RPMTD_IMMUTABLE = (1 << 2), /* header data or modifiable? */
+ RPMTD_ARGV = (1 << 3), /* string array is NULL-terminated? */
} rpmtdFlags;
/** \ingroup rpmtd