summaryrefslogtreecommitdiff
path: root/onlineupdate/source/update/src/mar_extract.c
diff options
context:
space:
mode:
Diffstat (limited to 'onlineupdate/source/update/src/mar_extract.c')
-rw-r--r--onlineupdate/source/update/src/mar_extract.c85
1 files changed, 0 insertions, 85 deletions
diff --git a/onlineupdate/source/update/src/mar_extract.c b/onlineupdate/source/update/src/mar_extract.c
deleted file mode 100644
index 75cbd645f296..000000000000
--- a/onlineupdate/source/update/src/mar_extract.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-#include "mar_private.h"
-#include "mar.h"
-
-#ifdef _WIN32
-#include <io.h>
-#include <direct.h>
-#endif
-
-/* Ensure that the directory containing this file exists */
-static int mar_ensure_parent_dir(const char *path)
-{
- char *slash = strrchr(path, '/');
- if (slash)
- {
- *slash = '\0';
- mar_ensure_parent_dir(path);
-#ifdef _WIN32
- _mkdir(path);
-#else
- mkdir(path, 0755);
-#endif
- *slash = '/';
- }
- return 0;
-}
-
-static int mar_test_callback(MarFile *mar, const MarItem *item, void *unused) {
- FILE *fp;
- char buf[BLOCKSIZE];
- int fd, len, offset = 0;
-
- (void) unused; // avoid warnings
-
- if (mar_ensure_parent_dir(item->name))
- return -1;
-
-#ifdef _WIN32
- fd = _open(item->name, _O_BINARY|_O_CREAT|_O_TRUNC|_O_WRONLY, item->flags);
-#else
- fd = creat(item->name, item->flags);
-#endif
- if (fd == -1) {
- fprintf(stderr, "ERROR: could not create file in mar_test_callback()\n");
- perror(item->name);
- return -1;
- }
-
- fp = fdopen(fd, "wb");
- if (!fp)
- return -1;
-
- while ((len = mar_read(mar, item, offset, buf, sizeof(buf))) > 0) {
- if (fwrite(buf, len, 1, fp) != 1)
- break;
- offset += len;
- }
-
- fclose(fp);
- return len == 0 ? 0 : -1;
-}
-
-int mar_extract(const char *path) {
- MarFile *mar;
- int rv;
-
- mar = mar_open(path);
- if (!mar)
- return -1;
-
- rv = mar_enum_items(mar, mar_test_callback, NULL);
-
- mar_close(mar);
- return rv;
-}