1 /* rpmarchive: spit out the main archive portion of a package */
4 const char *__progname;
6 #include <rpm/rpmlib.h> /* rpmReadPackageFile .. */
7 #include <rpm/rpmtag.h>
9 #include <rpm/rpmpgp.h>
11 #include <rpm/rpmts.h>
15 int main(int argc, char *argv[])
23 setprogname(argv[0]); /* Retrofit glibc __progname */
25 fdi = fdDup(STDIN_FILENO);
27 fdi = Fopen(argv[1], "r.ufdio");
30 fprintf(stderr, "%s: %s: %s\n", argv[0],
31 (argc == 1 ? "<stdin>" : argv[1]), Fstrerror(fdi));
34 fdo = fdDup(STDOUT_FILENO);
35 rpmReadConfigFiles(NULL, NULL);
37 { rpmts ts = rpmtsCreate();
38 rpmVSFlags vsflags = 0;
40 /* XXX retain the ageless behavior of rpm2cpio */
41 vsflags |= _RPMVSF_NODIGESTS;
42 vsflags |= _RPMVSF_NOSIGNATURES;
43 vsflags |= RPMVSF_NOHDRCHK;
44 (void) rpmtsSetVSFlags(ts, vsflags);
47 rc = rpmReadPackageFile(ts, fdi, "rpm2cpio", &h);
55 case RPMRC_NOTTRUSTED:
58 fprintf(stderr, _("argument is not an RPM package\n"));
63 fprintf(stderr, _("error reading header from package\n"));
68 /* Retrieve type of payload compression. */
69 { const char * payload_compressor = NULL;
72 headerGet(h, RPMTAG_PAYLOADCOMPRESSOR, &pc, HEADERGET_DEFAULT);
73 payload_compressor = rpmtdGetString(&pc);
74 if (!payload_compressor)
75 payload_compressor = "gzip";
77 if (!strcmp(payload_compressor, "gzip"))
78 rpmio_flags = "r.gzdio";
79 if (!strcmp(payload_compressor, "bzip2"))
80 rpmio_flags = "r.bzdio";
81 if (!strcmp(payload_compressor, "xz"))
82 rpmio_flags = "r.xzdio";
83 if (!strcmp(payload_compressor, "lzma"))
84 rpmio_flags = "r.lzdio";
88 gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */
90 fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi));
94 rc = ufdCopy(gzdi, fdo);
95 rc = (rc <= 0) ? EXIT_FAILURE : EXIT_SUCCESS;
98 Fclose(gzdi); /* XXX gzdi == fdi */