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