00001
00002
00003 #include "system.h"
00004
00005 #include "rpmlib.h"
00006 #include "debug.h"
00007
00008 int main(int argc, char **argv)
00009 {
00010 FD_t fdi, fdo;
00011 Header h;
00012 char * rpmio_flags;
00013 int rc, isSource;
00014 FD_t gzdi;
00015
00016 setprogname(argv[0]);
00017 if (argc == 1)
00018 fdi = fdDup(STDIN_FILENO);
00019 else
00020 fdi = Fopen(argv[1], "r.ufdio");
00021
00022 if (Ferror(fdi)) {
00023 fprintf(stderr, "%s: %s: %s\n", argv[0],
00024 (argc == 1 ? "<stdin>" : argv[1]), Fstrerror(fdi));
00025 exit(EXIT_FAILURE);
00026 }
00027 fdo = fdDup(STDOUT_FILENO);
00028
00029 rc = rpmReadPackageHeader(fdi, &h, &isSource, NULL, NULL);
00030 switch (rc) {
00031 case 0:
00032 break;
00033 case 1:
00034 fprintf(stderr, _("argument is not an RPM package\n"));
00035 exit(EXIT_FAILURE);
00036 break;
00037 default:
00038 fprintf(stderr, _("error reading header from package\n"));
00039 exit(EXIT_FAILURE);
00040 break;
00041 }
00042
00043
00044 { const char * payload_compressor = NULL;
00045 char * t;
00046
00047 if (!headerGetEntry(h, RPMTAG_PAYLOADCOMPRESSOR, NULL,
00048 (void **) &payload_compressor, NULL))
00049 payload_compressor = "gzip";
00050 rpmio_flags = t = alloca(sizeof("r.gzdio"));
00051 *t++ = 'r';
00052 if (!strcmp(payload_compressor, "gzip"))
00053 t = stpcpy(t, ".gzdio");
00054 if (!strcmp(payload_compressor, "bzip2"))
00055 t = stpcpy(t, ".bzdio");
00056 }
00057
00058 gzdi = Fdopen(fdi, rpmio_flags);
00059 if (gzdi == NULL) {
00060 fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi));
00061 exit(EXIT_FAILURE);
00062 }
00063
00064 rc = ufdCopy(gzdi, fdo);
00065 rc = (rc <= 0) ? EXIT_FAILURE : EXIT_SUCCESS;
00066 Fclose(fdo);
00067
00068 Fclose(gzdi);
00069
00070 return rc;
00071 }