Lots of minor changes.  Note for mappingobject.c: the hash table pointer
can now be NULL.
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index eb8f4aa..44bc51b 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -94,7 +94,7 @@
 	f = (fileobject *) newopenfileobject((FILE *)NULL, name, mode, fclose);
 	if (f == NULL)
 		return NULL;
-#ifdef USE_FOPENRF
+#ifdef HAVE_FOPENRF
 	if (*mode == '*') {
 		FILE *fopenRF();
 		f->f_fp = fopenRF(name, mode+1);
@@ -231,6 +231,51 @@
 	return None;
 }
 
+#ifdef HAVE_FTRUNCATE
+static object *
+file_truncate(f, args)
+	fileobject *f;
+	object *args;
+{
+	long newsize;
+	int ret;
+	
+	if (f->f_fp == NULL)
+		return err_closed();
+	if (!getargs(args, "l", &newsize)) {
+		err_clear();
+		if (!getnoarg(args))
+		        return NULL;
+		BGN_SAVE
+		errno = 0;
+		newsize =  ftell(f->f_fp); /* default to current position*/
+		END_SAVE
+		if (newsize == -1L) {
+		        err_errno(IOError);
+			clearerr(f->f_fp);
+			return NULL;
+		}
+	}
+	BGN_SAVE
+	errno = 0;
+	ret = fflush(f->f_fp);
+	END_SAVE
+	if (ret == 0) {
+	        BGN_SAVE
+		errno = 0;
+		ret = ftruncate(fileno(f->f_fp), newsize);
+		END_SAVE
+	}
+	if (ret != 0) {
+		err_errno(IOError);
+		clearerr(f->f_fp);
+		return NULL;
+	}
+	INCREF(None);
+	return None;
+}
+#endif /* HAVE_FTRUNCATE */
+
 static object *
 file_tell(f, args)
 	fileobject *f;
@@ -615,6 +660,9 @@
 	{"readline",	(method)file_readline},
 	{"readlines",	(method)file_readlines},
 	{"seek",	(method)file_seek},
+#ifdef HAVE_FTRUNCATE
+	{"truncate",	(method)file_truncate},
+#endif
 	{"tell",	(method)file_tell},
 	{"write",	(method)file_write},
 	{"writelines",	(method)file_writelines},