22 #define _RPMTS_INTERNAL
38 size_t size,
unsigned short mode,
40 unsigned short rdev,
unsigned int nlink,
41 const char * owner,
const char * group,
46 #if defined(RPM_VENDOR_OPENPKG)
50 char ownerfield[13+1], groupfield[13+1];
52 char ownerfield[8+1], groupfield[8+1];
58 static struct tm nowtm;
59 const char * namefield =
name;
69 strncpy(ownerfield, owner,
sizeof(ownerfield));
70 ownerfield[
sizeof(ownerfield)-1] =
'\0';
72 strncpy(groupfield, group,
sizeof(groupfield));
73 groupfield[
sizeof(groupfield)-1] =
'\0';
76 #if defined(RPM_VENDOR_OPENPKG)
80 sprintf(sizefield,
"%8u", (
unsigned)size);
82 sprintf(sizefield,
"%12u", (
unsigned)size);
88 char *nf =
alloca(strlen(name) +
sizeof(
" -> ") + strlen(linkto));
89 sprintf(nf,
"%s -> %s", name, linkto);
91 }
else if (S_ISCHR(mode)) {
93 sprintf(sizefield,
"%3u, %3u", ((
unsigned)(rdev >> 8) & 0xff),
94 ((
unsigned)rdev & 0xff));
95 }
else if (S_ISBLK(mode)) {
97 sprintf(sizefield,
"%3u, %3u", ((
unsigned)(rdev >> 8) & 0xff),
98 ((
unsigned)rdev & 0xff));
102 tm = localtime(&when);
106 if (now > when + 6
L * 30
L * 24
L * 60
L * 60
L ||
107 now < when - 60
L * 60
L)
120 (void)strftime(timefield,
sizeof(timefield) - 1, fmt, tm);
123 #if defined(RPM_VENDOR_OPENPKG)
127 sprintf(te,
"%s %d %-13s %-13s %8s %s %s", perms,
128 (
int)nlink, ownerfield, groupfield, sizefield, timefield, namefield);
130 sprintf(te,
"%s %4d %-7s %-8s %10s %s %s", perms,
131 (
int)nlink, ownerfield, groupfield, sizefield, timefield, namefield);
133 perms =
_free(perms);
142 const char * errstr =
"(unkown error)";
179 size_t tb = 2 * BUFSIZ;
182 char * prefix = NULL;
197 size_t tx = (te - t);
218 te =
stpcpy(te,
_(
"(contains no files)"));
226 unsigned short fmode;
227 unsigned short frdev;
232 const char * fdigest;
245 {
static char hex[] =
"0123456789abcdef";
248 const unsigned char * digest =
rpmfiDigest(fi, &dalgo, &dlen);
251 fdigest = p =
xcalloc(1, ((2 * dlen) + 1));
252 for (j = 0; j < dlen; j++) {
253 unsigned k = *digest++;
254 *p++ = hex[ (k >> 4) & 0xf ];
255 *p++ = hex[ (k ) & 0xf ];
264 assert(fdigest != NULL);
275 if ((qva->
qva_fflags & RPMFILE_CONFIG) && (fflags & RPMFILE_CONFIG))
279 if ((qva->
qva_fflags & RPMFILE_DOC) && (fflags & RPMFILE_DOC))
288 if (fn) sb += strlen(fn);
289 if (fdigest) sb += strlen(fdigest);
290 if (fuser) sb += strlen(fuser);
291 if (fgroup) sb += strlen(fgroup);
292 if (flink) sb += strlen(flink);
293 if ((sb + BUFSIZ) > tb) {
294 size_t tx = (te - t);
309 te =
stpcpy(te,
_(
"replaced "));
312 te =
stpcpy(te,
_(
"not installed "));
315 te =
stpcpy(te,
_(
"net shared "));
318 te =
stpcpy(te,
_(
"wrong color "));
321 te =
stpcpy(te,
_(
"(no state) "));
324 sprintf(te,
_(
"(unknown %3d) "), fstate);
331 sprintf(te,
"%s %d %d %s 0%o ",
332 fn, (
int)fsize, fmtime, fdigest, fmode);
335 if (fuser && fgroup) {
337 sprintf(te,
"%s %s", fuser, fgroup);
344 sprintf(te,
" %s %s %u ",
345 fflags & RPMFILE_CONFIG ?
"1" :
"0",
346 fflags & RPMFILE_DOC ?
"1" :
"0",
350 sprintf(te,
"%s", (flink && *flink ? flink :
"X"));
359 if (S_ISDIR(fmode)) {
364 if (fuser && fgroup) {
367 fuser, fgroup, flink);
375 fdigest =
_free(fdigest);
441 static inline unsigned char nibble(
char c)
444 if (c >=
'0' && c <=
'9')
446 if (c >=
'A' && c <=
'F')
447 return (c -
'A') + 10;
448 if (c >=
'a' && c <=
'f')
449 return (c -
'a') + 10;
458 int provides_checked = 0;
474 if (qva->
qva_mi == NULL) {
507 if (qva->
qva_mi == NULL) {
509 _(
"group %s does not contain any packages\n"), arg);
517 if (qva->
qva_mi == NULL) {
527 {
unsigned char MD5[16];
531 for (i = 0, s = arg; *s && isxdigit(*s); s++, i++)
539 for (i = 0, t = MD5, s = arg; i < 16; i++, t++, s += 2)
545 if (qva->
qva_mi == NULL) {
554 for (i = 0, s = arg; *s && isxdigit(*s); s++, i++)
562 if (qva->
qva_mi == NULL) {
572 unsigned char * digest;
576 for (dlen = 0, s = arg; *s && isxdigit(*s); s++, dlen++)
578 if ((dlen & 1) || dlen < 8) {
584 digest = memset(
alloca(dlen), 0, dlen);
585 for (t = digest, s = arg; *s; t++, s += 2)
589 if (qva->
qva_mi == NULL) {
599 const char * myarg = arg;
612 iid = (unsigned) strtoul(myarg, &end, mybase);
613 if ((*end) || (end == arg) || (iid == UINT_MAX)) {
618 if (qva->
qva_mi == NULL) {
629 if (qva->
qva_mi == NULL) {
638 provides_checked = 1;
640 if (qva->
qva_mi == NULL) {
651 for (s = arg; *s !=
'\0'; s++)
652 if (!(*s ==
'.' || *s ==
'/'))
658 fn =
xstrdup( (fn != NULL ? fn : arg) );
659 }
else if (*arg !=
'/') {
661 fn = (
char *)
rpmGetPath(curDir,
"/", arg, NULL);
662 curDir =
_free(curDir);
669 if (qva->
qva_mi == NULL && !provides_checked)
672 if (qva->
qva_mi == NULL) {
674 if (
Lstat(fn, &sb) != 0)
678 _(
"file %s is not owned by any package\n"), fn);
688 const char * myarg = arg;
701 recOffset = (unsigned) strtoul(myarg, &end, mybase);
702 if ((*end) || (end == arg) || (recOffset == UINT_MAX)) {
708 if (qva->
qva_mi == NULL) {
710 _(
"record %u could not be read\n"), recOffset);
719 if (qva->
qva_mi == NULL) {
828 assert(path != NULL);