diff options
Diffstat (limited to 'lib/formats.c')
-rw-r--r-- | lib/formats.c | 150 |
1 files changed, 50 insertions, 100 deletions
diff --git a/lib/formats.c b/lib/formats.c index 972e0009d..b24d80b3f 100644 --- a/lib/formats.c +++ b/lib/formats.c @@ -32,29 +32,21 @@ struct headerFormatFunc_s { /** * barebones string representation with no extra formatting * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * stringFormat(rpmtd td, char *formatPrefix) +static char * stringFormat(rpmtd td) { - const char *str = NULL; - char *val = NULL, *buf = NULL; + char *val = NULL; switch (rpmtdClass(td)) { case RPM_NUMERIC_CLASS: - strcat(formatPrefix, PRIu64); - rasprintf(&val, formatPrefix, rpmtdGetNumber(td)); + rasprintf(&val, "%" PRIu64, rpmtdGetNumber(td)); break; case RPM_STRING_CLASS: - str = rpmtdGetString(td); - strcat(formatPrefix, "s"); - rasprintf(&val, formatPrefix, str); + val = xstrdup(rpmtdGetString(td)); break; case RPM_BINARY_CLASS: - buf = pgpHexStr(td->data, td->count); - strcat(formatPrefix, "s"); - rasprintf(&val, formatPrefix, buf); - free(buf); + val = pgpHexStr(td->data, td->count); break; default: val = xstrdup("(unknown type)"); @@ -63,15 +55,14 @@ static char * stringFormat(rpmtd td, char *formatPrefix) return val; } -static char * numFormat(rpmtd td, char * formatPrefix, char *format) +static char * numFormat(rpmtd td, const char *format) { char * val = NULL; if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { val = xstrdup(_("(not a number)")); } else { - strcat(formatPrefix, format); - rasprintf(&val, formatPrefix, rpmtdGetNumber(td)); + rasprintf(&val, format, rpmtdGetNumber(td)); } return val; @@ -79,32 +70,28 @@ static char * numFormat(rpmtd td, char * formatPrefix, char *format) /** * octalFormat. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * octalFormat(rpmtd td, char * formatPrefix) +static char * octalFormat(rpmtd td) { - return numFormat(td, formatPrefix, "o"); + return numFormat(td, "%o"); } /** * hexFormat. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * hexFormat(rpmtd td, char * formatPrefix) +static char * hexFormat(rpmtd td) { - return numFormat(td, formatPrefix, "x"); + return numFormat(td, "%x"); } /** * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * realDateFormat(rpmtd td, char * formatPrefix, - const char * strftimeFormat) +static char * realDateFormat(rpmtd td, const char * strftimeFormat) { char * val = NULL; @@ -116,12 +103,11 @@ static char * realDateFormat(rpmtd td, char * formatPrefix, time_t dateint = rpmtdGetNumber(td); tstruct = localtime(&dateint); - strcat(formatPrefix, "s"); - + /* XXX TODO: deal with non-fitting date string correctly */ buf[0] = '\0'; if (tstruct) (void) strftime(buf, sizeof(buf) - 1, strftimeFormat, tstruct); - rasprintf(&val, formatPrefix, buf); + val = xstrdup(buf); } return val; @@ -130,42 +116,36 @@ static char * realDateFormat(rpmtd td, char * formatPrefix, /** * Format a date. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * dateFormat(rpmtd td, char * formatPrefix) +static char * dateFormat(rpmtd td) { - return realDateFormat(td, formatPrefix, _("%c")); + return realDateFormat(td, _("%c")); } /** * Format a day. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * dayFormat(rpmtd td, char * formatPrefix) +static char * dayFormat(rpmtd td) { - return realDateFormat(td, formatPrefix, _("%a %b %d %Y")); + return realDateFormat(td, _("%a %b %d %Y")); } /** * Return shell escape formatted data. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * shescapeFormat(rpmtd td, char * formatPrefix) +static char * shescapeFormat(rpmtd td) { char * result = NULL, * dst, * src; if (rpmtdClass(td) == RPM_NUMERIC_CLASS) { - strcat(formatPrefix, PRIu64); - rasprintf(&result, formatPrefix, rpmtdGetNumber(td)); + rasprintf(&result, "%" PRIu64, rpmtdGetNumber(td)); } else { - char *buf = NULL; - strcat(formatPrefix, "s"); - rasprintf(&buf, formatPrefix, rpmtdGetString(td)); + char *buf = xstrdup(rpmtdGetString(td));; result = dst = xmalloc(strlen(buf) * 4 + 3); *dst++ = '\''; @@ -191,10 +171,9 @@ static char * shescapeFormat(rpmtd td, char * formatPrefix) /** * Identify type of trigger. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * triggertypeFormat(rpmtd td, char * formatPrefix) +static char * triggertypeFormat(rpmtd td) { char * val; @@ -219,10 +198,9 @@ static char * triggertypeFormat(rpmtd td, char * formatPrefix) /** * Identify type of dependency. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * deptypeFormat(rpmtd td, char * formatPrefix) +static char * deptypeFormat(rpmtd td) { char *val = NULL; if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { @@ -268,20 +246,16 @@ static char * deptypeFormat(rpmtd td, char * formatPrefix) /** * Format file permissions for display. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * permsFormat(rpmtd td, char * formatPrefix) +static char * permsFormat(rpmtd td) { char * val = NULL; if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { val = xstrdup(_("(not a number)")); } else { - char *buf = rpmPermsString(rpmtdGetNumber(td)); - strcat(formatPrefix, "s"); - rasprintf(&val, formatPrefix, buf); - free(buf); + val = rpmPermsString(rpmtdGetNumber(td)); } return val; @@ -290,20 +264,16 @@ static char * permsFormat(rpmtd td, char * formatPrefix) /** * Format file flags for display. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * fflagsFormat(rpmtd td, char * formatPrefix) +static char * fflagsFormat(rpmtd td) { char * val = NULL; if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { val = xstrdup(_("(not a number)")); } else { - char *buf = rpmFFlagsString(rpmtdGetNumber(td), ""); - strcat(formatPrefix, "s"); - rasprintf(&val, formatPrefix, buf); - free(buf); + val = rpmFFlagsString(rpmtdGetNumber(td), ""); } return val; @@ -313,10 +283,9 @@ static char * fflagsFormat(rpmtd td, char * formatPrefix) * Wrap a pubkey in ascii armor for display. * @todo Permit selectable display formats (i.e. binary). * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * armorFormat(rpmtd td, char * formatPrefix) +static char * armorFormat(rpmtd td) { const char * enc; const unsigned char * s; @@ -364,22 +333,18 @@ static char * armorFormat(rpmtd td, char * formatPrefix) * Encode binary data in base64 for display. * @todo Permit selectable display formats (i.e. binary). * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * base64Format(rpmtd td, char * formatPrefix) +static char * base64Format(rpmtd td) { char * val = NULL; if (rpmtdType(td) != RPM_BIN_TYPE) { val = xstrdup(_("(not a blob)")); } else { - char * enc; - if ((enc = b64encode(td->data, td->count, -1)) != NULL) { - strcat(formatPrefix, "s"); - rasprintf(&val, formatPrefix, enc ? enc : ""); - free(enc); - } + val = b64encode(td->data, td->count, -1); + if (val == NULL) + val = xstrdup(""); } return val; @@ -388,10 +353,9 @@ static char * base64Format(rpmtd td, char * formatPrefix) /** * Wrap tag data in simple header xml markup. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * xmlFormat(rpmtd td, char * formatPrefix) +static char * xmlFormat(rpmtd td) { const char *xtag = NULL; char *val = NULL; @@ -443,17 +407,15 @@ static char * xmlFormat(rpmtd td, char * formatPrefix) } free(s); - strcat(formatPrefix, "s"); return val; } /** * Display signature fingerprint and time. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * pgpsigFormat(rpmtd td, char * formatPrefix) +static char * pgpsigFormat(rpmtd td) { char * val = NULL; @@ -517,10 +479,9 @@ static char * pgpsigFormat(rpmtd td, char * formatPrefix) /** * Format dependency flags for display. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * depflagsFormat(rpmtd td, char * formatPrefix) +static char * depflagsFormat(rpmtd td) { char * val = NULL; @@ -528,18 +489,14 @@ static char * depflagsFormat(rpmtd td, char * formatPrefix) val = xstrdup(_("(not a number)")); } else { uint64_t anint = rpmtdGetNumber(td); - char buf[10]; - buf[0] = '\0'; + val = xcalloc(4, 1); if (anint & RPMSENSE_LESS) - strcat(buf, "<"); + strcat(val, "<"); if (anint & RPMSENSE_GREATER) - strcat(buf, ">"); + strcat(val, ">"); if (anint & RPMSENSE_EQUAL) - strcat(buf, "="); - - strcat(formatPrefix, "s"); - rasprintf(&val, formatPrefix, buf); + strcat(val, "="); } return val; @@ -548,18 +505,16 @@ static char * depflagsFormat(rpmtd td, char * formatPrefix) /** * Return tag container array size. * @param td tag data container - * @param formatPrefix sprintf format string * @return formatted string */ -static char * arraysizeFormat(rpmtd td, char * formatPrefix) +static char * arraysizeFormat(rpmtd td) { char *val = NULL; - strcat(formatPrefix, "u"); - rasprintf(&val, formatPrefix, rpmtdCount(td)); + rasprintf(&val, "%u", rpmtdCount(td)); return val; } -static char * fstateFormat(rpmtd td, char * formatPrefix) +static char * fstateFormat(rpmtd td) { char * val = NULL; @@ -592,38 +547,34 @@ static char * fstateFormat(rpmtd td, char * formatPrefix) break; } - strcat(formatPrefix, "s"); - rasprintf(&val, formatPrefix, str); + val = xstrdup(str); } return val; } -static char * verifyFlags(rpmtd td, char * formatPrefix, const char *pad) +static char * verifyFlags(rpmtd td, const char *pad) { char * val = NULL; if (rpmtdClass(td) != RPM_NUMERIC_CLASS) { val = xstrdup(_("(not a number)")); } else { - strcat(formatPrefix, "s"); - char *buf = rpmVerifyString(rpmtdGetNumber(td), pad); - rasprintf(&val, formatPrefix, buf); - free(buf); + val = rpmVerifyString(rpmtdGetNumber(td), pad); } return val; } -static char * vflagsFormat(rpmtd td, char * formatPrefix) +static char * vflagsFormat(rpmtd td) { - return verifyFlags(td, formatPrefix, ""); + return verifyFlags(td, ""); } -static char * fstatusFormat(rpmtd td, char * formatPrefix) +static char * fstatusFormat(rpmtd td) { - return verifyFlags(td, formatPrefix, "."); + return verifyFlags(td, "."); } -static char * expandFormat(rpmtd td, char * formatPrefix) +static char * expandFormat(rpmtd td) { char *val = NULL; if (rpmtdClass(td) != RPM_STRING_CLASS) { @@ -631,7 +582,6 @@ static char * expandFormat(rpmtd td, char * formatPrefix) } else { val = rpmExpand(td->data, NULL); } - strcat(formatPrefix, "s"); return val; } |