Skip to content

Commit a7efec6

Browse files
committed
Provide no_string arg in createMemberStreamer
In some cases `kOffsetL + kChar` type should be read as array and not as string.
1 parent b55bd89 commit a7efec6

1 file changed

Lines changed: 22 additions & 23 deletions

File tree

modules/io.mjs

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,7 @@ function readMapElement(buf) {
976976
/** @summary create member entry for streamer element
977977
* @desc used for reading of data
978978
* @private */
979-
function createMemberStreamer(element, file) {
979+
function createMemberStreamer(element, file, no_string) {
980980
const member = {
981981
name: element.fName, type: element.fType,
982982
fArrayLength: element.fArrayLength,
@@ -1042,6 +1042,7 @@ function createMemberStreamer(element, file) {
10421042
case kOffsetL + kInt:
10431043
case kOffsetL + kCounter:
10441044
case kOffsetL + kDouble:
1045+
case kOffsetL + kChar:
10451046
case kOffsetL + kUChar:
10461047
case kOffsetL + kShort:
10471048
case kOffsetL + kUShort:
@@ -1054,31 +1055,29 @@ function createMemberStreamer(element, file) {
10541055
case kOffsetL + kFloat:
10551056
if (element.fArrayDim < 2) {
10561057
member.arrlength = element.fArrayLength;
1057-
member.func = function(buf, obj) {
1058-
obj[this.name] = buf.readFastArray(this.arrlength, this.type - kOffsetL);
1059-
};
1058+
if ((member.type !== kOffsetL + kChar) || no_string) {
1059+
member.func = function(buf, obj) {
1060+
obj[this.name] = buf.readFastArray(this.arrlength, this.type - kOffsetL);
1061+
};
1062+
} else {
1063+
member.func = function(buf, obj) {
1064+
obj[this.name] = buf.readFastString(this.arrlength);
1065+
};
1066+
}
10601067
} else {
1061-
member.arrlength = element.fMaxIndex[element.fArrayDim - 1];
10621068
member.minus1 = true;
1063-
member.func = function(buf, obj) {
1064-
obj[this.name] = buf.readNdimArray(this, (buf2, handle) =>
1065-
buf2.readFastArray(handle.arrlength, handle.type - kOffsetL));
1066-
};
1067-
}
1068-
break;
1069-
case kOffsetL + kChar:
1070-
if (element.fArrayDim < 2) {
1071-
member.arrlength = element.fArrayLength;
1072-
member.func = function(buf, obj) {
1073-
obj[this.name] = buf.readFastString(this.arrlength);
1074-
};
1075-
} else {
1076-
member.minus1 = true; // one dimension used for char*
10771069
member.arrlength = element.fMaxIndex[element.fArrayDim - 1];
1078-
member.func = function(buf, obj) {
1079-
obj[this.name] = buf.readNdimArray(this, (buf2, handle) =>
1080-
buf2.readFastString(handle.arrlength));
1081-
};
1070+
if ((member.type !== kOffsetL + kChar) || no_string) {
1071+
member.func = function(buf, obj) {
1072+
obj[this.name] = buf.readNdimArray(this, (buf2, handle) =>
1073+
buf2.readFastArray(handle.arrlength, handle.type - kOffsetL));
1074+
};
1075+
} else {
1076+
member.func = function(buf, obj) {
1077+
obj[this.name] = buf.readNdimArray(this, (buf2, handle) =>
1078+
buf2.readFastString(handle.arrlength));
1079+
};
1080+
}
10821081
}
10831082
break;
10841083
case kOffsetP + kBool:

0 commit comments

Comments
 (0)