From b30e4d797ee8f0f897aee09298644a0c399a6337 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Sat, 7 Jan 2006 18:15:42 +0000 Subject: [PATCH] Created File.truncate(length) method, equivalent to: File.length = length; File.position = length; length defaults to 0 (zero). --- src/sbbs3/js_file.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/sbbs3/js_file.c b/src/sbbs3/js_file.c index d5cdf5ab2e..c7028fc2c9 100644 --- a/src/sbbs3/js_file.c +++ b/src/sbbs3/js_file.c @@ -1248,6 +1248,31 @@ js_rewind(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) return(JS_TRUE); } +static JSBool +js_truncate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + private_t* p; + int32 len=0; + + 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); + } + + *rval = JSVAL_FALSE; + if(p->fp!=NULL && chsize(fileno(p->fp),len)==0) { + fseek(p->fp,len,SEEK_SET); + *rval = JSVAL_TRUE; + } + + return(JS_TRUE); +} + static JSBool js_clear_error(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -1705,6 +1730,11 @@ static jsSyncMethodSpec js_file_functions[] = { "and clears error and end-of-file indicators") ,311 }, + {"truncate", js_truncate, 0, JSTYPE_BOOLEAN, JSDOCSTR("[length]") + ,JSDOCSTR("changes the file <i>length</i> (default: 0) and repositions the file pointer " + "(<i>position</i>) to the new end-of-file") + ,31301 + }, {"lock", js_lock, 2, JSTYPE_BOOLEAN, JSDOCSTR("[offset, length]") ,JSDOCSTR("lock file record for exclusive access (file must be opened <i>shareable</i>)") ,310 -- GitLab