\fB:fstate\fR
Format file state.
.TP
+\fB:fstatus\fR
+Format file verify status.
+.TP
\fB:hex\fR
Format in hexadecimal.
.TP
return val;
}
-static char * vflagsFormat(rpmtd td, char * formatPrefix)
+static char * verifyFlags(rpmtd td, char * formatPrefix, const char *pad)
{
char * val = NULL;
val = xstrdup(_("(not a number)"));
} else {
strcat(formatPrefix, "s");
- char *buf = rpmVerifyString(rpmtdGetNumber(td), "");
+ char *buf = rpmVerifyString(rpmtdGetNumber(td), pad);
rasprintf(&val, formatPrefix, buf);
buf = _free(buf);
}
return val;
}
+static char * vflagsFormat(rpmtd td, char * formatPrefix)
+{
+ return verifyFlags(td, formatPrefix, "");
+}
+
+static char * fstatusFormat(rpmtd td, char * formatPrefix)
+{
+ return verifyFlags(td, formatPrefix, ".");
+}
+
static char * expandFormat(rpmtd td, char * formatPrefix)
{
char *val = NULL;
{ RPMTD_FORMAT_FSTATE, "fstate", fstateFormat },
{ RPMTD_FORMAT_VFLAGS, "vflags", vflagsFormat },
{ RPMTD_FORMAT_EXPAND, "expand", expandFormat },
+ { RPMTD_FORMAT_FSTATUS, "fstatus", fstatusFormat },
{ -1, NULL, NULL }
};
RPMTAG_POSTTRANSFLAGS = 5025, /* i */
RPMTAG_VERIFYSCRIPTFLAGS = 5026, /* i */
RPMTAG_TRIGGERSCRIPTFLAGS = 5027, /* i[] */
+ RPMTAG_FILESTATUS = 5028, /* i[] extension */
RPMTAG_FIRSTFREE_TAG /*!< internal */
} rpmTag;
RPMTD_FORMAT_FSTATE = 16, /* file states (int types) */
RPMTD_FORMAT_VFLAGS = 17, /* file verify flags (int types) */
RPMTD_FORMAT_EXPAND = 18, /* macro expansion (string types) */
+ RPMTD_FORMAT_FSTATUS = 19, /* file verify status (int types) */
} rpmtdFormats;
/** \ingroup rpmtd
return 1;
}
+static int filestatusTag(Header h, rpmtd td, headerGetFlags hgflags)
+{
+ rpmfi fi = rpmfiNew(NULL, h, RPMTAG_BASENAMES, RPMFI_FLAGS_VERIFY);
+ int fc = rpmfiFC(fi);
+ uint32_t *stats = (fc > 0) ? xcalloc(fc, sizeof(*stats)) : NULL;
+ int ix;
+
+ while ((ix = rpmfiNext(fi)) >= 0) {
+ rpmVerifyAttrs verifyResult = 0;
+ (void) rpmVerifyFile(NULL, fi, &verifyResult, RPMVERIFY_NONE);
+ stats[ix] = verifyResult;
+ }
+ rpmfiFree(fi);
+
+ td->type = RPM_INT32_TYPE;
+ td->count = fc;
+ td->data = stats;
+ td->flags = RPMTD_ALLOCED;
+
+ return (fc > 0);
+}
+
void *rpmHeaderTagFunc(rpmTag tag)
{
const struct headerTagFunc_s * ext;
{ RPMTAG_HEADERCOLOR, headercolorTag },
{ RPMTAG_VERBOSE, verboseTag },
{ RPMTAG_EPOCHNUM, epochnumTag },
+ { RPMTAG_FILESTATUS, filestatusTag },
{ 0, NULL }
};
FILEREQUIRE
FILESIZES
FILESTATES
+FILESTATUS
FILEUSERNAME
FILEVERIFYFLAGS
FSCONTEXTS