Newer
Older
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);
}
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);
list = iniReadKeyList(p->fp,section);
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;
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++;
rc=JS_SUSPENDREQUEST(cx);
list = iniReadNamedStringList(p->fp,section);
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)
,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;
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(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)
,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);
}
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 */
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_GetClassPrivate(cx, obj, &js_file_class))==NULL) {