~ubuntu-branches/ubuntu/precise/rpm/precise-proposed

« back to all changes in this revision

Viewing changes to lib/formats.c

  • Committer: Bazaar Package Importer
  • Author(s): Michal Čihař
  • Date: 2010-06-28 11:12:30 UTC
  • mfrom: (17.2.5 sid)
  • Revision ID: james.westby@ubuntu.com-20100628111230-8ggjjhgpvrnr3ybx
Tags: 4.8.1-5
Fix compilation on hurd and kfreebsd (Closes: #587366).

Show diffs side-by-side

added added

removed removed

Lines of Context:
245
245
            argvAdd(&sdeps, "postun");
246
246
        if (item & RPMSENSE_SCRIPT_VERIFY)
247
247
            argvAdd(&sdeps, "verify");
 
248
        if (item & RPMSENSE_INTERP)
 
249
            argvAdd(&sdeps, "interp");
 
250
        if (item & RPMSENSE_RPMLIB)
 
251
            argvAdd(&sdeps, "rpmlib");
 
252
        if ((item & RPMSENSE_FIND_REQUIRES) || (item & RPMSENSE_FIND_PROVIDES))
 
253
            argvAdd(&sdeps, "auto");
 
254
        if (item & RPMSENSE_PREREQ)
 
255
            argvAdd(&sdeps, "prereq");
248
256
 
249
257
        if (sdeps) {
250
258
            val = argvJoin(sdeps, ",");
251
 
            argvFree(sdeps);
252
259
        } else {
253
 
            if (item & RPMSENSE_RPMLIB)
254
 
                val = xstrdup("rpmlib");
255
 
            else if (item & RPMSENSE_INTERP)
256
 
                val = xstrdup("interp");
257
 
            else if ((item & RPMSENSE_FIND_REQUIRES) || 
258
 
                     (item & RPMSENSE_FIND_PROVIDES))
259
 
                val = xstrdup("auto");
260
 
            else if (item & RPMSENSE_PREREQ)
261
 
                val = xstrdup("prereq");
262
 
            else
263
 
                val = xstrdup("manual");
 
260
            val = xstrdup("manual");
264
261
        }
 
262
 
 
263
        argvFree(sdeps);
265
264
    }
266
265
    return val;
267
266
}
515
514
            nb += 100;
516
515
            val = t = xrealloc(val, nb + 1);
517
516
 
518
 
            switch (sigp->pubkey_algo) {
519
 
            case PGPPUBKEYALGO_DSA:
520
 
                t = stpcpy(t, "DSA");
521
 
                break;
522
 
            case PGPPUBKEYALGO_RSA:
523
 
                t = stpcpy(t, "RSA");
524
 
                break;
525
 
            default:
526
 
                (void) snprintf(t, nb - (t - val), "%d", sigp->pubkey_algo);
527
 
                t += strlen(t);
528
 
                break;
529
 
            }
 
517
            t = stpcpy(t, pgpValString(PGPVAL_PUBKEYALGO, sigp->pubkey_algo));
530
518
            if (t + 5 >= val + nb)
531
519
                goto again;
532
520
            *t++ = '/';
533
 
            switch (sigp->hash_algo) {
534
 
            case PGPHASHALGO_MD5:
535
 
                t = stpcpy(t, "MD5");
536
 
                break;
537
 
            case PGPHASHALGO_SHA1:
538
 
                t = stpcpy(t, "SHA1");
539
 
                break;
540
 
            default:
541
 
                (void) snprintf(t, nb - (t - val), "%d", sigp->hash_algo);
542
 
                t += strlen(t);
543
 
                break;
544
 
            }
 
521
            t = stpcpy(t, pgpValString(PGPVAL_HASHALGO, sigp->hash_algo));
545
522
            if (t + strlen (", ") + 1 >= val + nb)
546
523
                goto again;
547
524
 
615
592
    return val;
616
593
}
617
594
 
 
595
static char * fstateFormat(rpmtd td, char * formatPrefix)
 
