Changeset: eddf52851f2a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=eddf52851f2a
Modified Files:
        common/stream/stream.c
Branch: Jul2017
Log Message:

When opening a compressed file, always use binary mode.


diffs (74 lines):

diff --git a/common/stream/stream.c b/common/stream/stream.c
--- a/common/stream/stream.c
+++ b/common/stream/stream.c
@@ -1329,6 +1329,7 @@ open_bzstream(const char *filename, cons
        stream *s;
        int err;
        struct bz *bzp;
+       char fl[3];
 
        if ((bzp = malloc(sizeof(struct bz))) == NULL)
                return NULL;
@@ -1336,10 +1337,13 @@ open_bzstream(const char *filename, cons
                free(bzp);
                return NULL;
        }
+       fl[0] = flags[0];       /* 'r' or 'w' */
+       fl[1] = 'b';            /* always binary */
+       fl[2] = '\0';
 #ifdef HAVE__WFOPEN
        {
                wchar_t *wfname = utf8towchar(filename);
-               wchar_t *wflags = utf8towchar(flags);
+               wchar_t *wflags = utf8towchar(fl);
                if (wfname != NULL && wflags != NULL)
                        bzp->f = _wfopen(wfname, wflags);
                else
@@ -1353,7 +1357,7 @@ open_bzstream(const char *filename, cons
        {
                char *fname = cvfilename(filename);
                if (fname) {
-                       bzp->f = fopen(fname, flags);
+                       bzp->f = fopen(fname, fl);
                        free(fname);
                } else
                        bzp->f = NULL;
@@ -1631,11 +1635,10 @@ open_xzstream(const char *filename, cons
        stream *s;
        xz_stream *xz;
        uint32_t preset = 0;
-
-       if ((xz = malloc(sizeof(struct xz_stream))) == NULL)
+       char fl[3];
+
+       if ((xz = calloc(1, sizeof(struct xz_stream))) == NULL)
                return NULL;
-       if (xz)
-               memset(xz, 0, sizeof(xz_stream));
        if (((flags[0] == 'r' &&
              lzma_stream_decoder(&xz->strm, UINT64_MAX, LZMA_CONCATENATED) != 
LZMA_OK)) ||
            (flags[0] == 'w' &&
@@ -1647,10 +1650,13 @@ open_xzstream(const char *filename, cons
                free(xz);
                return NULL;
        }
+       fl[0] = flags[0];       /* 'r' or 'w' */
+       fl[1] = 'b';            /* always binary */
+       fl[2] = '\0';
 #ifdef HAVE__WFOPEN
        {
                wchar_t *wfname = utf8towchar(filename);
-               wchar_t *wflags = utf8towchar(flags);
+               wchar_t *wflags = utf8towchar(fl);
                if (wfname != NULL)
                        xz->fp = _wfopen(wfname, wflags);
                else
@@ -1664,7 +1670,7 @@ open_xzstream(const char *filename, cons
        {
                char *fname = cvfilename(filename);
                if (fname) {
-                       xz->fp = fopen(fname, flags);
+                       xz->fp = fopen(fname, fl);
                        free(fname);
                } else
                        xz->fp = NULL;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to