summaryrefslogtreecommitdiffstats
path: root/isys/cpio.c
diff options
context:
space:
mode:
authorErik Troan <ewt@redhat.com>1999-06-07 16:20:28 +0000
committerErik Troan <ewt@redhat.com>1999-06-07 16:20:28 +0000
commitb618b84a39b515482a1f6d91ddbf30fa95c424b4 (patch)
tree429a21e55a319d1243aef21c50fae3f451f0fe37 /isys/cpio.c
parent9eb6ae369c87516c13854e4c02f24e7f1f848e77 (diff)
downloadanaconda-b618b84a39b515482a1f6d91ddbf30fa95c424b4.tar.gz
anaconda-b618b84a39b515482a1f6d91ddbf30fa95c424b4.tar.xz
anaconda-b618b84a39b515482a1f6d91ddbf30fa95c424b4.zip
*** empty log message ***
Diffstat (limited to 'isys/cpio.c')
-rw-r--r--isys/cpio.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/isys/cpio.c b/isys/cpio.c
new file mode 100644
index 000000000..06e41502f
--- /dev/null
+++ b/isys/cpio.c
@@ -0,0 +1,34 @@
+#include <fcntl.h>
+#include <newt.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <zlib.h>
+
+#include "cpio.h"
+
+int installCpioFile(FD_t fd, char * cpioName, char * outName, int inWin) {
+ struct cpioFileMapping map;
+ int rc;
+ char * failedFile;
+ CFD_t cfdbuf, *cfd = &cfdbuf;
+
+ if (outName) {
+ map.archivePath = cpioName;
+ map.fsPath = outName;
+ map.mapFlags = CPIO_MAP_PATH;
+ }
+
+ cfd->cpioIoType = cpioIoTypeGzFd;
+ cfd->cpioGzFd = gzdFdopen(fdDup(fdFileno(fd)), "r");
+
+ rc = cpioInstallArchive(cfd, outName ? &map : NULL, 1, NULL, NULL,
+ &failedFile);
+ gzdClose(cfd->cpioGzFd);
+
+ if (rc || access(outName, R_OK)) {
+ return -1;
+ }
+
+ return 0;
+}