Skip to content
Snippets Groups Projects
Commit c5ad7fc5 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Add support for reading/writing 8-byte (64-bit) integers in binary files

parent cdc37b1d
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #3137 passed
......@@ -583,6 +583,7 @@ js_readbin(JSContext *cx, uintN argc, jsval *arglist)
BYTE *b;
WORD *w;
DWORD *l;
uint64_t *q;
int32 size=sizeof(DWORD);
private_t* p;
int32 count=1;
......@@ -612,7 +613,7 @@ js_readbin(JSContext *cx, uintN argc, jsval *arglist)
}
rc=JS_SUSPENDREQUEST(cx);
if(size != sizeof(BYTE) && size != sizeof(WORD) && size != sizeof(DWORD)) {
if(size != sizeof(BYTE) && size != sizeof(WORD) && size != sizeof(DWORD) && size != sizeof(uint64_t)) {
/* unknown size */
dbprintf(TRUE, p, "unsupported binary read size: %d",size);
JS_RESUMEREQUEST(cx, rc);
......@@ -628,6 +629,7 @@ js_readbin(JSContext *cx, uintN argc, jsval *arglist)
b=buffer;
w=buffer;
l=buffer;
q=buffer;
retlen=fread(buffer, size, count, p->fp);
if(count==1) {
if(retlen==1) {
......@@ -649,6 +651,9 @@ js_readbin(JSContext *cx, uintN argc, jsval *arglist)
*l = LE_LONG(*l);
JS_SET_RVAL(cx, arglist, UINT_TO_JSVAL(*l));
break;
case sizeof(uint64_t):
JS_SET_RVAL(cx, arglist, DOUBLE_TO_JSVAL(*q));
break;
}
}
}
......@@ -675,6 +680,9 @@ js_readbin(JSContext *cx, uintN argc, jsval *arglist)
*l = LE_LONG(*l);
v=UINT_TO_JSVAL(*(l++));
break;
case sizeof(uint64_t):
v = DOUBLE_TO_JSVAL(*(q++));
break;
}
if(!JS_SetElement(cx, array, i, &v)) {
rc=JS_SUSPENDREQUEST(cx);
......@@ -1839,9 +1847,11 @@ js_writebin(JSContext *cx, uintN argc, jsval *arglist)
uint8_t *b;
uint16_t *w;
uint32_t *l;
uint64_t *q;
int8_t *sb;
int16_t *sw;
int32_t *sl;
int64_t *sq;
} o;
size_t wr=0;
int32 size=sizeof(int32_t);
......@@ -1879,7 +1889,7 @@ js_writebin(JSContext *cx, uintN argc, jsval *arglist)
if(!JS_ValueToInt32(cx,argv[1],&size))
return(JS_FALSE);
}
if(size != sizeof(BYTE) && size != sizeof(WORD) && size != sizeof(DWORD)) {
if(size != sizeof(BYTE) && size != sizeof(WORD) && size != sizeof(DWORD) && size != sizeof(uint64_t)) {
rc=JS_SUSPENDREQUEST(cx);
dbprintf(TRUE, p, "unsupported binary write size: %d",size);
JS_RESUMEREQUEST(cx, rc);
......@@ -1921,6 +1931,12 @@ js_writebin(JSContext *cx, uintN argc, jsval *arglist)
else
*o.l = LE_LONG(*o.l);
break;
case sizeof(int64_t):
if(val < 0)
*o.sq = (int64_t)val;
else
*o.q = (uint64_t)val;
break;
}
}
else {
......@@ -1959,6 +1975,13 @@ js_writebin(JSContext *cx, uintN argc, jsval *arglist)
*o.l = LE_LONG(*o.l);
o.l++;
break;
case sizeof(int64_t):
if(val < 0)
*o.sq = (int64_t)val;
else
*o.q = (uint64_t)val;
o.q++;
break;
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment