]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
* filemodule.c: added writelines() -- analogous to readlines()
authorGuido van Rossum <guido@python.org>
Mon, 25 Oct 1993 09:59:04 +0000 (09:59 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 25 Oct 1993 09:59:04 +0000 (09:59 +0000)
* import.c: fixed core dump when out-of-date .pyc file encountered (again!)

Objects/fileobject.c
Python/import.c

index b981bb8defb8f8fc209cd2124b4301f7e405421d..5099f3f694ef57d262fe1346aaa06ea6b6b18463 100644 (file)
@@ -541,6 +541,47 @@ file_write(f, args)
        return None;
 }
 
+static object *
+file_writelines(f, args)
+       fileobject *f;
+       object *args;
+{
+       int i, n;
+       if (f->f_fp == NULL)
+               return err_closed();
+       if (args == NULL || !is_listobject(args)) {
+               err_setstr(TypeError,
+                          "writelines() requires list of strings");
+               return NULL;
+       }
+       n = getlistsize(args);
+       f->f_softspace = 0;
+       BGN_SAVE
+       errno = 0;
+       for (i = 0; i < n; i++) {
+               object *line = getlistitem(args, i);
+               int len;
+               int nwritten;
+               if (!is_stringobject(line)) {
+                       RET_SAVE
+                       err_setstr(TypeError,
+                                  "writelines() requires list of strings");
+                       return NULL;
+               }
+               len = getstringsize(line);
+               nwritten = fwrite(getstringvalue(line), 1, len, f->f_fp);
+               if (nwritten != len) {
+                       RET_SAVE
+                       err_errno(IOError);
+                       clearerr(f->f_fp);
+                       return NULL;
+               }
+       }
+       END_SAVE
+       INCREF(None);
+       return None;
+}
+
 static struct methodlist file_methods[] = {
        {"close",       file_close},
        {"flush",       file_flush},
@@ -552,6 +593,7 @@ static struct methodlist file_methods[] = {
        {"seek",        file_seek},
        {"tell",        file_tell},
        {"write",       file_write},
+       {"writelines",  file_writelines},
        {NULL,          NULL}           /* sentinel */
 };
 
index c0f163ae6ca7a6904dbddf0c316ba0d502399443..b81a41e463bfaf5afd8f8c16721735fc7c1062b9 100644 (file)
@@ -250,9 +250,10 @@ get_module(m, name, m_ret)
                                fprintf(stderr,
                                "# invalid precompiled file \"%s\"\n",
                                        namebuf);
-                               goto read_py;
                        }
                }
+               if (co == NULL)
+                       goto read_py;
        }
        else {
 read_py: