Stuff
authorEric Andersen <andersen@codepoet.org>
Thu, 11 Nov 1999 05:46:32 +0000 (05:46 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 11 Nov 1999 05:46:32 +0000 (05:46 -0000)
archival/gzip.c
gzip.c

index c3627064701d3167e3e91047433ab4f822550c4e..500d6d7e0871269f98836ac0462431258c9371ee 100644 (file)
@@ -7,9 +7,9 @@
 #include "internal.h"
 #ifdef BB_GZIP
 
-#ifndef BB_ZCAT
-#error you need zcat to have gzip support!
-#endif
+//#ifndef BB_ZCAT
+//#error you need zcat to have gzip support!
+//#endif
 
 static const char gzip_usage[] =
     "gzip [OPTION]... [FILE]...\n\n"
@@ -276,7 +276,7 @@ extern int save_orig_name; /* set if original name must be saved */
 #define WARN(msg) {if (!quiet) fprintf msg ; \
                   if (exit_code == OK) exit_code = WARNING;}
 
-local void do_exit(int exitcode);
+local void do_exit(int exitcode) __attribute__ ((noreturn));
 
        /* in zip.c: */
 extern int zip        OF((int in, int out));
@@ -1762,9 +1762,6 @@ unsigned outcnt;           /* bytes in output buffer */
 
 /* local functions */
 
-local void treat_stdin  OF((void));
-static int (*work) OF((int infile, int outfile)) = zip; /* function to call */
-
 #define strequ(s1, s2) (strcmp((s1),(s2)) == 0)
 
 /* ======================================================================== */
