diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c index 16b933a3a01a0ba49974ac09ea55478800941401..54ae633466fc0c59b5b2d403f73dff36eb502fe2 100644 --- a/src/sbbs3/js_socket.c +++ b/src/sbbs3/js_socket.c @@ -238,6 +238,19 @@ js_accept(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) return(JS_TRUE); } +void js_timeval(JSContext* cx, jsval val, struct timeval* tv) +{ + jsdouble jsd; + + if(JSVAL_IS_INT(val)) + tv->tv_sec = JSVAL_TO_INT(val); + else if(JSVAL_IS_DOUBLE(val)) { + JS_ValueToNumber(cx,val,&jsd); + tv->tv_sec = (int)jsd; + tv->tv_usec = (int)(jsd*1000000.0)%1000000; + } +} + static JSBool js_connect(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -270,7 +283,7 @@ js_connect(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) tv.tv_sec = 10; /* default time-out */ if(argc>2) /* time-out value specified */ - JS_ValueToInt32(cx,argv[2],(int32*)&tv.tv_sec); + js_timeval(cx,argv[2],&tv); dbprintf(FALSE, p, "connecting to port %u at %s", port, JS_GetStringBytes(str)); @@ -923,7 +936,6 @@ js_poll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) uintN argn; int result; struct timeval tv = {0, 0}; - jsdouble jsd; if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) { JS_ReportError(cx,getprivate_failure,WHERE); @@ -939,13 +951,8 @@ js_poll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) for(argn=0;argn<argc;argn++) { if(JSVAL_IS_BOOLEAN(argv[argn])) poll_for_write=JSVAL_TO_BOOLEAN(argv[argn]); - else if(JSVAL_IS_INT(argv[argn])) - tv.tv_sec = JSVAL_TO_INT(argv[argn]); - else if(JSVAL_IS_DOUBLE(argv[argn])) { - JS_ValueToNumber(cx,argv[argn],&jsd); - tv.tv_sec = (int)jsd; - tv.tv_usec = (int)(jsd*1000000.0)%1000000; - } + else if(JSVAL_IS_NUMBER(argv[argn])) + js_timeval(cx,argv[argn],&tv); } FD_ZERO(&socket_set); @@ -1194,7 +1201,7 @@ static jsMethodSpec js_socket_functions[] = { }, {"connect", js_connect, 2, JSTYPE_BOOLEAN, JSDOCSTR("host, port [,timeout]") ,JSDOCSTR("connect to a remote port (number or service name) on the specified host (IP address or host name)" - ", default <i>timeout</i> value is <i>10</i> (seconds)") + ", default <i>timeout</i> value is <i>10.0</i> (seconds)") }, {"listen", js_listen, 0, JSTYPE_BOOLEAN, "" ,JSDOCSTR("place socket in a state to listen for incoming connections (use before an accept)")