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},