1 /* rpmarchive: spit out the main archive portion of a package */
7 int main(int argc, char **argv)
15 setprogname(argv[0]); /* Retrofit glibc __progname */
17 fdi = fdDup(STDIN_FILENO);
19 fdi = Fopen(argv[1], "r.ufdio");
22 if (fdi == NULL || Ferror(fdi)) {
23 fprintf(stderr, _("cannot open package: %s\n"), Fstrerror(fdi));
26 fdo = fdDup(STDOUT_FILENO);
28 rc = rpmReadPackageHeader(fdi, &h, &isSource, NULL, NULL);
33 fprintf(stderr, _("argument is not an RPM package\n"));
37 fprintf(stderr, _("error reading header from package\n"));
42 /* Retrieve type of payload compression. */
43 { const char * payload_compressor = NULL;
46 if (!headerGetEntry(h, RPMTAG_PAYLOADCOMPRESSOR, NULL,
47 (void **) &payload_compressor, NULL))
48 payload_compressor = "gzip";
49 rpmio_flags = t = alloca(sizeof("r.gzdio"));
51 if (!strcmp(payload_compressor, "gzip"))
52 t = stpcpy(t, ".gzdio");
53 if (!strcmp(payload_compressor, "bzip2"))
54 t = stpcpy(t, ".bzdio");
57 gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */
58 if (gzdi == NULL || Ferror(gzdi)) {
59 fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi));
64 { char buffer[BUFSIZ];
66 while ((ct = Fread(buffer, sizeof(buffer[0]), sizeof(buffer), gzdi)) > 0) {
67 Fwrite(buffer, sizeof(buffer[0]), ct, fdo);
71 fprintf (stderr, "rpm2cpio: zlib: %s\n", Fstrerror(gzdi));
78 rc = ufdCopy(gzdi, fdo);
79 rc = (rc <= 0) ? EXIT_FAILURE : EXIT_SUCCESS;
83 Fclose(gzdi); /* XXX gzdi == fdi */