diff --git a/src/sbbs3/js_file.c b/src/sbbs3/js_file.c index d7b84c5c064fc4a51f194eac82f3c94ed39dcea9..1085b9890fe552f4e73ebef183a2c391ba939d81 100644 --- a/src/sbbs3/js_file.c +++ b/src/sbbs3/js_file.c @@ -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; } } }