Changeset: f467a6ac3d2e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f467a6ac3d2e
Modified Files:
        common/stream/stream.c
        monetdb5/mal/Tests/tst1150.malC
        sql/backends/monet5/vaults/bam/bam_export.c
        sql/backends/monet5/vaults/bam/bam_globals.c
        sql/backends/monet5/vaults/bam/bam_globals.h
        sql/backends/monet5/vaults/bam/bam_wrapper.c
Branch: default
Log Message:

When writing multi-byte binary quantities to a stream, it must be a binary 
stream.


diffs (truncated from 397 to 300 lines):

diff --git a/common/stream/stream.c b/common/stream/stream.c
--- a/common/stream/stream.c
+++ b/common/stream/stream.c
@@ -4747,6 +4747,8 @@ mnstr_read_block(stream *restrict s, voi
 int
 mnstr_readChr(stream *restrict s, char *restrict val)
 {
+       if (s == NULL || val == NULL)
+               return -1;
        return (int) s->read(s, (void *) val, sizeof(*val), 1);
 }
 
@@ -4779,7 +4781,8 @@ mnstr_readSht(stream *restrict s, int16_
 {
        if (s == NULL || val == NULL)
                return 0;
-       switch (s->read(s, (void *) val, sizeof(*val), 1)) {
+       assert(s->binary);
+       switch (s->read(s, val, sizeof(*val), 1)) {
        case 1:
                if (s->swapbytes)
                        *val = short_int_SWAP(*val);
@@ -4796,9 +4799,10 @@ mnstr_writeSht(stream *s, int16_t val)
 {
        if (s == NULL || s->errnr)
                return 0;
+       assert(s->binary);
        if (s->swapbytes)
                val = short_int_SWAP(val);
-       return s->write(s, (void *) &val, sizeof(val), 1) == 1;
+       return s->write(s, &val, sizeof(val), 1) == 1;
 }
 
 int
@@ -4806,8 +4810,8 @@ mnstr_readInt(stream *restrict s, int *r
 {
        if (s == NULL || val == NULL)
                return 0;
-
-       switch (s->read(s, (void *) val, sizeof(*val), 1)) {
+       assert(s->binary);
+       switch (s->read(s, val, sizeof(*val), 1)) {
        case 1:
                if (s->swapbytes)
                        *val = normal_int_SWAP(*val);
@@ -4824,9 +4828,10 @@ mnstr_writeInt(stream *s, int val)
 {
        if (s == NULL || s->errnr)
                return 0;
+       assert(s->binary);
        if (s->swapbytes)
                val = normal_int_SWAP(val);
-       return s->write(s, (void *) &val, sizeof(val), (size_t) 1) == 1;
+       return s->write(s, &val, sizeof(val), 1) == 1;
 }
 
 int
@@ -4857,8 +4862,8 @@ mnstr_readLng(stream *restrict s, int64_
 {
        if (s == NULL || val == NULL)
                return 0;
-
-       switch (s->read(s, (void *) val, sizeof(*val), 1)) {
+       assert(s->binary);
+       switch (s->read(s, val, sizeof(*val), 1)) {
        case 1:
                if (s->swapbytes)
                        *val = long_int_SWAP(*val);
@@ -4875,9 +4880,10 @@ mnstr_writeLng(stream *s, int64_t val)
 {
        if (s == NULL || s->errnr)
                return 0;
+       assert(s->binary);
        if (s->swapbytes)
                val = long_int_SWAP(val);
-       return s->write(s, (void *) &val, sizeof(val), (size_t) 1) == 1;
+       return s->write(s, &val, sizeof(val), 1) == 1;
 }
 
 int
@@ -4885,7 +4891,8 @@ mnstr_writeFlt(stream *s, float val)
 {
        if (s == NULL || s->errnr)
                return 0;
-       return s->write(s, (void *) &val, sizeof(val), (size_t) 1) == 1;
+       assert(s->binary);
+       return s->write(s, &val, sizeof(val), 1) == 1;
 }
 
 int
@@ -4893,7 +4900,8 @@ mnstr_writeDbl(stream *s, double val)
 {
        if (s == NULL || s->errnr)
                return 0;
-       return s->write(s, (void *) &val, sizeof(val), (size_t) 1) == 1;
+       assert(s->binary);
+       return s->write(s, &val, sizeof(val), 1) == 1;
 }
 
 
@@ -4901,29 +4909,30 @@ mnstr_writeDbl(stream *s, double val)
 int
 mnstr_readHge(stream *restrict s, hge *restrict val)
 {
-       switch (s->read(s, (void *) val, sizeof(*val), 1)) {
+       if (s == NULL || val == NULL)
+               return 0;
+       assert(s->binary);
+       switch (s->read(s, val, sizeof(*val), 1)) {
        case 1:
                if (s->swapbytes)
                        *val = huge_int_SWAP(*val);
                return 1;
        case 0:
-               /* consider EOF an error */
-               s->errnr = MNSTR_READ_ERROR;
-               /* fall through */
-       default:
-               /* read failed */
                return 0;
+       default:                /* -1 */
+               return -1;
        }
 }
 
 int
 mnstr_writeHge(stream *s, hge val)
 {
-       if (!s || s->errnr)
+       if (s == NULL || s->errnr)
                return 0;
+       assert(s->binary);
        if (s->swapbytes)
                val = huge_int_SWAP(val);
-       return s->write(s, (void *) &val, sizeof(val), (size_t) 1) == 1;
+       return s->write(s, &val, sizeof(val), 1) == 1;
 }
 #endif
 
@@ -4955,16 +4964,14 @@ mnstr_readShtArray(stream *restrict s, i
 {
        if (s == NULL || val == NULL)
                return 0;
-
-       if (s->read(s, (void *) val, sizeof(*val), cnt) < (ssize_t) cnt) {
+       assert(s->binary);
+       if (s->read(s, val, sizeof(*val), cnt) < (ssize_t) cnt) {
                if (s->errnr == MNSTR_NO__ERROR)
                        s->errnr = MNSTR_READ_ERROR;
                return 0;
        }
-
        if (s->swapbytes) {
-               size_t i;
-               for (i = 0; i < cnt; i++, val++)
+               for (size_t i = 0; i < cnt; i++, val++)
                        *val = short_int_SWAP(*val);
        }
        return 1;
@@ -4975,6 +4982,7 @@ mnstr_writeShtArray(stream *restrict s, 
 {
        if (s == NULL || s->errnr || val == NULL)
                return 0;
+       assert(s->binary);
        if (s->swapbytes) {
                for (size_t i = 0; i < cnt; i++)
                        if (!mnstr_writeSht(s, val[i]))
@@ -4989,16 +4997,14 @@ mnstr_readIntArray(stream *restrict s, i
 {
        if (s == NULL || val == NULL)
                return 0;
-
-       if (s->read(s, (void *) val, sizeof(*val), cnt) < (ssize_t) cnt) {
+       assert(s->binary);
+       if (s->read(s, val, sizeof(*val), cnt) < (ssize_t) cnt) {
                if (s->errnr == MNSTR_NO__ERROR)
                        s->errnr = MNSTR_READ_ERROR;
                return 0;
        }
-
        if (s->swapbytes) {
-               size_t i;
-               for (i = 0; i < cnt; i++, val++)
+               for (size_t i = 0; i < cnt; i++, val++)
                        *val = normal_int_SWAP(*val);
        }
        return 1;
@@ -5009,6 +5015,7 @@ mnstr_writeIntArray(stream *restrict s, 
 {
        if (s == NULL || s->errnr || val == NULL)
                return 0;
+       assert(s->binary);
        if (s->swapbytes) {
                for (size_t i = 0; i < cnt; i++)
                        if (!mnstr_writeInt(s, val[i]))
@@ -5023,16 +5030,14 @@ mnstr_readLngArray(stream *restrict s, i
 {
        if (s == NULL || val == NULL)
                return 0;
-
-       if (s->read(s, (void *) val, sizeof(*val), cnt) < (ssize_t) cnt) {
+       assert(s->binary);
+       if (s->read(s, val, sizeof(*val), cnt) < (ssize_t) cnt) {
                if (s->errnr == MNSTR_NO__ERROR)
                        s->errnr = MNSTR_READ_ERROR;
                return 0;
        }
-
        if (s->swapbytes) {
-               size_t i;
-               for (i = 0; i < cnt; i++, val++)
+               for (size_t i = 0; i < cnt; i++, val++)
                        *val = long_int_SWAP(*val);
        }
        return 1;
@@ -5043,6 +5048,7 @@ mnstr_writeLngArray(stream *restrict s, 
 {
        if (s == NULL || s->errnr || val == NULL)
                return 0;
+       assert(s->binary);
        if (s->swapbytes) {
                for (size_t i = 0; i < cnt; i++)
                        if (!mnstr_writeLng(s, val[i]))
@@ -5056,14 +5062,16 @@ mnstr_writeLngArray(stream *restrict s, 
 int
 mnstr_readHgeArray(stream *restrict s, hge *restrict val, size_t cnt)
 {
-       if (s->read(s, (void *) val, sizeof(*val), cnt) < (ssize_t) cnt) {
-               s->errnr = MNSTR_READ_ERROR;
+       if (s == NULL || val == NULL)
                return 0;
-       }
-
+       assert(s->binary);
+       if (s->read(s, val, sizeof(*val), cnt) < (ssize_t) cnt) {
+               if (s->errnr == MNSTR_NO__ERROR)
+                       s->errnr = MNSTR_READ_ERROR;
+               return 0;
+       }
        if (s->swapbytes) {
-               size_t i;
-               for (i = 0; i < cnt; i++, val++)
+               for (size_t i = 0; i < cnt; i++, val++)
                        *val = huge_int_SWAP(*val);
        }
        return 1;
@@ -5072,8 +5080,9 @@ mnstr_readHgeArray(stream *restrict s, h
 int
 mnstr_writeHgeArray(stream *restrict s, const hge *restrict val, size_t cnt)
 {
-       if (!s || s->errnr)
+       if (s == NULL || s->errnr || val == NULL)
                return 0;
+       assert(s->binary);
        if (s->swapbytes) {
                for (size_t i = 0; i < cnt; i++)
                        if (!mnstr_writeHge(s, val[i]))
diff --git a/monetdb5/mal/Tests/tst1150.malC b/monetdb5/mal/Tests/tst1150.malC
--- a/monetdb5/mal/Tests/tst1150.malC
+++ b/monetdb5/mal/Tests/tst1150.malC
@@ -8,10 +8,10 @@
        io.print(s);
        streams.close(fp);
 
-       fp := streams.openWrite("tst1150garbage");
+       fp := streams.openWriteBytes("tst1150garbage");
        streams.writeInt(fp,1234);
        streams.close(fp);
-       fp := streams.openRead("tst1150garbage");
+       fp := streams.openReadBytes("tst1150garbage");
        i := streams.readInt(fp);
        io.print(i);
        streams.close(fp);
diff --git a/sql/backends/monet5/vaults/bam/bam_export.c 
b/sql/backends/monet5/vaults/bam/bam_export.c
--- a/sql/backends/monet5/vaults/bam/bam_export.c
+++ b/sql/backends/monet5/vaults/bam/bam_export.c
@@ -415,7 +415,7 @@ sam_exportf(Client cntxt, MalBlkPtr mb, 
 
        memset(fields, 0, 11 * sizeof(bam_field));
 
-       if ((output = bsopen(output_path)) == NULL) {
+       if ((output = bsopen(output_path, false)) == NULL) {
                msg = createException(MAL, "sam_export", SQLSTATE(BA000) "Could 
not open output file '%s' for writing", output_path);
                goto cleanup;
        }
@@ -492,7 +492,7 @@ bam_exportf(Client cntxt, MalBlkPtr mb, 
        }
 
        snprintf(output_header_path, 1024, "%s_tmp.sam", output_path);
-       if ((output_header = bsopen(output_header_path)) == NULL) {
+       if ((output_header = bsopen(output_header_path, false)) == NULL) {
                msg = createException(MAL, "bam_export", SQLSTATE(BA000) "Could 
not open temporary output file '%s' for writing", output_header_path);
                goto cleanup;
        }
diff --git a/sql/backends/monet5/vaults/bam/bam_globals.c 
b/sql/backends/monet5/vaults/bam/bam_globals.c
--- a/sql/backends/monet5/vaults/bam/bam_globals.c
+++ b/sql/backends/monet5/vaults/bam/bam_globals.c
@@ -20,11 +20,11 @@
 #include "bam_globals.h"
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to