Changeset: 7ad0b3193bd2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7ad0b3193bd2
Added Files:
        common/stream/compressed.c
Modified Files:
        common/stream/Makefile.ag
        common/stream/stream.h
Branch: makelibstreamgreatagain
Log Message:

Introduce compressed_stream

which automatically picks a compression algorithm based on the stream name.


diffs (65 lines):

diff --git a/common/stream/Makefile.ag b/common/stream/Makefile.ag
--- a/common/stream/Makefile.ag
+++ b/common/stream/Makefile.ag
@@ -20,7 +20,7 @@ lib_stream  =  {
        SOURCES = stream.c rw.c bstream.c \
                bs.c bs2.c \
                stdio_stream.c \
-               gz_stream.c bz2_stream.c xz_stream.c lz4_stream.c \
+               compressed.c gz_stream.c bz2_stream.c xz_stream.c lz4_stream.c \
                url_stream.c socket_stream.c \
                memio.c callback.c blackhole.c fwf.c \
                iconv_stream.c \
diff --git a/common/stream/compressed.c b/common/stream/compressed.c
new file mode 100644
--- /dev/null
+++ b/common/stream/compressed.c
@@ -0,0 +1,36 @@
+/*
+ * 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/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2020 MonetDB B.V.
+ */
+
+#include "monetdb_config.h"
+#include "stream.h"
+#include "stream_internal.h"
+
+
+stream *
+compressed_stream(stream *inner, int level)
+{
+       if (inner == NULL)
+               return NULL;
+
+       char *filename = mnstr_name(inner);
+       if (filename == NULL)
+               return inner;
+
+       const char *ext = get_extension(filename);
+       if (strcmp(ext, "gz") == 0)
+               return gz_stream(inner, level);
+       if (strcmp(ext, "bz2") == 0)
+               return bz2_stream(inner, level);
+       if (strcmp(ext, "xz") == 0)
+               return xz_stream(inner, level);
+       if (strcmp(ext, "lz4") == 0)
+               return lz4_stream(inner, level);
+
+       return inner;
+
+}
\ No newline at end of file
diff --git a/common/stream/stream.h b/common/stream/stream.h
--- a/common/stream/stream.h
+++ b/common/stream/stream.h
@@ -168,6 +168,7 @@ stream_export stream *xz_stream(stream *
 stream_export stream *gz_stream(stream *inner, int preset);
 stream_export stream *bz2_stream(stream *inner, int preset);
 stream_export stream *lz4_stream(stream *inner, int preset);
+stream_export stream *compressed_stream(stream *inner, int preset);
 
 stream_export FILE *getFile(stream *s); // gdk_logger.c progress messages
 stream_export int getFileNo(stream *s);        /* fileno(getFile(s)) */ // 
mclient.c, gdk_logger.c progress messages
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to