zsize.cc

Go to the documentation of this file.
00001 
00002 #include "config.h"
00003 
00004 #if OASYS_ZLIB_ENABLED
00005 
00006 #include <sys/errno.h>
00007 #include <zlib.h>
00008 
00009 #include "../debug/Log.h"
00010 #include "../io/FileUtils.h"
00011 #include "../io/MmapFile.h"
00012 #include "../util/Getopt.h"
00013 #include "../util/MD5.h"
00014 
00015 
00016 using namespace oasys;
00017 
00018 int
00019 main(int argc, char* const argv[])
00020 {
00021     const char* LOG = "/zlibsize";
00022     
00023     std::string filename = "";
00024     u_int       len    = 0;
00025     u_int       offset = 0;
00026 
00027     oasys::Getopt opts;
00028     opts.addopt(new UIntOpt('L', "length", &len));
00029     opts.addopt(new UIntOpt('o', "offset", &offset));
00030     
00031     int remainder = opts.getopt(argv[0], argc, argv);
00032     if (remainder != argc - 1) {
00033         fprintf(stderr, "invalid argument '%s'\n", argv[remainder]);
00034         opts.usage(argv[0], "filename");
00035         exit(1);
00036     }
00037 
00038     filename = argv[remainder];
00039         
00040     Log::init();
00041 
00042     if (filename == "") {
00043         log_err_p(LOG, "filename must be set");
00044         exit(1);
00045     }
00046 
00047     if (len == 0) {
00048         len = FileUtils::size(filename.c_str());
00049     }
00050 
00051     MmapFile mm("/zlibsize/mmap");
00052     const u_char* src = (const u_char*)mm.map(filename.c_str(), PROT_READ, 0,
00053                                               len, offset);
00054     if (src == NULL) {
00055         log_err_p(LOG, "error mmap'ing file: %s", strerror(errno));
00056         exit(1);
00057     }
00058 
00059     unsigned long zlen = compressBound(len);
00060     void* dst = malloc(zlen);
00061     log_debug_p(LOG, "calling compress on %lu byte buffer: src len %u",
00062                 zlen, len);
00063     
00064     int cc = compress((Bytef*)dst, &zlen, src, len);
00065     if (cc != Z_OK) {
00066         log_err_p(LOG, "error in compress: %s", zError(cc));
00067         exit(1);
00068     }
00069     free(dst);
00070 
00071     printf("%s\t%u\t%lu\n", filename.c_str(), len, zlen);
00072     fflush(stdout);
00073 }
00074 
00075 #else // OASYS_ZLIB_ENABLED
00076 
00077 #include <stdio.h>
00078 #include <stdlib.h>
00079 
00080 int
00081 main(int argc, char* const argv[])
00082 {
00083     (void)argc;
00084     fprintf(stderr, "%s: zlib required\n", argv[0]);
00085     exit(1);
00086 }
00087 
00088 #endif // OASYS_ZLIB_ENABLED

Generated on Sat Sep 8 08:36:18 2007 for DTN Reference Implementation by  doxygen 1.5.3