1 /* rpmarchive: spit out the main archive portion of a package */
5 #include <rpm/rpmlib.h> /* rpmReadPackageFile .. */
6 #include <rpm/rpmtag.h>
8 #include <rpm/rpmpgp.h>
10 #include <rpm/rpmts.h>
15 int main(int argc, char *argv[])
19 char * rpmio_flags = NULL;
24 xsetprogname(argv[0]); /* Portability call -- see system.h */
26 rpmReadConfigFiles(NULL, NULL);
28 fdi = fdDup(STDIN_FILENO);
30 if (rstreq(argv[1], "-h") || rstreq(argv[1], "--help")) {
31 fprintf(stderr, "Usage: rpm2cpio file.rpm\n");
34 fdi = Fopen(argv[1], "r.ufdio");
38 fprintf(stderr, "%s: %s: %s\n", argv[0],
39 (argc == 1 ? "<stdin>" : argv[1]), Fstrerror(fdi));
42 if (isatty(STDOUT_FILENO)) {
43 fprintf(stderr, "Error: refusing to output cpio data to a terminal.\n");
46 fdo = fdDup(STDOUT_FILENO);
48 { rpmts ts = rpmtsCreate();
49 rpmVSFlags vsflags = 0;
51 /* XXX retain the ageless behavior of rpm2cpio */
52 vsflags |= _RPMVSF_NODIGESTS;
53 vsflags |= _RPMVSF_NOSIGNATURES;
54 vsflags |= RPMVSF_NOHDRCHK;
55 (void) rpmtsSetVSFlags(ts, vsflags);
57 rc = rpmReadPackageFile(ts, fdi, "rpm2cpio", &h);
65 case RPMRC_NOTTRUSTED:
68 fprintf(stderr, _("argument is not an RPM package\n"));
73 fprintf(stderr, _("error reading header from package\n"));
78 /* Retrieve payload size and compression type. */
79 { const char *compr = headerGetString(h, RPMTAG_PAYLOADCOMPRESSOR);
80 rpmio_flags = rstrscat(NULL, "r.", compr ? compr : "gzip", NULL);
81 payload_size = headerGetNumber(h, RPMTAG_LONGARCHIVESIZE);
84 gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */
88 fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi));
92 rc = (ufdCopy(gzdi, fdo) == payload_size) ? EXIT_SUCCESS : EXIT_FAILURE;
96 Fclose(gzdi); /* XXX gzdi == fdi */