Newer
Older
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
return(JS_FALSE);
}
if(p->fp==NULL)
return(JS_TRUE);
if(argc && argv[0]!=JSVAL_VOID && argv[0]!=JSVAL_NULL) {
JSVALUE_TO_MSTRING(cx, argv[0], section, NULL);
HANDLE_PENDING(cx, section);
}
JSVALUE_TO_MSTRING(cx, argv[1], key, NULL);
if(JS_IsExceptionPending(cx)) {
FREE_AND_NULL(key);
FREE_AND_NULL(section);
return JS_FALSE;
}
if(key==NULL) {
JS_ReportError(cx, "Invalid NULL key specified");
FREE_AND_NULL(section);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
FREE_AND_NULL(section);
FREE_AND_NULL(key);
return(JS_TRUE);
if(iniRemoveKey(&list,section,key))
JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(iniWriteFile(p->fp,list)));
FREE_AND_NULL(section);
FREE_AND_NULL(key);
strListFree(&list);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_iniRemoveSection(JSContext *cx, uintN argc, jsval *arglist)
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
char* section=ROOT_SECTION;
private_t* p;
str_list_t list;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
return(JS_FALSE);
}
if(p->fp==NULL)
return(JS_TRUE);
if(argc && argv[0]!=JSVAL_VOID && argv[0]!=JSVAL_NULL) {
JSVALUE_TO_MSTRING(cx, argv[0], section, NULL);
HANDLE_PENDING(cx, section);
rc=JS_SUSPENDREQUEST(cx);
JS_RESUMEREQUEST(cx, rc);
FREE_AND_NULL(section);
return(JS_TRUE);
if(iniRemoveSection(&list,section))
JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(iniWriteFile(p->fp,list)));
FREE_AND_NULL(section);
strListFree(&list);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_iniGetSections(JSContext *cx, uintN argc, jsval *arglist)
{
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
char** list;
jsint i;
jsval val;
JSObject* array;
private_t* p;
JS_SET_RVAL(cx, arglist, JSVAL_NULL);
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
return(JS_FALSE);
}
if(p->fp==NULL)
return(JS_TRUE);
if(argc) {
JSVALUE_TO_MSTRING(cx, argv[0], prefix, NULL);
HANDLE_PENDING(cx, prefix);
array = JS_NewArrayObject(cx, 0, NULL);
rc=JS_SUSPENDREQUEST(cx);
list = iniReadSectionList(p->fp,prefix);
FREE_AND_NULL(prefix);
JS_RESUMEREQUEST(cx, rc);
for(i=0;list && list[i];i++) {
val=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,list[i]));
if(!JS_SetElement(cx, array, i, &val))
break;
}
rc=JS_SUSPENDREQUEST(cx);
iniFreeStringList(list);
JS_RESUMEREQUEST(cx, rc);
JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(array));
return(JS_TRUE);
}
static JSBool
js_iniGetKeys(JSContext *cx, uintN argc, jsval *arglist)
{
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
char** list;
jsint i;
jsval val;
JSObject* array;
private_t* p;
JS_SET_RVAL(cx, arglist, JSVAL_NULL);
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
return(JS_FALSE);
}
if(p->fp==NULL)
return(JS_TRUE);
if(argc && argv[0]!=JSVAL_VOID && argv[0]!=JSVAL_NULL) {
JSVALUE_TO_MSTRING(cx, argv[0], section, NULL);
HANDLE_PENDING(cx, section);
array = JS_NewArrayObject(cx, 0, NULL);
rc=JS_SUSPENDREQUEST(cx);
str_list_t ini = iniReadFile(p->fp);
list = iniGetKeyList(ini, section);
strListFree(&ini);
FREE_AND_NULL(section);
JS_RESUMEREQUEST(cx, rc);
for(i=0;list && list[i];i++) {
val=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,list[i]));
if(!JS_SetElement(cx, array, i, &val))
break;
}
rc=JS_SUSPENDREQUEST(cx);
iniFreeStringList(list);
JS_RESUMEREQUEST(cx, rc);
JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(array));
return(JS_TRUE);
}
static JSBool
js_iniGetObject(JSContext *cx, uintN argc, jsval *arglist)
{
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
jsint i;
JSObject* object;
private_t* p;
named_string_t** list;
bool lowercase = false;
bool blanks = false;
JS_SET_RVAL(cx, arglist, JSVAL_NULL);
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
return(JS_FALSE);
}
if(p->fp==NULL)
return(JS_TRUE);
uintN argn = 0;
if(argc > argn && !JSVAL_IS_BOOLEAN(argv[argn]) && !JSVAL_NULL_OR_VOID(argv[argn])) {
JSVALUE_TO_MSTRING(cx, argv[argn], section, NULL);
HANDLE_PENDING(cx, section);
argn++;
}
if(argc > argn && JSVAL_IS_BOOLEAN(argv[argn])) {
lowercase = JSVAL_TO_BOOLEAN(argv[argn]);
argn++;
if(argc > argn && JSVAL_IS_BOOLEAN(argv[argn])) {
blanks = JSVAL_TO_BOOLEAN(argv[argn]);
argn++;
}
rc=JS_SUSPENDREQUEST(cx);
str_list_t ini = iniReadFile(p->fp);
list = iniGetNamedStringList(ini, section);
strListFree(&ini);
FREE_AND_NULL(section);
JS_RESUMEREQUEST(cx, rc);
if(list==NULL)
object = JS_NewObject(cx, NULL, NULL, obj);
for(i=0;list && list[i];i++) {
if(lowercase)
strlwr(list[i]->name);
JS_DefineProperty(cx, object, list[i]->name
,get_value(cx,list[i]->value, blanks)
,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];
char* cp;
private_t* p;
str_list_t list;
jsrefcount rc;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
return(JS_FALSE);
}
return(JS_TRUE);
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);
rc=JS_SUSPENDREQUEST(cx);
if((list=iniReadFile(p->fp))==NULL) {
JS_RESUMEREQUEST(cx, rc);
JS_DestroyIdArray(cx,id_array);
return JS_TRUE;
}
JS_RESUMEREQUEST(cx, rc);
rval = JSVAL_TRUE;
for(i=0; i<id_array->length; i++) {
/* property */
JS_IdToValue(cx,id_array->vector[i],&set_argv[1]);
cp=NULL;
JSVALUE_TO_MSTRING(cx, set_argv[1], cp, NULL);
if(cp==NULL) {
JS_DestroyIdArray(cx,id_array);
JS_ReportError(cx, "Invalid NULL property");
return JS_FALSE;
}
if(JS_IsExceptionPending(cx)) {
FREE_AND_NULL(cp);
JS_DestroyIdArray(cx,id_array);
return JS_FALSE;
}
JS_GetProperty(cx,object,cp,&set_argv[2]);
FREE_AND_NULL(cp);
if(!js_iniSetValue_internal(cx,obj,3,set_argv,&list)) {
rval = JSVAL_FALSE;
}
rc=JS_SUSPENDREQUEST(cx);
if(rval == JSVAL_TRUE)
rval = BOOLEAN_TO_JSVAL(iniWriteFile(p->fp,list));
strListFree(&list);
JS_RESUMEREQUEST(cx, rc);
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=(char *)name_def;
char* sec_name;
char* prefix=NULL;
char** sec_list;
str_list_t ini;
jsint i,k;
jsval val;
JSObject* array;
JSObject* object;
private_t* p;
named_string_t** key_list;
bool lowercase = false;
bool blanks = false;
JS_SET_RVAL(cx, arglist, JSVAL_NULL);
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
return(JS_FALSE);
}
if(p->fp==NULL)
return(JS_TRUE);
uintN argn = 0;
if(argc > argn && JSVAL_IS_STRING(argv[argn])) {
JSVALUE_TO_MSTRING(cx, argv[argn], name, NULL);
HANDLE_PENDING(cx, name);
if(name == NULL) {
JS_ReportError(cx, "Invalid name argument");
return JS_FALSE;
}
argn++;
}
if(argc > argn && JSVAL_IS_STRING(argv[argn])) {
JSVALUE_TO_MSTRING(cx, argv[argn], prefix, NULL);
argn++;
}
if(argc > argn && JSVAL_IS_BOOLEAN(argv[argn])) {
lowercase = JSVAL_TO_BOOLEAN(argv[argn]);
argn++;
if(argc > argn && JSVAL_IS_BOOLEAN(argv[argn])) {
blanks = JSVAL_TO_BOOLEAN(argv[argn]);
argn++;
}
if(JS_IsExceptionPending(cx)) {
FREE_AND_NULL(prefix);
if(name != name_def)
free(name);
return JS_FALSE;
}
array = JS_NewArrayObject(cx, 0, NULL);
rc=JS_SUSPENDREQUEST(cx);
ini = iniReadFile(p->fp);
sec_list = iniGetSectionList(ini, 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);
if(lowercase)
strlwr(sec_name);
JS_DefineProperty(cx, object, name
,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,sec_name))
,NULL,NULL,JSPROP_ENUMERATE);
rc=JS_SUSPENDREQUEST(cx);
key_list = iniGetNamedStringList(ini,sec_list[i]);
JS_RESUMEREQUEST(cx, rc);
for(k=0;key_list && key_list[k];k++) {
if(lowercase)
strlwr(key_list[k]->name);
JS_DefineProperty(cx, object, key_list[k]->name
,get_value(cx,key_list[k]->value,blanks)
,NULL,NULL,JSPROP_ENUMERATE);
rc=JS_SUSPENDREQUEST(cx);
iniFreeNamedStringList(key_list);
JS_RESUMEREQUEST(cx, rc);
val=OBJECT_TO_JSVAL(object);
if(!JS_SetElement(cx, array, i, &val))
break;
}
rc=JS_SUSPENDREQUEST(cx);
FREE_AND_NULL(prefix);
if(name != name_def)
free(name);
iniFreeStringList(sec_list);
iniFreeStringList(ini);
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);
char* name=(char *)name_def;
jsuint i;
jsint j;
jsuint count;
JSObject* array;
JSObject* object;
jsval oval;
jsval set_argv[3];
JSIdArray* id_array;
char* cp=NULL;
str_list_t list;
jsrefcount rc;
private_t* p;
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_MSTRING(cx, argv[1], name, NULL);
HANDLE_PENDING(cx, name);
if(name==NULL) {
JS_ReportError(cx, "Invalid NULL name property");
return JS_FALSE;
}
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
return(JS_FALSE);
}
return(JS_TRUE);
rc=JS_SUSPENDREQUEST(cx);
if((list=iniReadFile(p->fp))==NULL) {
JS_RESUMEREQUEST(cx, rc);
if(name != name_def)
free(name);
return JS_TRUE;
}
JS_RESUMEREQUEST(cx, rc);
/* enumerate the array */
rval = JSVAL_TRUE;
for(i=0; i<count && rval==JSVAL_TRUE; 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) {
if(name != name_def)
free(name);
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_MSTRING(cx, set_argv[1], cp, NULL);
if(JS_IsExceptionPending(cx)) {
FREE_AND_NULL(cp);
JS_DestroyIdArray(cx,id_array);
if(name != name_def)
free(name);
return JS_FALSE;
}
if(cp==NULL)
if(strcmp(cp,name)==0) {
FREE_AND_NULL(cp);
continue;
/* value */
JS_GetProperty(cx,object,cp,&set_argv[2]);
FREE_AND_NULL(cp); /* Moved from before JS_GetProperty() call */
if(!js_iniSetValue_internal(cx,obj,3,set_argv,&list)) {
rval = JSVAL_FALSE;
break;
}
}
JS_DestroyIdArray(cx,id_array);
if(name != name_def)
free(name);
rc=JS_SUSPENDREQUEST(cx);
if(rval == JSVAL_TRUE)
rval = BOOLEAN_TO_JSVAL(iniWriteFile(p->fp,list));
strListFree(&list);
JS_RESUMEREQUEST(cx, rc);
JS_SET_RVAL(cx, arglist, rval);
return(JS_TRUE);
}
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
static JSBool
js_iniReadAll(JSContext *cx, uintN argc, jsval *arglist)
{
JSObject *obj = JS_THIS_OBJECT(cx, arglist);
private_t* p;
jsrefcount rc;
JS_SET_RVAL(cx, arglist, JSVAL_NULL);
if((p = (private_t*)js_GetClassPrivate(cx, obj, &js_file_class)) == NULL)
return JS_FALSE;
if(p->fp == NULL)
return JS_TRUE;
JSObject* array = JS_NewArrayObject(cx, 0, NULL);
if(array == NULL)
return JS_FALSE;
rc=JS_SUSPENDREQUEST(cx);
str_list_t list = iniReadFile(p->fp);
JS_RESUMEREQUEST(cx, rc);
for(size_t i = 0; list[i] != NULL; i++) {
JSString* js_str;
if((js_str = JS_NewStringCopyZ(cx, list[i])) == NULL)
break;
jsval val = STRING_TO_JSVAL(js_str);
if(!JS_SetElement(cx, array, i, &val))
break;
}
strListFree(&list);
JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(array));
return(JS_TRUE);
}
static JSBool
js_raw_write(JSContext *cx, uintN argc, jsval *arglist)
{
JSObject *obj=JS_THIS_OBJECT(cx, arglist);
jsval *argv=JS_ARGV(cx, arglist);
size_t len; /* string length */
JSString* str;
private_t* p;
jsrefcount rc;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
return(JS_FALSE);
}
if(p->fp==NULL)
return(JS_TRUE);
if((str = JS_ValueToString(cx, argv[0]))==NULL)
return(JS_FALSE);
JSSTRING_TO_MSTRING(cx, str, cp, &len);
HANDLE_PENDING(cx, cp);
if(cp==NULL)
return JS_TRUE;
rc=JS_SUSPENDREQUEST(cx);
if(write(fileno(p->fp),cp,len)==(size_t)len) {
free(cp);
dbprintf(FALSE, p, "wrote %u raw bytes",len);
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
} else {
free(cp);
dbprintf(TRUE, p, "raw write of %u bytes failed",len);
}
JS_RESUMEREQUEST(cx, rc);
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;
size_t len; /* string length */
size_t tlen; /* total length to write (may be greater than len) */
int32 i;
JSString* str;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
if(p->fp==NULL)
return(JS_TRUE);
if((str = JS_ValueToString(cx, argv[0]))==NULL)
return(JS_FALSE);
JSSTRING_TO_MSTRING(cx, str, cp, &len);
HANDLE_PENDING(cx, cp);
if(cp==NULL)
return JS_TRUE;
rc=JS_SUSPENDREQUEST(cx);
if((p->uuencoded || p->b64encoded || p->yencoded)
&& len && (uubuf=malloc(len))!=NULL) {
if(p->uuencoded)
decoded_len=uudecode(uubuf,len,cp,len);
else if(p->yencoded)
decoded_len=ydecode(uubuf,len,cp,len);
else
decoded_len=b64_decode(uubuf,len,cp,len);
if(decoded_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(argc>1 && !JSVAL_NULL_OR_VOID(argv[1])) {
if(!JS_ValueToInt32(cx,argv[1],&i)) {
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);
JS_ReportError(cx, "malloc failure of %u bytes", len);
return(JS_FALSE);
}
memset(cp,p->etx,len);
if(fwrite(cp,1,len,p->fp) < len) {
free(cp);
JS_RESUMEREQUEST(cx, rc);
return JS_TRUE;
}
free(cp);
}
dbprintf(FALSE, p, "wrote %u bytes",tlen);
JS_SET_RVAL(cx, arglist, JSVAL_TRUE);
dbprintf(TRUE, p, "write of %u bytes failed",len);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
static JSBool
js_writeln_internal(JSContext *cx, JSObject *obj, jsval *arg, jsval *rval)
JSString* str;
private_t* p;
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
if(p->fp==NULL)
return(JS_TRUE);
JS_ReportError(cx,"JS_ValueToString failed");
JSSTRING_TO_MSTRING(cx, str, cp, NULL);
HANDLE_PENDING(cx, cp);
if(cp==NULL)
cp=(char *)cp_def;
rc=JS_SUSPENDREQUEST(cx);
if(p->rot13)
rot13(cp);
if(fprintf(p->fp,"%s\n",cp)!=0)
if(cp != cp_def)
free(cp);
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);
union {
uint8_t *b;
uint16_t *w;
uint32_t *l;
int8_t *sb;
int16_t *sw;
int32_t *sl;
} o;
int32 size=sizeof(int32_t);
JSObject* array=NULL;
jsval elemval;
jsdouble val=0;
JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
if((p=(private_t*)js_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
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 && !JSVAL_NULL_OR_VOID(argv[1])) {
if(!JS_ValueToInt32(cx,argv[1],&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);
return(JS_FALSE);
}
o.b=buffer;
if(array==NULL) {
switch(size) {
case sizeof(int8_t):
if(val < 0)
*o.sb=(int8_t)val;
else
*o.b=(uint8_t)val;
case sizeof(int16_t):
if(val < 0)
*o.sw=(int16_t)val;
else
*o.w=(uint16_t)val;
*o.w = BE_SHORT(*o.w);
*o.w = LE_SHORT(*o.w);
case sizeof(int32_t):
if(val < 0)
*o.sl=(int32_t)val;
else
*o.l=(uint32_t)val;
*o.l = BE_LONG(*o.l);
*o.l = LE_LONG(*o.l);
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(int8_t):
if(val < 0)
*o.sb=(int8_t)val;
else
*o.b=(uint8_t)val;
o.b++;
case sizeof(int16_t):
if(val < 0)
*o.sw=(int16_t)val;
else
*o.w=(uint16_t)val;
*o.w = BE_SHORT(*o.w);
*o.w = LE_SHORT(*o.w);
o.w++;
case sizeof(int32_t):
if(val < 0)
*o.sl=(int32_t)val;
else
*o.l=(uint32_t)val;
*o.l = BE_LONG(*o.l);
*o.l = LE_LONG(*o.l);
o.l++;
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_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
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_GetClassPrivate(cx, obj, &js_file_class))==NULL) {
if(p->fp==NULL)
return(JS_TRUE);
/* offset */