Mercurial > cpython-lru_cache-weakref
annotate Modules/cStringIO.c @ 80661:94de77bd0b4b 2.7
Issue #16194: document imp.load_dynamic problems
when read several extension modules from the same binary object file.
| author | Andrew Svetlov <andrew.svetlov@gmail.com> |
|---|---|
| date | Thu, 29 Nov 2012 19:51:28 +0200 |
| parents | ba1c48f8b571 |
| children | a025b04332fe |
| rev | line source |
|---|---|
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
1 |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
2 #include "Python.h" |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
3 #include "import.h" |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
4 #include "cStringIO.h" |
|
28772
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
5 #include "structmember.h" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
6 |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
7 PyDoc_STRVAR(cStringIO_module_documentation, |
| 4598 | 8 "A simple fast partial StringIO replacement.\n" |
| 9 "\n" | |
| 10 "This module provides a simple useful replacement for\n" | |
| 11 "the StringIO module that is written in C. It does not provide the\n" | |
|
12959
2513cd74147c
Fixed docstring typo, reported by Skip Montanaro <skip@mojam.com>.
Fred Drake <fdrake@acm.org>
parents:
12576
diff
changeset
|
12 "full generality of StringIO, but it provides enough for most\n" |
|
13620
5b727ab37092
Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
13 "applications and is especially useful in conjunction with the\n" |
| 4598 | 14 "pickle module.\n" |
| 15 "\n" | |
| 16 "Usage:\n" | |
| 17 "\n" | |
| 18 " from cStringIO import StringIO\n" | |
| 19 "\n" | |
| 20 " an_output_stream=StringIO()\n" | |
| 21 " an_output_stream.write(some_stuff)\n" | |
| 22 " ...\n" | |
|
22218
5440e4b17aff
backport jhylton's checkin of
Michael W. Hudson <mwh@python.net>
parents:
21313
diff
changeset
|
23 " value=an_output_stream.getvalue()\n" |
| 4598 | 24 "\n" |
| 25 " an_input_stream=StringIO(a_string)\n" | |
| 26 " spam=an_input_stream.readline()\n" | |
| 27 " spam=an_input_stream.read(5)\n" | |
|
9521
0f27257fb6cf
New version from Jim Fulton:
Guido van Rossum <guido@python.org>
parents:
8741
diff
changeset
|
28 " an_input_stream.seek(0) # OK, start over\n" |
| 4598 | 29 " spam=an_input_stream.read() # and read it all\n" |
| 30 " \n" | |
| 31 "If someone else wants to provide a more complete implementation,\n" | |
| 32 "go for it. :-) \n" | |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
33 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
34 "cStringIO.c,v 1.29 1999/06/15 14:10:27 jim Exp\n"); |
| 4598 | 35 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
36 /* Declaration for file-like objects that manage data as strings |
| 4598 | 37 |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
38 The IOobject type should be though of as a common base type for |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
39 Iobjects, which provide input (read-only) StringIO objects and |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
40 Oobjects, which provide read-write objects. Most of the methods |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
41 depend only on common data. |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
42 */ |
| 4598 | 43 |
| 44 typedef struct { | |
| 45 PyObject_HEAD | |
| 46 char *buf; | |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
47 Py_ssize_t pos, string_size; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
48 } IOobject; |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
49 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
50 #define IOOOBJECT(O) ((IOobject*)(O)) |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
51 |
|
30125
4b46d5449d49
shit - just change the visible name, not the comments - strictly speaking,
Skip Montanaro <skip@pobox.com>
parents:
30124
diff
changeset
|
52 /* Declarations for objects of type StringO */ |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
53 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
54 typedef struct { /* Subtype of IOobject */ |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
55 PyObject_HEAD |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
56 char *buf; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
57 Py_ssize_t pos, string_size; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
58 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
59 Py_ssize_t buf_size; |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
60 int softspace; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
61 } Oobject; |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
62 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
63 /* Declarations for objects of type StringI */ |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
64 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
65 typedef struct { /* Subtype of IOobject */ |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
66 PyObject_HEAD |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
67 char *buf; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
68 Py_ssize_t pos, string_size; |
|
20060
ccec02bfe9a0
StringIO patch #462596: let's [c]StringIO accept read buffers on
Marc-André Lemburg <mal@egenix.com>
parents:
20033
diff
changeset
|
69 /* We store a reference to the object here in order to keep |
|
ccec02bfe9a0
StringIO patch #462596: let's [c]StringIO accept read buffers on
Marc-André Lemburg <mal@egenix.com>
parents:
20033
diff
changeset
|
70 the buffer alive during the lifetime of the Iobject. */ |
| 4598 | 71 PyObject *pbuf; |
| 72 } Iobject; | |
| 73 | |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
74 /* IOobject (common) methods */ |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
75 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
76 PyDoc_STRVAR(IO_flush__doc__, "flush(): does nothing."); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
77 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
78 static int |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
79 IO__opencheck(IOobject *self) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
80 if (!self->buf) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
81 PyErr_SetString(PyExc_ValueError, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
82 "I/O operation on closed file"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
83 return 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
84 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
85 return 1; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
86 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
87 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
88 static PyObject * |
|
30096
06016d5d81d7
SF bug #770485: cStringIO does not set closed attr
Raymond Hettinger <python@rcn.com>
parents:
28772
diff
changeset
|
89 IO_get_closed(IOobject *self, void *closure) |
|
06016d5d81d7
SF bug #770485: cStringIO does not set closed attr
Raymond Hettinger <python@rcn.com>
parents:
28772
diff
changeset
|
90 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
91 PyObject *result = Py_False; |
|
30096
06016d5d81d7
SF bug #770485: cStringIO does not set closed attr
Raymond Hettinger <python@rcn.com>
parents:
28772
diff
changeset
|
92 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
93 if (self->buf == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
94 result = Py_True; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
95 Py_INCREF(result); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
96 return result; |
|
30096
06016d5d81d7
SF bug #770485: cStringIO does not set closed attr
Raymond Hettinger <python@rcn.com>
parents:
28772
diff
changeset
|
97 } |
|
06016d5d81d7
SF bug #770485: cStringIO does not set closed attr
Raymond Hettinger <python@rcn.com>
parents:
28772
diff
changeset
|
98 |
|
06016d5d81d7
SF bug #770485: cStringIO does not set closed attr
Raymond Hettinger <python@rcn.com>
parents:
28772
diff
changeset
|
99 static PyGetSetDef file_getsetlist[] = { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
100 {"closed", (getter)IO_get_closed, NULL, "True if the file is closed"}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
101 {0}, |
|
30096
06016d5d81d7
SF bug #770485: cStringIO does not set closed attr
Raymond Hettinger <python@rcn.com>
parents:
28772
diff
changeset
|
102 }; |
|
06016d5d81d7
SF bug #770485: cStringIO does not set closed attr
Raymond Hettinger <python@rcn.com>
parents:
28772
diff
changeset
|
103 |
|
06016d5d81d7
SF bug #770485: cStringIO does not set closed attr
Raymond Hettinger <python@rcn.com>
parents:
28772
diff
changeset
|
104 static PyObject * |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
105 IO_flush(IOobject *self, PyObject *unused) { |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
106 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
107 if (!IO__opencheck(self)) return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
108 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
109 Py_INCREF(Py_None); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
110 return Py_None; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
111 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
112 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
113 PyDoc_STRVAR(IO_getval__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
114 "getvalue([use_pos]) -- Get the string value." |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
115 "\n" |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
116 "If use_pos is specified and is a true value, then the string returned\n" |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
117 "will include only the text up to the current file position.\n"); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
118 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
119 static PyObject * |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
120 IO_cgetval(PyObject *self) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
121 if (!IO__opencheck(IOOOBJECT(self))) return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
122 assert(IOOOBJECT(self)->pos >= 0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
123 return PyString_FromStringAndSize(((IOobject*)self)->buf, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
124 ((IOobject*)self)->pos); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
125 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
126 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
127 static PyObject * |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
128 IO_getval(IOobject *self, PyObject *args) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
129 PyObject *use_pos=Py_None; |
|
78603
ba1c48f8b571
Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73054
diff
changeset
|
130 int b; |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
131 Py_ssize_t s; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
132 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
133 if (!IO__opencheck(self)) return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
134 if (!PyArg_UnpackTuple(args,"getval", 0, 1,&use_pos)) return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
135 |
|
78603
ba1c48f8b571
Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73054
diff
changeset
|
136 b = PyObject_IsTrue(use_pos); |
|
ba1c48f8b571
Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73054
diff
changeset
|
137 if (b < 0) |
|
ba1c48f8b571
Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73054
diff
changeset
|
138 return NULL; |
|
ba1c48f8b571
Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73054
diff
changeset
|
139 if (b) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
140 s=self->pos; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
141 if (s > self->string_size) s=self->string_size; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
142 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
143 else |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
144 s=self->string_size; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
145 assert(self->pos >= 0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
146 return PyString_FromStringAndSize(self->buf, s); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
147 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
148 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
149 PyDoc_STRVAR(IO_isatty__doc__, "isatty(): always returns 0"); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
150 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
151 static PyObject * |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
152 IO_isatty(IOobject *self, PyObject *unused) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
153 if (!IO__opencheck(self)) return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
154 Py_INCREF(Py_False); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
155 return Py_False; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
156 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
157 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
158 PyDoc_STRVAR(IO_read__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
159 "read([s]) -- Read s characters, or the rest of the string"); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
160 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
161 static int |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
162 IO_cread(PyObject *self, char **output, Py_ssize_t n) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
163 Py_ssize_t l; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
164 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
165 if (!IO__opencheck(IOOOBJECT(self))) return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
166 assert(IOOOBJECT(self)->pos >= 0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
167 assert(IOOOBJECT(self)->string_size >= 0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
168 l = ((IOobject*)self)->string_size - ((IOobject*)self)->pos; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
169 if (n < 0 || n > l) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
170 n = l; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
171 if (n < 0) n=0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
172 } |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
173 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
174 *output=((IOobject*)self)->buf + ((IOobject*)self)->pos; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
175 ((IOobject*)self)->pos += n; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
176 return n; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
177 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
178 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
179 static PyObject * |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
180 IO_read(IOobject *self, PyObject *args) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
181 Py_ssize_t n = -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
182 char *output = NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
183 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
184 if (!PyArg_ParseTuple(args, "|n:read", &n)) return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
185 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
186 if ( (n=IO_cread((PyObject*)self,&output,n)) < 0) return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
187 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
188 return PyString_FromStringAndSize(output, n); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
189 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
190 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
191 PyDoc_STRVAR(IO_readline__doc__, "readline() -- Read one line"); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
192 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
193 static int |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
194 IO_creadline(PyObject *self, char **output) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
195 char *n, *s; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
196 Py_ssize_t l; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
197 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
198 if (!IO__opencheck(IOOOBJECT(self))) return -1; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
199 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
200 for (n = ((IOobject*)self)->buf + ((IOobject*)self)->pos, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
201 s = ((IOobject*)self)->buf + ((IOobject*)self)->string_size; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
202 n < s && *n != '\n'; n++); |
|
45337
8cbe0bd93c28
Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents:
42495
diff
changeset
|
203 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
204 if (n < s) n++; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
205 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
206 *output=((IOobject*)self)->buf + ((IOobject*)self)->pos; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
207 l = n - ((IOobject*)self)->buf - ((IOobject*)self)->pos; |
|
45337
8cbe0bd93c28
Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents:
42495
diff
changeset
|
208 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
209 assert(IOOOBJECT(self)->pos <= PY_SSIZE_T_MAX - l); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
210 assert(IOOOBJECT(self)->pos >= 0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
211 assert(IOOOBJECT(self)->string_size >= 0); |
|
45337
8cbe0bd93c28
Added checks for integer overflows, contributed by Google. Some are
Martin v. Löwis <martin@v.loewis.de>
parents:
42495
diff
changeset
|
212 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
213 ((IOobject*)self)->pos += l; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
214 return (int)l; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
215 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
216 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
217 static PyObject * |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
218 IO_readline(IOobject *self, PyObject *args) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
219 int n, m=-1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
220 char *output; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
221 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
222 if (args) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
223 if (!PyArg_ParseTuple(args, "|i:readline", &m)) return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
224 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
225 if( (n=IO_creadline((PyObject*)self,&output)) < 0) return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
226 if (m >= 0 && m < n) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
227 m = n - m; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
228 n -= m; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
229 self->pos -= m; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
230 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
231 assert(IOOOBJECT(self)->pos >= 0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
232 return PyString_FromStringAndSize(output, n); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
233 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
234 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
235 PyDoc_STRVAR(IO_readlines__doc__, "readlines() -- Read all lines"); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
236 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
237 static PyObject * |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
238 IO_readlines(IOobject *self, PyObject *args) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
239 int n; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
240 char *output; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
241 PyObject *result, *line; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
242 int hint = 0, length = 0; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
243 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
244 if (!PyArg_ParseTuple(args, "|i:readlines", &hint)) return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
245 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
246 result = PyList_New(0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
247 if (!result) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
248 return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
249 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
250 while (1){ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
251 if ( (n = IO_creadline((PyObject*)self,&output)) < 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
252 goto err; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
253 if (n == 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
254 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
255 line = PyString_FromStringAndSize (output, n); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
256 if (!line) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
257 goto err; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
258 if (PyList_Append (result, line) == -1) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
259 Py_DECREF (line); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
260 goto err; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
261 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
262 Py_DECREF (line); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
263 length += n; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
264 if (hint > 0 && length >= hint) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
265 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
266 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
267 return result; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
268 err: |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
269 Py_DECREF(result); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
270 return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
271 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
272 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
273 PyDoc_STRVAR(IO_reset__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
274 "reset() -- Reset the file position to the beginning"); |
| 4598 | 275 |
| 276 static PyObject * | |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
277 IO_reset(IOobject *self, PyObject *unused) { |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
278 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
279 if (!IO__opencheck(self)) return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
280 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
281 self->pos = 0; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
282 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
283 Py_INCREF(Py_None); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
284 return Py_None; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
285 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
286 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
287 PyDoc_STRVAR(IO_tell__doc__, "tell() -- get the current position."); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
288 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
289 static PyObject * |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
290 IO_tell(IOobject *self, PyObject *unused) { |
| 4598 | 291 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
292 if (!IO__opencheck(self)) return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
293 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
294 assert(self->pos >= 0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
295 return PyInt_FromSsize_t(self->pos); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
296 } |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
297 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
298 PyDoc_STRVAR(IO_truncate__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
299 "truncate(): truncate the file at the current position."); |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
300 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
301 static PyObject * |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
302 IO_truncate(IOobject *self, PyObject *args) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
303 Py_ssize_t pos = -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
304 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
305 if (!IO__opencheck(self)) return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
306 if (!PyArg_ParseTuple(args, "|n:truncate", &pos)) return NULL; |
|
40358
0fdc2b8211f9
Make cStringIO.truncate raise IOError for negative
Martin v. Löwis <martin@v.loewis.de>
parents:
40143
diff
changeset
|
307 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
308 if (PyTuple_Size(args) == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
309 /* No argument passed, truncate to current position */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
310 pos = self->pos; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
311 } |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
312 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
313 if (pos < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
314 errno = EINVAL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
315 PyErr_SetFromErrno(PyExc_IOError); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
316 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
317 } |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
318 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
319 if (self->string_size > pos) self->string_size = pos; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
320 self->pos = self->string_size; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
321 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
322 Py_INCREF(Py_None); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
323 return Py_None; |
| 4598 | 324 } |
| 325 | |
|
28772
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
326 static PyObject * |
|
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
327 IO_iternext(Iobject *self) |
|
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
328 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
329 PyObject *next; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
330 next = IO_readline((IOobject *)self, NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
331 if (!next) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
332 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
333 if (!PyString_GET_SIZE(next)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
334 Py_DECREF(next); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
335 PyErr_SetNone(PyExc_StopIteration); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
336 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
337 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
338 return next; |
|
28772
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
339 } |
|
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
340 |
| 4598 | 341 |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
342 |
| 4598 | 343 |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
344 /* Read-write object methods */ |
| 4598 | 345 |
|
65215
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
346 PyDoc_STRVAR(IO_seek__doc__, |
| 4598 | 347 "seek(position) -- set the current position\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
348 "seek(position, mode) -- mode 0: absolute; 1: relative; 2: relative to EOF"); |
| 4598 | 349 |
| 350 static PyObject * | |
|
65215
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
351 IO_seek(Iobject *self, PyObject *args) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
352 Py_ssize_t position; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
353 int mode = 0; |
| 4598 | 354 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
355 if (!IO__opencheck(IOOOBJECT(self))) return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
356 if (!PyArg_ParseTuple(args, "n|i:seek", &position, &mode)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
357 return NULL; |
| 4598 | 358 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
359 if (mode == 2) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
360 position += self->string_size; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
361 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
362 else if (mode == 1) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
363 position += self->pos; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
364 } |
| 4598 | 365 |
|
65215
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
366 if (position < 0) position=0; |
| 4598 | 367 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
368 self->pos=position; |
|
14679
08823099ae62
Implement readlines function. Closes Bug #110686.
Martin v. Löwis <martin@v.loewis.de>
parents:
13817
diff
changeset
|
369 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
370 Py_INCREF(Py_None); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
371 return Py_None; |
|
14679
08823099ae62
Implement readlines function. Closes Bug #110686.
Martin v. Löwis <martin@v.loewis.de>
parents:
13817
diff
changeset
|
372 } |
|
08823099ae62
Implement readlines function. Closes Bug #110686.
Martin v. Löwis <martin@v.loewis.de>
parents:
13817
diff
changeset
|
373 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
374 PyDoc_STRVAR(O_write__doc__, |
| 4598 | 375 "write(s) -- Write a string to the file" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
376 "\n\nNote (hack:) writing None resets the buffer"); |
| 4598 | 377 |
| 378 | |
| 379 static int | |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
380 O_cwrite(PyObject *self, const char *c, Py_ssize_t l) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
381 Py_ssize_t newl; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
382 Oobject *oself; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
383 char *newbuf; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
384 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
385 if (!IO__opencheck(IOOOBJECT(self))) return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
386 oself = (Oobject *)self; |
| 4906 | 387 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
388 newl = oself->pos+l; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
389 if (newl >= oself->buf_size) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
390 oself->buf_size *= 2; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
391 if (oself->buf_size <= newl) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
392 assert(newl + 1 < INT_MAX); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
393 oself->buf_size = (int)(newl+1); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
394 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
395 newbuf = (char*)realloc(oself->buf, oself->buf_size); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
396 if (!newbuf) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
397 PyErr_SetString(PyExc_MemoryError,"out of memory"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
398 free(oself->buf); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
399 oself->buf = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
400 oself->buf_size = oself->pos = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
401 return -1; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
402 } |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
403 oself->buf = newbuf; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
404 } |
| 4598 | 405 |
|
65215
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
406 if (oself->string_size < oself->pos) { |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
407 /* In case of overseek, pad with null bytes the buffer region between |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
408 the end of stream and the current position. |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
409 |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
410 0 lo string_size hi |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
411 | |<---used--->|<----------available----------->| |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
412 | | <--to pad-->|<---to write---> | |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
413 0 buf position |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
414 */ |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
415 memset(oself->buf + oself->string_size, '\0', |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
416 (oself->pos - oself->string_size) * sizeof(char)); |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
417 } |
|
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
418 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
419 memcpy(oself->buf+oself->pos,c,l); |
| 4598 | 420 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
421 assert(oself->pos + l < INT_MAX); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
422 oself->pos += (int)l; |
| 4598 | 423 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
424 if (oself->string_size < oself->pos) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
425 oself->string_size = oself->pos; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
426 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
427 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
428 return (int)l; |
| 4598 | 429 } |
| 430 | |
| 431 static PyObject * | |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
432 O_write(Oobject *self, PyObject *args) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
433 char *c; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
434 int l; |
| 4598 | 435 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
436 if (!PyArg_ParseTuple(args, "t#:write", &c, &l)) return NULL; |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
437 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
438 if (O_cwrite((PyObject*)self,c,l) < 0) return NULL; |
| 4598 | 439 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
440 Py_INCREF(Py_None); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
441 return Py_None; |
| 4598 | 442 } |
| 443 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
444 PyDoc_STRVAR(O_close__doc__, "close(): explicitly release resources held."); |
| 4598 | 445 |
| 446 static PyObject * | |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
447 O_close(Oobject *self, PyObject *unused) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
448 if (self->buf != NULL) free(self->buf); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
449 self->buf = NULL; |
| 4598 | 450 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
451 self->pos = self->string_size = self->buf_size = 0; |
| 4598 | 452 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
453 Py_INCREF(Py_None); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
454 return Py_None; |
| 4598 | 455 } |
| 456 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
457 PyDoc_STRVAR(O_writelines__doc__, |
|
31626
1543afab1b67
SF patch #907403: Improvements to cStringIO.writelines()
Raymond Hettinger <python@rcn.com>
parents:
31593
diff
changeset
|
458 "writelines(sequence_of_strings) -> None. Write the strings to the file.\n" |
|
1543afab1b67
SF patch #907403: Improvements to cStringIO.writelines()
Raymond Hettinger <python@rcn.com>
parents:
31593
diff
changeset
|
459 "\n" |
|
1543afab1b67
SF patch #907403: Improvements to cStringIO.writelines()
Raymond Hettinger <python@rcn.com>
parents:
31593
diff
changeset
|
460 "Note that newlines are not added. The sequence can be any iterable object\n" |
|
1543afab1b67
SF patch #907403: Improvements to cStringIO.writelines()
Raymond Hettinger <python@rcn.com>
parents:
31593
diff
changeset
|
461 "producing strings. This is equivalent to calling write() for each string."); |
| 4598 | 462 static PyObject * |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
463 O_writelines(Oobject *self, PyObject *args) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
464 PyObject *it, *s; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
465 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
466 it = PyObject_GetIter(args); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
467 if (it == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
468 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
469 while ((s = PyIter_Next(it)) != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
470 Py_ssize_t n; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
471 char *c; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
472 if (PyString_AsStringAndSize(s, &c, &n) == -1) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
473 Py_DECREF(it); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
474 Py_DECREF(s); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
475 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
476 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
477 if (O_cwrite((PyObject *)self, c, n) == -1) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
478 Py_DECREF(it); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
479 Py_DECREF(s); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
480 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
481 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
482 Py_DECREF(s); |
|
35623
774bf9a38b2a
Patches #1298449 and #1298499: Add some missing checks for error
Michael W. Hudson <mwh@python.net>
parents:
33213
diff
changeset
|
483 } |
|
774bf9a38b2a
Patches #1298449 and #1298499: Add some missing checks for error
Michael W. Hudson <mwh@python.net>
parents:
33213
diff
changeset
|
484 |
|
774bf9a38b2a
Patches #1298449 and #1298499: Add some missing checks for error
Michael W. Hudson <mwh@python.net>
parents:
33213
diff
changeset
|
485 Py_DECREF(it); |
|
774bf9a38b2a
Patches #1298449 and #1298499: Add some missing checks for error
Michael W. Hudson <mwh@python.net>
parents:
33213
diff
changeset
|
486 |
|
774bf9a38b2a
Patches #1298449 and #1298499: Add some missing checks for error
Michael W. Hudson <mwh@python.net>
parents:
33213
diff
changeset
|
487 /* See if PyIter_Next failed */ |
|
774bf9a38b2a
Patches #1298449 and #1298499: Add some missing checks for error
Michael W. Hudson <mwh@python.net>
parents:
33213
diff
changeset
|
488 if (PyErr_Occurred()) |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
489 return NULL; |
|
35623
774bf9a38b2a
Patches #1298449 and #1298499: Add some missing checks for error
Michael W. Hudson <mwh@python.net>
parents:
33213
diff
changeset
|
490 |
|
774bf9a38b2a
Patches #1298449 and #1298499: Add some missing checks for error
Michael W. Hudson <mwh@python.net>
parents:
33213
diff
changeset
|
491 Py_RETURN_NONE; |
| 4598 | 492 } |
| 493 static struct PyMethodDef O_methods[] = { | |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
494 /* Common methods: */ |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
495 {"flush", (PyCFunction)IO_flush, METH_NOARGS, IO_flush__doc__}, |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
496 {"getvalue", (PyCFunction)IO_getval, METH_VARARGS, IO_getval__doc__}, |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
497 {"isatty", (PyCFunction)IO_isatty, METH_NOARGS, IO_isatty__doc__}, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
498 {"read", (PyCFunction)IO_read, METH_VARARGS, IO_read__doc__}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
499 {"readline", (PyCFunction)IO_readline, METH_VARARGS, IO_readline__doc__}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
500 {"readlines", (PyCFunction)IO_readlines,METH_VARARGS, IO_readlines__doc__}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
501 {"reset", (PyCFunction)IO_reset, METH_NOARGS, IO_reset__doc__}, |
|
65215
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
502 {"seek", (PyCFunction)IO_seek, METH_VARARGS, IO_seek__doc__}, |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
503 {"tell", (PyCFunction)IO_tell, METH_NOARGS, IO_tell__doc__}, |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
504 {"truncate", (PyCFunction)IO_truncate, METH_VARARGS, IO_truncate__doc__}, |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
505 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
506 /* Read-write StringIO specific methods: */ |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
507 {"close", (PyCFunction)O_close, METH_NOARGS, O_close__doc__}, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
508 {"write", (PyCFunction)O_write, METH_VARARGS, O_write__doc__}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
509 {"writelines", (PyCFunction)O_writelines, METH_O, O_writelines__doc__}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
510 {NULL, NULL} /* sentinel */ |
| 4598 | 511 }; |
| 512 | |
|
28772
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
513 static PyMemberDef O_memberlist[] = { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
514 {"softspace", T_INT, offsetof(Oobject, softspace), 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
515 "flag indicating that a space needs to be printed; used by print"}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
516 /* getattr(f, "closed") is implemented without this table */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
517 {NULL} /* Sentinel */ |
|
28772
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
518 }; |
|
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
519 |
| 4598 | 520 static void |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
521 O_dealloc(Oobject *self) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
522 if (self->buf != NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
523 free(self->buf); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
524 PyObject_Del(self); |
| 4598 | 525 } |
| 526 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
527 PyDoc_STRVAR(Otype__doc__, "Simple type for output to strings."); |
| 4598 | 528 |
| 529 static PyTypeObject Otype = { | |
|
42333
6620a510e9a9
PEP 3123: Provide forward compatibility with Python 3.0, while keeping
Martin v. Löwis <martin@v.loewis.de>
parents:
41525
diff
changeset
|
530 PyVarObject_HEAD_INIT(NULL, 0) |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
531 "cStringIO.StringO", /*tp_name*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
532 sizeof(Oobject), /*tp_basicsize*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
533 0, /*tp_itemsize*/ |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
534 /* methods */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
535 (destructor)O_dealloc, /*tp_dealloc*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
536 0, /*tp_print*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
537 0, /*tp_getattr */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
538 0, /*tp_setattr */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
539 0, /*tp_compare*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
540 0, /*tp_repr*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
541 0, /*tp_as_number*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
542 0, /*tp_as_sequence*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
543 0, /*tp_as_mapping*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
544 0, /*tp_hash*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
545 0 , /*tp_call*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
546 0, /*tp_str*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
547 0, /*tp_getattro */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
548 0, /*tp_setattro */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
549 0, /*tp_as_buffer */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
550 Py_TPFLAGS_DEFAULT, /*tp_flags*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
551 Otype__doc__, /*tp_doc */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
552 0, /*tp_traverse */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
553 0, /*tp_clear */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
554 0, /*tp_richcompare */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
555 0, /*tp_weaklistoffset */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
556 PyObject_SelfIter, /*tp_iter */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
557 (iternextfunc)IO_iternext, /*tp_iternext */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
558 O_methods, /*tp_methods */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
559 O_memberlist, /*tp_members */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
560 file_getsetlist, /*tp_getset */ |
| 4598 | 561 }; |
| 562 | |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
563 static PyObject * |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
564 newOobject(int size) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
565 Oobject *self; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
566 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
567 self = PyObject_New(Oobject, &Otype); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
568 if (self == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
569 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
570 self->pos=0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
571 self->string_size = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
572 self->softspace = 0; |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
573 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
574 self->buf = (char *)malloc(size); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
575 if (!self->buf) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
576 PyErr_SetString(PyExc_MemoryError,"out of memory"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
577 self->buf_size = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
578 Py_DECREF(self); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
579 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
580 } |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
581 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
582 self->buf_size=size; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
583 return (PyObject*)self; |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
584 } |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
585 |
|
30125
4b46d5449d49
shit - just change the visible name, not the comments - strictly speaking,
Skip Montanaro <skip@pobox.com>
parents:
30124
diff
changeset
|
586 /* End of code for StringO objects */ |
| 4598 | 587 /* -------------------------------------------------------- */ |
| 588 | |
| 589 static PyObject * | |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
590 I_close(Iobject *self, PyObject *unused) { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
591 Py_CLEAR(self->pbuf); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
592 self->buf = NULL; |
| 9642 | 593 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
594 self->pos = self->string_size = 0; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
595 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
596 Py_INCREF(Py_None); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
597 return Py_None; |
| 9642 | 598 } |
| 599 | |
| 4598 | 600 static struct PyMethodDef I_methods[] = { |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
601 /* Common methods: */ |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
602 {"flush", (PyCFunction)IO_flush, METH_NOARGS, IO_flush__doc__}, |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
603 {"getvalue", (PyCFunction)IO_getval, METH_VARARGS, IO_getval__doc__}, |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
604 {"isatty", (PyCFunction)IO_isatty, METH_NOARGS, IO_isatty__doc__}, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
605 {"read", (PyCFunction)IO_read, METH_VARARGS, IO_read__doc__}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
606 {"readline", (PyCFunction)IO_readline, METH_VARARGS, IO_readline__doc__}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
607 {"readlines", (PyCFunction)IO_readlines,METH_VARARGS, IO_readlines__doc__}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
608 {"reset", (PyCFunction)IO_reset, METH_NOARGS, IO_reset__doc__}, |
|
65215
d4909a056d4e
improve performance of writing past the end of the file for cStringIO
Fred Drake <fdrake@acm.org>
parents:
61463
diff
changeset
|
609 {"seek", (PyCFunction)IO_seek, METH_VARARGS, IO_seek__doc__}, |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
610 {"tell", (PyCFunction)IO_tell, METH_NOARGS, IO_tell__doc__}, |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
611 {"truncate", (PyCFunction)IO_truncate, METH_VARARGS, IO_truncate__doc__}, |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
612 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
613 /* Read-only StringIO specific methods: */ |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
614 {"close", (PyCFunction)I_close, METH_NOARGS, O_close__doc__}, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
615 {NULL, NULL} |
| 4598 | 616 }; |
| 617 | |
| 618 static void | |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
619 I_dealloc(Iobject *self) { |
|
6215
eb7a01b86f93
Fix the bug Jeremy was experiencing: both the close() and the
Guido van Rossum <guido@python.org>
parents:
5991
diff
changeset
|
620 Py_XDECREF(self->pbuf); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12385
diff
changeset
|
621 PyObject_Del(self); |
| 4598 | 622 } |
| 623 | |
|
20033
104b5c9b88ea
I_getiter(): Function for the tp_iter slot of Itype so that
Barry Warsaw <barry@python.org>
parents:
16546
diff
changeset
|
624 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
625 PyDoc_STRVAR(Itype__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
626 "Simple type for treating strings as input file streams"); |
| 4598 | 627 |
| 628 static PyTypeObject Itype = { | |
|
42333
6620a510e9a9
PEP 3123: Provide forward compatibility with Python 3.0, while keeping
Martin v. Löwis <martin@v.loewis.de>
parents:
41525
diff
changeset
|
629 PyVarObject_HEAD_INIT(NULL, 0) |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
630 "cStringIO.StringI", /*tp_name*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
631 sizeof(Iobject), /*tp_basicsize*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
632 0, /*tp_itemsize*/ |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
633 /* methods */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
634 (destructor)I_dealloc, /*tp_dealloc*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
635 0, /*tp_print*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
636 0, /* tp_getattr */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
637 0, /*tp_setattr*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
638 0, /*tp_compare*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
639 0, /*tp_repr*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
640 0, /*tp_as_number*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
641 0, /*tp_as_sequence*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
642 0, /*tp_as_mapping*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
643 0, /*tp_hash*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
644 0, /*tp_call*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
645 0, /*tp_str*/ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
646 0, /* tp_getattro */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
647 0, /* tp_setattro */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
648 0, /* tp_as_buffer */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
649 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
650 Itype__doc__, /* tp_doc */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
651 0, /* tp_traverse */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
652 0, /* tp_clear */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
653 0, /* tp_richcompare */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
654 0, /* tp_weaklistoffset */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
655 PyObject_SelfIter, /* tp_iter */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
656 (iternextfunc)IO_iternext, /* tp_iternext */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
657 I_methods, /* tp_methods */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
658 0, /* tp_members */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
659 file_getsetlist, /* tp_getset */ |
| 4598 | 660 }; |
| 661 | |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
662 static PyObject * |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
663 newIobject(PyObject *s) { |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
664 Iobject *self; |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
665 char *buf; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
666 Py_ssize_t size; |
|
12385
627226df9f01
raise TypeError when bad argument passed to cStringIO.StringIO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
11882
diff
changeset
|
667 |
|
73054
27ae7d4e1983
Issue #1548891: The cStringIO.StringIO() constructor now encodes unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
668 if (PyUnicode_Check(s)) { |
|
27ae7d4e1983
Issue #1548891: The cStringIO.StringIO() constructor now encodes unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
669 if (PyObject_AsCharBuffer(s, (const char **)&buf, &size) != 0) |
|
27ae7d4e1983
Issue #1548891: The cStringIO.StringIO() constructor now encodes unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
670 return NULL; |
|
27ae7d4e1983
Issue #1548891: The cStringIO.StringIO() constructor now encodes unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
671 } |
|
27ae7d4e1983
Issue #1548891: The cStringIO.StringIO() constructor now encodes unicode
Antoine Pitrou <solipsis@pitrou.net>
parents:
68256
diff
changeset
|
672 else if (PyObject_AsReadBuffer(s, (const void **)&buf, &size)) { |
|
42493
89c81fd7038e
Revert the fix for #1548891, it broke backwards compatibility with arbitrary read buffers.
Georg Brandl <georg@python.org>
parents:
41500
diff
changeset
|
673 PyErr_Format(PyExc_TypeError, "expected read buffer, %.200s found", |
|
89c81fd7038e
Revert the fix for #1548891, it broke backwards compatibility with arbitrary read buffers.
Georg Brandl <georg@python.org>
parents:
41500
diff
changeset
|
674 s->ob_type->tp_name); |
|
89c81fd7038e
Revert the fix for #1548891, it broke backwards compatibility with arbitrary read buffers.
Georg Brandl <georg@python.org>
parents:
41500
diff
changeset
|
675 return NULL; |
|
89c81fd7038e
Revert the fix for #1548891, it broke backwards compatibility with arbitrary read buffers.
Georg Brandl <georg@python.org>
parents:
41500
diff
changeset
|
676 } |
|
40099
647598c1a9d9
Bug #1548891: The cStringIO.StringIO() constructor now encodes unicode
Georg Brandl <georg@python.org>
parents:
37305
diff
changeset
|
677 |
| 36790 | 678 self = PyObject_New(Iobject, &Itype); |
| 679 if (!self) return NULL; | |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
680 Py_INCREF(s); |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
681 self->buf=buf; |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
682 self->string_size=size; |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
683 self->pbuf=s; |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
684 self->pos=0; |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
685 |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
686 return (PyObject*)self; |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
687 } |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
688 |
| 4598 | 689 /* End of code for StringI objects */ |
| 690 /* -------------------------------------------------------- */ | |
| 691 | |
| 692 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
693 PyDoc_STRVAR(IO_StringIO__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23301
diff
changeset
|
694 "StringIO([s]) -- Return a StringIO-like stream for reading or writing"); |
| 4598 | 695 |
| 696 static PyObject * | |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
697 IO_StringIO(PyObject *self, PyObject *args) { |
| 4598 | 698 PyObject *s=0; |
| 699 | |
|
27044
23280a64288e
SF patch 660559: Use METH_O and METH_NOARGS where possible
Raymond Hettinger <python@rcn.com>
parents:
25087
diff
changeset
|
700 if (!PyArg_UnpackTuple(args, "StringIO", 0, 1, &s)) return NULL; |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
701 |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
702 if (s) return newIobject(s); |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
703 return newOobject(128); |
| 4598 | 704 } |
| 705 | |
| 706 /* List of methods defined in the module */ | |
| 707 | |
| 708 static struct PyMethodDef IO_methods[] = { | |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
709 {"StringIO", (PyCFunction)IO_StringIO, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
710 METH_VARARGS, IO_StringIO__doc__}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
711 {NULL, NULL} /* sentinel */ |
| 4598 | 712 }; |
| 713 | |
| 714 | |
| 715 /* Initialization function for the module (*must* be called initcStringIO) */ | |
| 716 | |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
717 static struct PycStringIO_CAPI CAPI = { |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
718 IO_cread, |
|
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
719 IO_creadline, |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
720 O_cwrite, |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
721 IO_cgetval, |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
722 newOobject, |
|
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
723 newIobject, |
|
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
724 &Itype, |
|
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
725 &Otype, |
|
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
726 }; |
|
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
727 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
728 #ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
23832
diff
changeset
|
729 #define PyMODINIT_FUNC void |
| 9642 | 730 #endif |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
23832
diff
changeset
|
731 PyMODINIT_FUNC |
|
13690
c09c0171474f
ANSIfy some more forward declarations.
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
732 initcStringIO(void) { |
|
6227
613f976a57b4
#Plug small memory leaks in constructors.
Guido van Rossum <guido@python.org>
parents:
6215
diff
changeset
|
733 PyObject *m, *d, *v; |
| 4598 | 734 |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
735 |
| 4598 | 736 /* Create the module and add the functions */ |
| 737 m = Py_InitModule4("cStringIO", IO_methods, | |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
738 cStringIO_module_documentation, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
739 (PyObject*)NULL,PYTHON_API_VERSION); |
|
36324
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
740 if (m == NULL) return; |
| 4598 | 741 |
| 742 /* Add some symbolic constants to the module */ | |
| 743 d = PyModule_GetDict(m); | |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47587
diff
changeset
|
744 |
| 4906 | 745 /* Export C API */ |
|
44350
26384b8180c7
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents:
42494
diff
changeset
|
746 Py_TYPE(&Itype)=&PyType_Type; |
|
26384b8180c7
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents:
42494
diff
changeset
|
747 Py_TYPE(&Otype)=&PyType_Type; |
|
28772
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
748 if (PyType_Ready(&Otype) < 0) return; |
|
0ea5991f6edb
SF patch 695710: fix bug 678519: cStringIO self iterator
Raymond Hettinger <python@rcn.com>
parents:
27044
diff
changeset
|
749 if (PyType_Ready(&Itype) < 0) return; |
|
59998
d11fbc796499
Backported PyCapsule from 3.1, and converted most uses of
Larry Hastings <larry@hastings.org>
parents:
47587
diff
changeset
|
750 v = PyCapsule_New(&CAPI, PycStringIO_CAPSULE_NAME, NULL); |
|
d11fbc796499
Backported PyCapsule from 3.1, and converted most uses of
Larry Hastings <larry@hastings.org>
parents:
47587
diff
changeset
|
751 PyDict_SetItemString(d,"cStringIO_CAPI", v); |
|
6227
613f976a57b4
#Plug small memory leaks in constructors.
Guido van Rossum <guido@python.org>
parents:
6215
diff
changeset
|
752 Py_XDECREF(v); |
|
5280
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
753 |
|
e8f8cf358054
Unknown changes by Jim Fulton.
Guido van Rossum <guido@python.org>
parents:
4957
diff
changeset
|
754 /* Export Types */ |
| 4598 | 755 PyDict_SetItemString(d,"InputType", (PyObject*)&Itype); |
| 756 PyDict_SetItemString(d,"OutputType", (PyObject*)&Otype); | |
|
5991
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
757 |
|
a5737dd96979
cPickle release 0.3 from Jim Fulton
Guido van Rossum <guido@python.org>
parents:
5315
diff
changeset
|
758 /* Maybe make certain warnings go away */ |
|
15059
acb88607b4bd
Added a new "base" type, IOobject for which most of the
Jim Fulton <jim@zope.com>
parents:
14679
diff
changeset
|
759 if (0) PycString_IMPORT; |
| 4598 | 760 } |
