Changeset: 0a281947790d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0a281947790d
Modified Files:
        clients/examples/C/streamcat.c
Branch: makelibstreamgreatagain
Log Message:

Add urlstream support to streamcat

For use in tests


diffs (131 lines):

diff --git a/clients/examples/C/streamcat.c b/clients/examples/C/streamcat.c
--- a/clients/examples/C/streamcat.c
+++ b/clients/examples/C/streamcat.c
@@ -15,20 +15,23 @@
 
 const char *USAGE =
        "Usage:\n"
-       "    streamcat read  [-o FILE] FILE R_OPENER [R_WRAPPER..]\n"
-       "    streamcat write [-i FILE] FILE W_OPENER [W_WRAPPER..]\n"
+       "    streamcat read    [-o FILE] FILE R_OPENER [R_WRAPPER..]\n"
+       "    streamcat write   [-i FILE] FILE W_OPENER [W_WRAPPER..]\n"
        "Options:\n"
        "    -o FILE             use FILE instead of stdout\n"
        "    -i FILE             use FILE instead of stdin\n"
        "With R_OPENER:\n"
        "    - rstream           stream = open_rstream(filename)\n"
        "    - rastream          stream = open_rastream(filename)\n"
+       "    - urlstream         stream = open_urlstream(filename)\n"
+       ""
        "With W_OPENER:\n"
        "    - wstream           stream = open_wstream(filename)\n"
        "    - wastream          stream = open_wastream(filename)\n"
        "With R_WRAPPER:\n"
        "    - iconv:enc         stream = iconv_rstream(stream, enc)\n"
        "    - blocksize:N       Copy in blocks of this size\n"
+       "    - compr             Autodecompress\n"
        "With W_WRAPPER:\n"
        "    - iconv:enc         stream = iconv_wstream(stream, enc)\n"
        "    - blocksize:N       Copy out blocks of this size\n"
@@ -41,6 +44,7 @@ typedef stream *(*opener_fun)(char *file
 
 static stream *opener_rstream(char *filename);
 static stream *opener_rastream(char *filename);
+static stream *opener_urlstream(char *url);
 
 static stream *opener_wstream(char *filename);
 static stream *opener_wastream(char *filename);
@@ -49,6 +53,8 @@ static stream *wrapper_read_iconv(stream
 
 static stream *wrapper_write_iconv(stream *s, char *enc);
 
+static stream *wrapper_autocompression(stream *s, char *level);
+
 static void copy_stream_to_file(stream *in, FILE *out, size_t bufsize);
 
 static void copy_file_to_stream(FILE *in, stream *out, size_t bufsize);
@@ -135,13 +141,15 @@ int cmd_read(char *argv[])
                opener = opener_rstream;
        else if (strcmp(opener_name, "rastream") == 0)
                opener = opener_rastream;
+       else if (strcmp(opener_name, "urlstream") == 0)
+               opener = opener_urlstream;
        else
                croak(1, "Unknown opener '%s'", opener_name);
 
        s = opener(filename);
-       if (s == NULL) {
-               char *msg = mnstr_error(NULL);
-               croak(2, "Opener %s failed: %s", opener_name, msg ? msg : "");
+       if (s == NULL || mnstr_errnr(s)) {
+               char *msg = mnstr_error(s);
+               croak(2, "Opener %s failed: %s", opener_name, msg ? msg : "<no 
error message>");
        }
 
        for (; *arg != NULL; arg++) {
@@ -168,6 +176,8 @@ int cmd_read(char *argv[])
                        if (*end != '\0' || size <= 0)
                                croak(1, "invalid blocksize: %ld", size);
                        bufsize = size;
+               } else if (strcmp(wrapper_name, "compr") == 0) {
+                       wrapper = wrapper_autocompression;
                } else {
                        croak(1, "Unknown wrapper: %s", wrapper_name);
                }
@@ -236,7 +246,7 @@ int cmd_write(char *argv[])
                croak(1, "Unknown opener '%s'", opener_name);
 
        s = opener(filename);
-       if (s == NULL) {
+       if (s == NULL || mnstr_errnr(s)) {
                char *msg = mnstr_error(NULL);
                croak(2, "Opener %s failed: %s", opener_name, msg ? msg : "");
        }
@@ -367,8 +377,6 @@ static stream *
 opener_rstream(char *filename)
 {
        stream *s = open_rstream(filename);
-       if (s == NULL)
-               croak(2, "Error opening file '%s': %s", filename, 
strerror(errno));
        if (!mnstr_isbinary(s))
                croak(2, "open_rastream returned binary stream");
        return s;
@@ -379,14 +387,19 @@ static stream *
 opener_rastream(char *filename)
 {
        stream *s = open_rastream(filename);
-       if (s == NULL)
-               croak(2, "Error opening file '%s': %s", filename, 
strerror(errno));
        if (mnstr_isbinary(s))
                croak(2, "open_rastream returned binary stream");
        return s;
 }
 
 static stream *
+opener_urlstream(char *url)
+{
+       stream *s = open_urlstream(url);
+       return s;
+}
+
+static stream *
 opener_wstream(char *filename)
 {
        stream *s = open_wstream(filename);
@@ -414,3 +427,16 @@ wrapper_write_iconv(stream *s, char *enc
 {
        return iconv_wstream(s, enc, "wrapper_write_iconv");
 }
+
+static stream *
+wrapper_autocompression(stream *s, char *level_parm)
+{
+       int level = 0;
+       if (level_parm) {
+               char *end;
+               level = strtol(level_parm, &end, 10);
+               if (*end != '\0' || level < 0)
+                       croak(1, "invalid compression level: %s", level_parm);
+       }
+       return compressed_stream(s, level);
+}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to