diff options
author | Denis Vlasenko | 2007-03-07 22:02:23 +0000 |
---|---|---|
committer | Denis Vlasenko | 2007-03-07 22:02:23 +0000 |
commit | ab9eef21a57c23567505e8fbceb8e5ea76306ce1 (patch) | |
tree | 800845b64d0e9a204743656c4d267cc6c9917cde /archival/unlzma.c | |
parent | 8e858e2700651a0e973169b579622cd3dcd0defd (diff) | |
download | busybox-ab9eef21a57c23567505e8fbceb8e5ea76306ce1.zip busybox-ab9eef21a57c23567505e8fbceb8e5ea76306ce1.tar.gz |
bunzip2/gunzip/uncompress/unlzma: merge into common code -
fix few corner cases, reduce size by 450 bytes. Update testsuite.
Diffstat (limited to 'archival/unlzma.c')
-rw-r--r-- | archival/unlzma.c | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/archival/unlzma.c b/archival/unlzma.c deleted file mode 100644 index 24632c4..0000000 --- a/archival/unlzma.c +++ /dev/null @@ -1,65 +0,0 @@ -/* vi: set sw=4 ts=4: */ -/* - * Small lzma deflate implementation. - * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> - * - * Based on bunzip.c from busybox - * - * Licensed under GPL v2, see file LICENSE in this tarball for details. - */ - -/* Why our g[un]zip/bunzip2 are so ugly compared to this beauty? */ - -#include "busybox.h" -#include "unarchive.h" - -#define UNLZMA_OPT_STDOUT 1 - -int unlzma_main(int argc, char **argv); -int unlzma_main(int argc, char **argv) -{ - USE_DESKTOP(long long) int status; - char *filename; - unsigned opt; - int src_fd, dst_fd; - - opt = getopt32(argc, argv, "c"); - - /* Set input filename and number */ - filename = argv[optind]; - if (filename && NOT_LONE_DASH(filename)) { - /* Open input file */ - src_fd = xopen(filename, O_RDONLY); - } else { - src_fd = STDIN_FILENO; - filename = 0; - } - - /* if called as lzmacat force the stdout flag */ - if ((opt & UNLZMA_OPT_STDOUT) || applet_name[4] == 'c') - filename = 0; - - if (filename) { - struct stat stat_buf; - /* bug: char *extension = filename + strlen(filename) - 5; */ - char *extension = strrchr(filename, '.'); - if (!extension || strcmp(extension, ".lzma") != 0) { - bb_error_msg_and_die("invalid extension"); - } - xstat(filename, &stat_buf); - *extension = '\0'; - dst_fd = xopen3(filename, O_WRONLY | O_CREAT | O_TRUNC, - stat_buf.st_mode); - } else - dst_fd = STDOUT_FILENO; - status = unlzma(src_fd, dst_fd); - if (filename) { - if (status >= 0) /* if success delete src, else delete dst */ - filename[strlen(filename)] = '.'; - if (unlink(filename) < 0) { - bb_error_msg_and_die("cannot remove %s", filename); - } - } - - return (status < 0); -} |