596
{
 
597
    char * val = NULL;
 
598
 
 
599
    if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
 
600
        val = xstrdup(_("(not a number)"));
 
601
    } else {
 
602
        const char * str;
 
603
        rpmfileState fstate = rpmtdGetNumber(td);
 
604
        switch (fstate) {
 
605
        case RPMFILE_STATE_NORMAL:
 
606
            str = _("normal");
 
607
            break;
 
608
        case RPMFILE_STATE_REPLACED:
 
609
            str = _("replaced");
 
610
            break;
 
611
        case RPMFILE_STATE_NOTINSTALLED:
 
612
            str = _("not installed");
 
613
            break;
 
614
        case RPMFILE_STATE_NETSHARED:
 
615
            str = _("net shared");
 
616
            break;
 
617
        case RPMFILE_STATE_WRONGCOLOR:
 
618
            str = _("wrong color");
 
619
            break;
 
620
        /* XXX headers should never have this value as file state */
 
621
        case RPMFILE_STATE_MISSING:
 
622
            str = _("missing");
 
623
            break;
 
624
        default:
 
625
            str = _("(unknown)");
 
626
            break;
 
627
        }
 
628
        
 
629
        strcat(formatPrefix, "s");
 
630
        rasprintf(&val, formatPrefix, str);
 
631
    }
 
632
    return val;
 
633
}
 
634
 
 
635
static char * vflagsFormat(rpmtd td, char * formatPrefix)
 
636
{
 
637
    char * val = NULL;
 
638
    char buf[15];
 
639
 
 
640
    if (rpmtdClass(td) != RPM_NUMERIC_CLASS) {
 
641
        val = xstrdup(_("(not a number)"));
 
642
    } else {
 
643
        uint64_t vflags = rpmtdGetNumber(td);
 
644
        buf[0] = '\0';
 
645
        if (vflags & RPMVERIFY_FILEDIGEST)
 
646
            strcat(buf, "5");
 
647
        if (vflags & RPMVERIFY_FILESIZE)
 
648
            strcat(buf, "S");
 
649
        if (vflags & RPMVERIFY_LINKTO)
 
650
            strcat(buf, "L");
 
651
        if (vflags & RPMVERIFY_MTIME)
 
652
            strcat(buf, "T");
 
653
        if (vflags & RPMVERIFY_RDEV)
 
654
            strcat(buf, "D");
 
655
        if (vflags & RPMVERIFY_USER)
 
656
            strcat(buf, "U");
 
657
        if (vflags & RPMVERIFY_GROUP)
 
658
            strcat(buf, "G");
 
659
        if (vflags & RPMVERIFY_MODE)
 
660
            strcat(buf, "M");
 
661
        if (vflags & RPMVERIFY_CAPS)
 
662
            strcat(buf, "P");
 
663
 
 
664
        strcat(formatPrefix, "s");
 
665
        rasprintf(&val, formatPrefix, buf);
 
666
    }
 
667
 
 
668
    return val;
 
669
}
618
670
void *rpmHeaderFormatFuncByName(const char *fmt)
619
671
{
620
672
    const struct headerFormatFunc_s * ext;
621
673
    void *func = NULL;
622
674
 
623
675
    for (ext = rpmHeaderFormats; ext->name != NULL; ext++) {
624
 
        if (!strcmp(ext->name, fmt)) {
 
676
        if (rstreq(ext->name, fmt)) {
625
677
            func = ext->func;
626
678
            break;
627
679
        }
661
713
    { RPMTD_FORMAT_DAY,         "day",          dayFormat },
662
714
    { RPMTD_FORMAT_SHESCAPE,    "shescape",     shescapeFormat },
663
715
    { RPMTD_FORMAT_ARRAYSIZE,   "arraysize",    arraysizeFormat },
 
716
    { RPMTD_FORMAT_FSTATE,      "fstate",       fstateFormat },
 
717
    { RPMTD_FORMAT_VFLAGS,      "vflags",       vflagsFormat },
664
718
    { -1,                       NULL,           NULL }
665
719
};