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