@@ -1774,6 +1771,9 @@ static int (*work) OF((int infile, int outfile)) = zip; /* function to call */
 int gzip_main(int argc, char ** argv)
 {
 
+    int inFileNum;
+    int outFileNum;
+
     /* Parse any options */
     while (--argc > 0 && **(++argv) == '-') {
        while (*(++(*argv))) {
@@ -1817,32 +1817,67 @@ int gzip_main(int argc, char ** argv)
     ALLOC(ush, tab_prefix1, 1L<<(BITS-1));
 #endif
 
-    /* And get to work */
-    treat_stdin();
-    do_exit(exit_code);
-    return exit_code; /* just to avoid lint warning */
-}
+    if (tostdout==1) {
+       /* And get to work */
+       SET_BINARY_MODE(fileno(stdout));
+       strcpy(ifname, "stdin");
+       strcpy(ofname, "stdout");
+       inFileNum=fileno(stdin);
+       outFileNum=fileno(stdout);
 
-/* ========================================================================
- * Compress or decompress stdin
- */
-local void treat_stdin()
-{
-    SET_BINARY_MODE(fileno(stdout));
-    strcpy(ifname, "stdin");
-    strcpy(ofname, "stdout");
+       /* Get the time stamp on the input file. */
+       time_stamp = 0; /* time unknown by default */
 
-    /* Get the time stamp on the input file. */
-    time_stamp = 0; /* time unknown by default */
+       ifile_size = -1L; /* convention for unknown size */
 
-    ifile_size = -1L; /* convention for unknown size */
+       clear_bufs(); /* clear input and output buffers */
+       part_nb = 0;
 
-    clear_bufs(); /* clear input and output buffers */
-    part_nb = 0;
+       /* Actually do the compression/decompression. */
+       zip(inFileNum, outFileNum);
 
-    /* Actually do the compression/decompression. Loop over zipped members.
-     */
-    if ((*work)(fileno(stdin), fileno(stdout)) != OK) return;
+    } else {
+       int result;
+       struct stat statBuf;
+
+       /* And get to work */
+       if (*argv=='\0')
+           usage(gzip_usage);
+       strncpy(ifname, *argv, MAX_PATH_LEN);
+       strncpy(ofname, *argv, MAX_PATH_LEN-4);
+       strcat(ofname, ".gz");
+
+       inFileNum=open( ifname, O_RDONLY);
+       if (inFileNum < 0) {
+           perror(ifname);
+           do_exit(WARNING);
+       }
+       result = stat(ifname, &statBuf);
+       if (result < 0) {
+           perror(ifname);
+           do_exit(WARNING);
+       }
+
+       outFileNum=open( ofname, O_RDONLY);
+       if (outFileNum < 0) {
+           perror(ofname);
+           do_exit(WARNING);
+       }
+       SET_BINARY_MODE(outFileNum);
+
+       /* Get the time stamp on the input file. */
+       time_stamp = statBuf.st_ctime; /* time unknown by default */
+
+       ifile_size = statBuf.st_size; /* convention for unknown size */
+
+       clear_bufs(); /* clear input and output buffers */
+       part_nb = 0;
+
+       /* Actually do the compression/decompression. */
+       zip(inFileNum, outFileNum);
+    }
+
+    do_exit(exit_code);
 }
 
 /* ========================================================================
diff --git a/gzip.c b/gzip.c
index c3627064701d3167e3e91047433ab4f822550c4e..500d6d7e0871269f98836ac0462431258c9371ee 100644 (file)
--- a/gzip.c
+++ b/gzip.c
@@ -7,9 +7,9 @@
 #include "internal.h"
 #ifdef BB_GZIP
 
-#ifndef BB_ZCAT
-#error you need zcat to have gzip support!
-#endif
+//#ifndef BB_ZCAT
+//#error you need zcat to have gzip support!
+//#endif
 
 static const char gzip_usage[] =
     "gzip [OPTION]... [FILE]...\n\n"
@@ -276,7 +276,7 @@ extern int save_orig_name; /* set if original name must be saved */
 #define WARN(msg) {if (!quiet) fprintf msg ; \
                   if (exit_code == OK) exit_code = WARNING;}
 
-local void do_exit(int exitcode);
+local void do_exit(int exitcode) __attribute__ ((noreturn));
 
        /* in zip.c: */
 extern int zip        OF((int in, int out));
@@ -1762,9 +1762,6 @@ unsigned outcnt;           /* bytes in output buffer */
 
 /* local functions */
 
-local void treat_stdin  OF((void));
-static int (*work) OF((int infile, int outfile)) = zip; /* function to call */
-
 #define strequ(s1, s2) (strcmp((s1),(s2)) == 0)
 
 /* ======================================================================== */
@@ -1774,6 +1771,9 @@ static int (*work) OF((int infile, int outfile)) = zip; /* function to call */
 int gzip_main(int argc, char ** argv)
 {
 
+    int inFileNum;
+    int outFileNum;
+
     /* Parse any options */
     while (--argc > 0 && **(++argv) == '-') {
        while (*(++(*argv))) {
@@ -1817,32 +1817,67 @@ int gzip_main(int argc, char ** argv)
     ALLOC(ush, tab_prefix1, 1L<<(BITS-1));
 #endif
 
-    /* And get to work */
-    treat_stdin();
-    do_exit(exit_code);
-    return exit_code; /* just to avoid lint warning */
-}
+    if (tostdout==1) {
+       /* And get to work */
+       SET_BINARY_MODE(fileno(stdout));
+       strcpy(ifname, "stdin");
+       strcpy(ofname, "stdout");
+       inFileNum=fileno(stdin);
+       outFileNum=fileno(stdout);
 
-/* ========================================================================
- * Compress or decompress stdin
- */
-local void treat_stdin()
-{
-    SET_BINARY_MODE(fileno(stdout));
-    strcpy(ifname, "stdin");
-    strcpy(ofname, "stdout");
+       /* Get the time stamp on the input file. */
+       time_stamp = 0; /* time unknown by default */
 
-    /* Get the time stamp on the input file. */
-    time_stamp = 0; /* time unknown by default */
+       ifile_size = -1L; /* convention for unknown size */
 
-    ifile_size = -1L; /* convention for unknown size */
+       clear_bufs(); /* clear input and output buffers */
+       part_nb = 0;
 
-    clear_bufs(); /* clear input and output buffers */
-    part_nb = 0;
+       /* Actually do the compression/decompression. */
+       zip(inFileNum, outFileNum);
 
-    /* Actually do the compression/decompression. Loop over zipped members.
-     */
-    if ((*work)(fileno(stdin), fileno(stdout)) != OK) return;
+    } else {
+       int result;
+       struct stat statBuf;
+
+       /* And get to work */
+       if (*argv=='\0')
+           usage(gzip_usage);
+       strncpy(ifname, *argv, MAX_PATH_LEN);
+       strncpy(ofname, *argv, MAX_PATH_LEN-4);
+       strcat(ofname, ".gz");
+
+       inFileNum=open( ifname, O_RDONLY);
+       if (inFileNum < 0) {
+           perror(ifname);
+           do_exit(WARNING);
+       }
+       result = stat(ifname, &statBuf);
+       if (result < 0) {
+           perror(ifname);
+           do_exit(WARNING);
+       }
+
+       outFileNum=open( ofname, O_RDONLY);
+       if (outFileNum < 0) {
+           perror(ofname);
+           do_exit(WARNING);
+       }
+       SET_BINARY_MODE(outFileNum);
+
+       /* Get the time stamp on the input file. */
+       time_stamp = statBuf.st_ctime; /* time unknown by default */
+
+       ifile_size = statBuf.st_size; /* convention for unknown size */
+
+       clear_bufs(); /* clear input and output buffers */
+       part_nb = 0;
+
+       /* Actually do the compression/decompression. */
+       zip(inFileNum, outFileNum);
+    }
+
+    do_exit(exit_code);
 }
 
 /* ========================================================================