Newer
Older
if(argc>0 && argv[0]!=JSVAL_VOID && argv[0]!=JSVAL_NULL)
JSVALUE_TO_STRING(cx, argv[0], section, NULL);
rc=JS_SUSPENDREQUEST(cx);
list = iniReadNamedStringList(p->fp,section);
JS_RESUMEREQUEST(cx, rc);
if(list==NULL) { /* New behavior at request of MCMLXXIX: return NULL/undefined if specified section doesn't exist */
JS_SET_RVAL(cx, arglist, JSVAL_NULL);
return(JS_TRUE);
}
object = JS_NewObject(cx, NULL, NULL, obj);
for(i=0;list && list[i];i++) {
JS_DefineProperty(cx, object, list[i]->name
,get_value(cx,list[i]->value)
,NULL,NULL,JSPROP_ENUMERATE);
}
rc=JS_SUSPENDREQUEST(cx);
iniFreeNamedStringList(list);
JS_RESUMEREQUEST(cx, rc);
JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(object));
return(JS_TRUE);
}
js_iniSetObject(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
jsint i;
JSObject* object;
JSIdArray* id_array;
jsval set_argv[3];
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
set_argv[0]=argv[0]; /* section */
if(!JSVAL_IS_OBJECT(argv[1]) || argv[1]==JSVAL_NULL)
return(JS_TRUE);
object = JSVAL_TO_OBJECT(argv[1]);
if((id_array=JS_Enumerate(cx,object))==NULL)
return(JS_TRUE);
for(i=0; i<id_array->length; i++) {
/* property */
JS_IdToValue(cx,id_array->vector[i],&set_argv[1]);
/* value */
JSVALUE_TO_STRING(cx, set_argv[1], p, NULL);
JS_DestroyIdArray(cx,id_array);
return(JS_TRUE);
}
static JSBool
js_iniGetAllObjects(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
char* name="name";
char* sec_name;
char* prefix=NULL;
char** sec_list;
jsint i,k;
jsval val;
JSObject* array;
JSObject* object;
private_t* p;
named_string_t** key_list;
JS_SET_RVAL(cx, arglist, JSVAL_NULL);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
return(JS_FALSE);
}
if(p->fp==NULL)
return(JS_TRUE);
if(argc)
JSVALUE_TO_STRING(cx, argv[0], name, NULL);
if(argc>1)
JSVALUE_TO_STRING(cx, argv[1], prefix, NULL);
array = JS_NewArrayObject(cx, 0, NULL);
rc=JS_SUSPENDREQUEST(cx);
sec_list = iniReadSectionList(p->fp,prefix);
JS_RESUMEREQUEST(cx, rc);
for(i=0;sec_list && sec_list[i];i++) {
object = JS_NewObject(cx, NULL, NULL, obj);
sec_name=sec_list[i];
if(prefix!=NULL)
sec_name+=strlen(prefix);
JS_DefineProperty(cx, object, name
,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,sec_name))
,NULL,NULL,JSPROP_ENUMERATE);
rc=JS_SUSPENDREQUEST(cx);
key_list = iniReadNamedStringList(p->fp,sec_list[i]);
JS_RESUMEREQUEST(cx, rc);
for(k=0;key_list && key_list[k];k++)
JS_DefineProperty(cx, object, key_list[k]->name
,get_value(cx,key_list[k]->value)
,NULL,NULL,JSPROP_ENUMERATE);
rc=JS_SUSPENDREQUEST(cx);
iniFreeNamedStringList(key_list);
JS_RESUMEREQUEST(cx, rc);
val=OBJECT_TO_JSVAL(object);
/* exception here, Apr-4-2010:
2000007a()
js_iniGetAllObjects(JSContext * 0x049383e0, JSObject * 0x049c76a8, unsigned int 0x00000001, long * 0x049c0490, long * 0x02c5c494) line 1064 + 24 bytes
js_Invoke(JSContext * 0x049383e0, unsigned int 0x00000001, unsigned int 0x00000000) line 1375 + 23 bytes
js_Interpret(JSContext * 0x049383e0, unsigned char * 0x031ab4b2, long * 0x02c5d6ac) line 3944 + 15 bytes
js_Execute(JSContext * 0x049383e0, JSObject * 0x049b73e8, JSObject * 0x02f2a7e0, JSStackFrame * 0x00000000, unsigned int 0x00000000, long * 0x02c5d7bc) line 1633 + 19 bytes
JS_ExecuteScript(JSContext * 0x049383e0, JSObject * 0x049b73e8, JSObject * 0x02f2a7e0, long * 0x02c5d7bc) line 4188 + 25 bytes
sbbs_t::js_execfile(const char * 0x0226b59a, const char * 0x022060fa) line 668 + 39 bytes
sbbs_t::external(const char * 0x0226b599, long 0x00000100, const char * 0x022060fa) line 413 + 30 bytes
event_thread(void * 0x022622b8) line 2745 + 113 bytes
_threadstart(void * 0x0227dab0) line 187 + 13 bytes
and July-15-2010:
20000000()
js32.dll!JS_SetElement(JSContext * cx, JSObject * obj, long index, long * vp) Line 3178 + 0x20 bytes C
> sbbs.dll!js_iniGetAllObjects(JSContext * cx, JSObject * obj, unsigned int argc, long * argv, long * rval) Line 1081 + 0x18 bytes C
js32.dll!js_Invoke(JSContext * cx, unsigned int argc, unsigned int flags) Line 1375 + 0x17 bytes C
js32.dll!js_Interpret(JSContext * cx, unsigned char * pc, long * result) Line 3944 + 0xf bytes C
js32.dll!js_Execute(JSContext * cx, JSObject * chain, JSObject * script, JSStackFrame * down, unsigned int flags, long * result) Line 1633 + 0x13 bytes C
js32.dll!JS_ExecuteScript(JSContext * cx, JSObject * obj, JSObject * script, long * rval) Line 4188 + 0x19 bytes C
sbbs.dll!sbbs_t::js_execfile(const char * cmd, const char * startup_dir) Line 686 + 0x27 bytes C++
sbbs.dll!sbbs_t::external(const char * cmdline, long mode, const char * startup_dir) Line 413 + 0x1e bytes C++
sbbs.dll!event_thread(void * arg) Line 2745 + 0x71 bytes C++
And July-22-2010:
js32.dll!JS_SetElement(JSContext * cx, JSObject * obj, long index, long * vp) Line 3178 + 0x20 bytes C
> sbbs.dll!js_iniGetAllObjects(JSContext * cx, JSObject * obj, unsigned int argc, long * argv, long * rval) Line 1095 + 0x18 bytes C
js32.dll!js_Invoke(JSContext * cx, unsigned int argc, unsigned int flags) Line 1375 + 0x17 bytes C
js32.dll!js_Interpret(JSContext * cx, unsigned char * pc, long * result) Line 3944 + 0xf bytes C
js32.dll!js_Execute(JSContext * cx, JSObject * chain, JSObject * script, JSStackFrame * down, unsigned int flags, long * result) Line 1633 + 0x13 bytes C
js32.dll!JS_ExecuteScript(JSContext * cx, JSObject * obj, JSObject * script, long * rval) Line 4188 + 0x19 bytes C
websrvr.dll!exec_ssjs(http_session_t * session, char * script) Line 4638 + 0x24 bytes C
websrvr.dll!respond(http_session_t * session) Line 4684 + 0x12 bytes C
websrvr.dll!http_session_thread(void * arg) Line 5091 + 0xc bytes C
And Sept-17-2011:
JS_SetElement(JSContext * 0x058b7138, JSObject * 0x0578cd78, long 2, long * 0x084cb338) line 3178 + 32 bytes
js_iniGetAllObjects(JSContext * 0x058b7138, JSObject * 0x0578cd60, unsigned int 0, long * 0x063adfbc, long * 0x084cb460) line 1115 + 24 bytes
js_Invoke(JSContext * 0x058b7138, unsigned int 0, unsigned int 0) line 1375 + 23 bytes
js_Interpret(JSContext * 0x058b7138, unsigned char * 0x04e9298b, long * 0x084cc678) line 3944 + 15 bytes
js_Execute(JSContext * 0x058b7138, JSObject * 0x057b4b48, JSScript * 0x04e92880, JSStackFrame * 0x00000000, unsigned int 0, long * 0x084cc860) line 1633 + 19 bytes
JS_ExecuteScript(JSContext * 0x058b7138, JSObject * 0x057b4b48, JSScript * 0x04e92880, long * 0x084cc860) line 4188 + 25 bytes
exec_ssjs(http_session_t * 0x084ce0f0, char * 0x084ce221) line 4644 + 36 bytes
respond(http_session_t * 0x084ce0f0) line 4690 + 18 bytes
http_session_thread(void * 0x00000000) line 5098 + 12 bytes
if(!JS_SetElement(cx, array, i, &val))
break;
}
rc=JS_SUSPENDREQUEST(cx);
iniFreeStringList(sec_list);
JS_RESUMEREQUEST(cx, rc);
JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(array));
return(JS_TRUE);
}
static JSBool
js_iniSetAllObjects(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
jsuint i;
jsint j;
jsuint count;
JSObject* array;
JSObject* object;
jsval oval;
jsval set_argv[3];
JSIdArray* id_array;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if(JSVAL_IS_NULL(argv[0]) || !JSVAL_IS_OBJECT(argv[0]))
return(JS_TRUE);
array = JSVAL_TO_OBJECT(argv[0]);
if(!JS_IsArrayObject(cx, array))
return(JS_TRUE);
if(!JS_GetArrayLength(cx, array, &count))
return(JS_TRUE);
if(argc>1)
JSVALUE_TO_STRING(cx, argv[1], name, NULL);
/* enumerate the array */
for(i=0; i<count; i++) {
if(!JS_GetElement(cx, array, i, &oval))
break;
if(!JSVAL_IS_OBJECT(oval)) /* must be an array of objects */
break;
object=JSVAL_TO_OBJECT(oval);
if(!JS_GetProperty(cx, object, name, &set_argv[0]))
continue;
if((id_array=JS_Enumerate(cx,object))==NULL)
return(JS_TRUE);
for(j=0; j<id_array->length; j++) {
/* property */
JS_IdToValue(cx,id_array->vector[j],&set_argv[1]);
/* check if not name */
JSVALUE_TO_STRING(cx, set_argv[1], p, NULL);
continue;
/* value */
break;
}
JS_DestroyIdArray(cx,id_array);
}
return(JS_TRUE);
}
js_write(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
char* uubuf=NULL;
int len; /* string length */
int tlen; /* total length to write (may be greater than len) */
JSString* str;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
if(p->fp==NULL)
return(JS_TRUE);
if((str = JS_ValueToString(cx, argv[0]))==NULL)
return(JS_FALSE);
JSSTRING_TO_STRING(cx, str, cp, NULL);
len = JS_GetStringLength(str);
rc=JS_SUSPENDREQUEST(cx);
if((p->uuencoded || p->b64encoded || p->yencoded)
&& len && (uubuf=malloc(len))!=NULL) {
if(p->uuencoded)
len=uudecode(uubuf,len,cp,len);
else if(p->yencoded)
len=ydecode(uubuf,len,cp,len);
else
len=b64_decode(uubuf,len,cp,len);
if(len<0) {
free(uubuf);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
cp=uubuf;
}
if(p->rot13)
rot13(cp);
JS_RESUMEREQUEST(cx, rc);
tlen=len;
if(!JS_ValueToInt32(cx,argv[1],(int32*)&tlen)) {
FREE_AND_NULL(uubuf);
return(JS_FALSE);
if(len>tlen)
len=tlen;
}
rc=JS_SUSPENDREQUEST(cx);
if(fwrite(cp,1,len,p->fp)==(size_t)len) {
if(tlen>len) {
len=tlen-len;
if((cp=malloc(len))==NULL) {
JS_RESUMEREQUEST(cx, rc);
FREE_AND_NULL(uubuf);
dbprintf(TRUE, p, "malloc failure of %u bytes", len);
return(JS_TRUE);
}
memset(cp,p->etx,len);
fwrite(cp,1,len,p->fp);
free(cp);
}
dbprintf(FALSE, p, "wrote %u bytes",tlen);
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
} else
dbprintf(TRUE, p, "write of %u bytes failed",len);
FREE_AND_NULL(uubuf);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_writeln_internal(JSContext *cx, JSObject *obj, jsval *arg, jsval *rval)
char* cp="";
JSString* str;
private_t* p;
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
if(p->fp==NULL)
return(JS_TRUE);
JS_ReportError(cx,"JS_ValueToString failed");
JSSTRING_TO_STRING(cx, str, cp, NULL);
rc=JS_SUSPENDREQUEST(cx);
if(p->rot13)
rot13(cp);
if(fprintf(p->fp,"%s\n",cp)!=0)
JS_RESUMEREQUEST(cx, rc);
static JSBool
js_writeln(JSContext *cx, uintN argc, jsval *arglist)
{
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
jsval rval;
JSBool ret;
if(argc) {
ret=js_writeln_internal(cx, obj, &argv[0], &rval);
}
else {
ret=js_writeln_internal(cx, obj, NULL, &rval);
}
JS_SET_RVAL(cx, arglist, rval);
return(ret);
}
js_writebin(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
BYTE *b;
WORD *w;
DWORD *l;
JSObject* array=NULL;
jsval elemval;
jsdouble val=0;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
if(p->fp==NULL)
return(JS_TRUE);
if(JSVAL_IS_OBJECT(argv[0]) && !JSVAL_IS_NULL(argv[0])) {
array = JSVAL_TO_OBJECT(argv[0]);
if(JS_IsArrayObject(cx, array)) {
if(!JS_GetArrayLength(cx, array, &count))
return(JS_TRUE);
}
else
array=NULL;
}
if(array==NULL) {
if(!JS_ValueToNumber(cx,argv[0],&val))
return(JS_FALSE);
}
if(argc>1) {
if(!JS_ValueToInt32(cx,argv[1],(int32*)&size))
return(JS_FALSE);
}
if(size != sizeof(BYTE) && size != sizeof(WORD) && size != sizeof(DWORD)) {
rc=JS_SUSPENDREQUEST(cx);
dbprintf(TRUE, p, "unsupported binary write size: %d",size);
JS_RESUMEREQUEST(cx, rc);
buffer=malloc(size*count);
if(buffer==NULL) {
rc=JS_SUSPENDREQUEST(cx);
dbprintf(TRUE, p, "malloc failure of %u bytes", size*count);
JS_RESUMEREQUEST(cx, rc);
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
return(JS_FALSE);
}
b=buffer;
w=buffer;
l=buffer;
if(array==NULL) {
switch(size) {
case sizeof(BYTE):
*b=(BYTE)val;
break;
case sizeof(WORD):
*w=(WORD)val;
break;
case sizeof(DWORD):
*l=(DWORD)val;
break;
}
}
else {
for(wr=0; wr<count; wr++) {
if(!JS_GetElement(cx, array, wr, &elemval))
goto end;
if(!JS_ValueToNumber(cx,elemval,&val))
goto end;
switch(size) {
case sizeof(BYTE):
*(b++)=(BYTE)val;
break;
case sizeof(WORD):
*(w++)=(WORD)val;
break;
case sizeof(DWORD):
break;
}
}
}
rc=JS_SUSPENDREQUEST(cx);
wr=fwrite(buffer,size,count,p->fp);
JS_RESUMEREQUEST(cx, rc);
JS_SET_RVAL(cx, arglist,JSVAL_TRUE);
end:
free(buffer);
return(JS_TRUE);
}
js_writeall(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
jsuint i;
jsuint limit;
JSObject* array;
jsval elemval;
private_t* p;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
if(p->fp==NULL)
return(JS_TRUE);
if(JSVAL_IS_NULL(argv[0]) || !JSVAL_IS_OBJECT(argv[0]))
return(JS_TRUE);
array = JSVAL_TO_OBJECT(argv[0]);
if(!JS_IsArrayObject(cx, array))
return(JS_TRUE);
if(!JS_GetArrayLength(cx, array, &limit))
return(JS_FALSE);
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
if(!JS_GetElement(cx, array, i, &elemval))
break;
js_writeln_internal(cx, obj, &elemval, &rval);
JS_SET_RVAL(cx, arglist, rval);
if(rval!=JSVAL_TRUE)
}
return(JS_TRUE);
}
js_lock(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
off_t offset=0;
off_t len=0;
jsdouble val;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
if(p->fp==NULL)
return(JS_TRUE);
/* offset */
if(argc) {
if(!JS_ValueToNumber(cx,argv[0],&val))
return(JS_FALSE);
offset=(off_t)val;
}
/* length */
if(argc>1) {
if(!JS_ValueToNumber(cx,argv[1],&val))
return(JS_FALSE);
len=(off_t)val;
}
rc=JS_SUSPENDREQUEST(cx);
if(len==0)
len=filelength(fileno(p->fp))-offset;
if(lock(fileno(p->fp),offset,len)==0)
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
JS_RESUMEREQUEST(cx, rc);
js_unlock(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
off_t offset=0;
off_t len=0;
jsdouble val;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
if(p->fp==NULL)
return(JS_TRUE);
/* offset */
if(argc) {
if(!JS_ValueToNumber(cx,argv[0],&val))
return(JS_FALSE);
offset=(off_t)val;
}
/* length */
if(argc>1) {
if(!JS_ValueToNumber(cx,argv[1],&val))
return(JS_FALSE);
len=(off_t)val;
}
rc=JS_SUSPENDREQUEST(cx);
if(len==0)
len=filelength(fileno(p->fp))-offset;
if(unlock(fileno(p->fp),offset,len)==0)
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
js_delete(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
if(p->fp!=NULL) { /* close it if it's open */
fclose(p->fp);
p->fp=NULL;
}
rc=JS_SUSPENDREQUEST(cx);
JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(remove(p->name)==0));
JS_RESUMEREQUEST(cx, rc);
js_flush(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
rc=JS_SUSPENDREQUEST(cx);
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(fflush(p->fp)==0));
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_rewind(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
private_t* p;
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
return(JS_FALSE);
}
rc=JS_SUSPENDREQUEST(cx);
if(p->fp==NULL)
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
rewind(p->fp);
}
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
js_truncate(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
private_t* p;
int32 len=0;
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
return(JS_FALSE);
}
if(argc) {
if(!JS_ValueToInt32(cx,argv[0],&len))
return(JS_FALSE);
}
rc=JS_SUSPENDREQUEST(cx);
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if(p->fp!=NULL && chsize(fileno(p->fp),len)==0) {
fseek(p->fp,len,SEEK_SET);
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
js_clear_error(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
JS_SET_RVAL(cx, arglist, JSVAL_VOID);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
rc=JS_SUSPENDREQUEST(cx);
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
else {
clearerr(p->fp);
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
js_fprintf(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
if(p->fp==NULL)
return(JS_TRUE);
if((cp=js_sprintf(cx, 0, argc, argv))==NULL) {
JS_ReportError(cx,"js_sprintf failed");
rc=JS_SUSPENDREQUEST(cx);
JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(fwrite(cp,1,strlen(cp),p->fp)));
JS_RESUMEREQUEST(cx, rc);
js_sprintf_free(cp);
return(JS_TRUE);
}
/* File Object Properites */
enum {
FILE_PROP_NAME
,FILE_PROP_MODE
,FILE_PROP_ETX
,FILE_PROP_EXISTS
,FILE_PROP_DATE
,FILE_PROP_IS_OPEN
,FILE_PROP_EOF
,FILE_PROP_ERROR
,FILE_PROP_DESCRIPTOR
,FILE_PROP_DEBUG
,FILE_PROP_POSITION
,FILE_PROP_LENGTH
,FILE_PROP_ATTRIBUTES
,FILE_PROP_YENCODED
,FILE_PROP_UUENCODED
,FILE_PROP_B64ENCODED
,FILE_PROP_ROT13
,FILE_PROP_NETWORK_ORDER
/* dynamically calculated */
,FILE_PROP_CHKSUM
,FILE_PROP_CRC16
,FILE_PROP_CRC32
,FILE_PROP_MD5_HEX
,FILE_PROP_MD5_B64
static JSBool js_file_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp)
jsval idval;
int32 i=0;
jsint tiny;
private_t* p;
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
JS_ReportError(cx,getprivate_failure,WHERE);
JS_IdToValue(cx, id, &idval);
tiny = JSVAL_TO_INT(idval);
rc=JS_SUSPENDREQUEST(cx);
dbprintf(FALSE, p, "setting property %d",tiny);
JS_RESUMEREQUEST(cx, rc);
switch(tiny) {
case FILE_PROP_DEBUG:
JS_ValueToBoolean(cx,*vp,&(p->debug));
case FILE_PROP_YENCODED:
JS_ValueToBoolean(cx,*vp,&(p->yencoded));
break;
case FILE_PROP_UUENCODED:
JS_ValueToBoolean(cx,*vp,&(p->uuencoded));
break;
case FILE_PROP_B64ENCODED:
JS_ValueToBoolean(cx,*vp,&(p->b64encoded));
break;
case FILE_PROP_ROT13:
JS_ValueToBoolean(cx,*vp,&(p->rot13));
break;
case FILE_PROP_NETWORK_ORDER:
JS_ValueToBoolean(cx,*vp,&(p->network_byte_order));
break;
case FILE_PROP_POSITION:
if(p->fp!=NULL) {
if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
fseek(p->fp,i,SEEK_SET);
JS_RESUMEREQUEST(cx, rc);
}
case FILE_PROP_DATE:
if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
setfdate(p->name,i);
JS_RESUMEREQUEST(cx, rc);
break;
if(p->fp!=NULL) {
if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
chsize(fileno(p->fp),i);
JS_RESUMEREQUEST(cx, rc);
}
break;
case FILE_PROP_ATTRIBUTES:
if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
rc=JS_SUSPENDREQUEST(cx);
CHMOD(p->name,i);
JS_RESUMEREQUEST(cx, rc);
if(!JS_ValueToInt32(cx,*vp,&i))
return(JS_FALSE);
p->etx = (uchar)i;
}
return(JS_TRUE);
}
static JSBool js_file_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
jsval idval;
char str[128];
size_t i;
size_t rd;
off_t offset;
ulong sum=0;
ushort c16=0;
ulong c32=~0;
MD5 md5_ctx;
BYTE block[4096];
BYTE digest[MD5_DIGEST_SIZE];
JSString* js_str=NULL;
off_t lng;
if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL)
JS_IdToValue(cx, id, &idval);
tiny = JSVAL_TO_INT(idval);
switch(tiny) {
case FILE_PROP_NAME:
if((js_str=JS_NewStringCopyZ(cx, p->name))==NULL)
return(JS_FALSE);
*vp = STRING_TO_JSVAL(js_str);
break;
case FILE_PROP_MODE:
if((js_str=JS_NewStringCopyZ(cx, p->mode))==NULL)
return(JS_FALSE);
*vp = STRING_TO_JSVAL(js_str);
break;
case FILE_PROP_EXISTS:
if(p->fp) /* open? */
*vp = JSVAL_TRUE;
rc=JS_SUSPENDREQUEST(cx);
*vp = BOOLEAN_TO_JSVAL(fexistcase(p->name));
JS_RESUMEREQUEST(cx, rc);
break;
case FILE_PROP_DATE:
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
*vp=DOUBLE_TO_JSVAL((double)tt);
break;
case FILE_PROP_IS_OPEN:
*vp = BOOLEAN_TO_JSVAL(p->fp!=NULL);
break;
case FILE_PROP_EOF:
rc=JS_SUSPENDREQUEST(cx);
*vp = BOOLEAN_TO_JSVAL(feof(p->fp)!=0);
JS_RESUMEREQUEST(cx, rc);
else
*vp = JSVAL_TRUE;
break;
case FILE_PROP_ERROR:
rc=JS_SUSPENDREQUEST(cx);
*vp = INT_TO_JSVAL(ferror(p->fp));
JS_RESUMEREQUEST(cx, rc);
else
*vp = INT_TO_JSVAL(errno);
break;
case FILE_PROP_POSITION:
rc=JS_SUSPENDREQUEST(cx);