Mercurial > cpython-lru_cache-weakref
annotate Modules/_stringio.c @ 48632:5f3ef6400a96
Blocked revisions 65444 via svnmerge
........
r65444 | brett.cannon | 2008-08-03 15:57:23 -0700 (Sun, 03 Aug 2008) | 3 lines
Remove a dict.has_key() and callable() usage in SimpleXMLRPCServer as triggered
under -3 through test_xmlrpc.
........
| author | Brett Cannon <bcannon@gmail.com> |
|---|---|
| date | Sun, 03 Aug 2008 22:58:03 +0000 |
| parents | 1bfea956d0d7 |
| children | 598d19936186 |
| rev | line source |
|---|---|
|
47625
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
1 #include "Python.h" |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
2 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
3 /* This module is a stripped down version of _bytesio.c with a Py_UNICODE |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
4 buffer. Most of the functionality is provided by subclassing _StringIO. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
5 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
6 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
7 typedef struct { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
8 PyObject_HEAD |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
9 Py_UNICODE *buf; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
10 Py_ssize_t pos; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
11 Py_ssize_t string_size; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
12 size_t buf_size; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
13 } StringIOObject; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
14 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
15 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
16 /* Internal routine for changing the size, in terms of characters, of the |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
17 buffer of StringIO objects. The caller should ensure that the 'size' |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
18 argument is non-negative. Returns 0 on success, -1 otherwise. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
19 static int |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
20 resize_buffer(StringIOObject *self, size_t size) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
21 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
22 /* Here, unsigned types are used to avoid dealing with signed integer |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
23 overflow, which is undefined in C. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
24 size_t alloc = self->buf_size; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
25 Py_UNICODE *new_buf = NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
26 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
27 assert(self->buf != NULL); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
28 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
29 /* For simplicity, stay in the range of the signed type. Anyway, Python |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
30 doesn't allow strings to be longer than this. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
31 if (size > PY_SSIZE_T_MAX) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
32 goto overflow; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
33 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
34 if (size < alloc / 2) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
35 /* Major downsize; resize down to exact size. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
36 alloc = size + 1; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
37 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
38 else if (size < alloc) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
39 /* Within allocated size; quick exit */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
40 return 0; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
41 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
42 else if (size <= alloc * 1.125) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
43 /* Moderate upsize; overallocate similar to list_resize() */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
44 alloc = size + (size >> 3) + (size < 9 ? 3 : 6); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
45 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
46 else { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
47 /* Major upsize; resize up to exact size */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
48 alloc = size + 1; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
49 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
50 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
51 if (alloc > ((size_t)-1) / sizeof(Py_UNICODE)) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
52 goto overflow; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
53 new_buf = (Py_UNICODE *)PyMem_Realloc(self->buf, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
54 alloc * sizeof(Py_UNICODE)); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
55 if (new_buf == NULL) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
56 PyErr_NoMemory(); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
57 return -1; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
58 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
59 self->buf_size = alloc; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
60 self->buf = new_buf; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
61 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
62 return 0; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
63 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
64 overflow: |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
65 PyErr_SetString(PyExc_OverflowError, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
66 "new buffer size too large"); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
67 return -1; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
68 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
69 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
70 /* Internal routine for writing a string of characters to the buffer of a |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
71 StringIO object. Returns the number of bytes wrote, or -1 on error. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
72 static Py_ssize_t |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
73 write_str(StringIOObject *self, const Py_UNICODE *str, Py_ssize_t len) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
74 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
75 assert(self->buf != NULL); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
76 assert(self->pos >= 0); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
77 assert(len >= 0); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
78 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
79 /* This overflow check is not strictly necessary. However, it avoids us to |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
80 deal with funky things like comparing an unsigned and a signed |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
81 integer. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
82 if (self->pos > PY_SSIZE_T_MAX - len) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
83 PyErr_SetString(PyExc_OverflowError, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
84 "new position too large"); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
85 return -1; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
86 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
87 if (self->pos + len > self->string_size) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
88 if (resize_buffer(self, self->pos + len) < 0) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
89 return -1; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
90 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
91 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
92 if (self->pos > self->string_size) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
93 /* In case of overseek, pad with null bytes the buffer region between |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
94 the end of stream and the current position. |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
95 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
96 0 lo string_size hi |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
97 | |<---used--->|<----------available----------->| |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
98 | | <--to pad-->|<---to write---> | |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
99 0 buf positon |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
100 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
101 */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
102 memset(self->buf + self->string_size, '\0', |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
103 (self->pos - self->string_size) * sizeof(Py_UNICODE)); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
104 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
105 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
106 /* Copy the data to the internal buffer, overwriting some of the |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
107 existing data if self->pos < self->string_size. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
108 memcpy(self->buf + self->pos, str, len * sizeof(Py_UNICODE)); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
109 self->pos += len; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
110 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
111 /* Set the new length of the internal string if it has changed */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
112 if (self->string_size < self->pos) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
113 self->string_size = self->pos; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
114 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
115 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
116 return len; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
117 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
118 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
119 static PyObject * |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
120 stringio_getvalue(StringIOObject *self) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
121 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
122 return PyUnicode_FromUnicode(self->buf, self->string_size); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
123 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
124 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
125 static PyObject * |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
126 stringio_tell(StringIOObject *self) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
127 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
128 return PyLong_FromSsize_t(self->pos); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
129 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
130 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
131 static PyObject * |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
132 stringio_read(StringIOObject *self, PyObject *args) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
133 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
134 Py_ssize_t size, n; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
135 Py_UNICODE *output; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
136 PyObject *arg = Py_None; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
137 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
138 if (!PyArg_ParseTuple(args, "|O:read", &arg)) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
139 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
140 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
141 if (PyLong_Check(arg)) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
142 size = PyLong_AsSsize_t(arg); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
143 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
144 else if (arg == Py_None) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
145 /* Read until EOF is reached, by default. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
146 size = -1; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
147 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
148 else { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
149 PyErr_Format(PyExc_TypeError, "integer argument expected, got '%s'", |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
150 Py_TYPE(arg)->tp_name); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
151 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
152 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
153 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
154 /* adjust invalid sizes */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
155 n = self->string_size - self->pos; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
156 if (size < 0 || size > n) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
157 size = n; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
158 if (size < 0) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
159 size = 0; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
160 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
161 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
162 assert(self->buf != NULL); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
163 output = self->buf + self->pos; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
164 self->pos += size; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
165 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
166 return PyUnicode_FromUnicode(output, size); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
167 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
168 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
169 static PyObject * |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
170 stringio_truncate(StringIOObject *self, PyObject *args) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
171 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
172 Py_ssize_t size; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
173 PyObject *arg = Py_None; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
174 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
175 if (!PyArg_ParseTuple(args, "|O:truncate", &arg)) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
176 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
177 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
178 if (PyLong_Check(arg)) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
179 size = PyLong_AsSsize_t(arg); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
180 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
181 else if (arg == Py_None) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
182 /* Truncate to current position if no argument is passed. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
183 size = self->pos; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
184 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
185 else { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
186 PyErr_Format(PyExc_TypeError, "integer argument expected, got '%s'", |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
187 Py_TYPE(arg)->tp_name); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
188 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
189 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
190 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
191 if (size < 0) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
192 PyErr_Format(PyExc_ValueError, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
193 "Negative size value %zd", size); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
194 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
195 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
196 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
197 if (size < self->string_size) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
198 self->string_size = size; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
199 if (resize_buffer(self, size) < 0) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
200 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
201 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
202 self->pos = size; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
203 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
204 return PyLong_FromSsize_t(size); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
205 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
206 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
207 static PyObject * |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
208 stringio_seek(StringIOObject *self, PyObject *args) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
209 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
210 Py_ssize_t pos; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
211 int mode = 0; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
212 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
213 if (!PyArg_ParseTuple(args, "n|i:seek", &pos, &mode)) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
214 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
215 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
216 if (mode != 0 && mode != 1 && mode != 2) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
217 PyErr_Format(PyExc_ValueError, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
218 "Invalid whence (%i, should be 0, 1 or 2)", mode); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
219 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
220 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
221 else if (pos < 0 && mode == 0) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
222 PyErr_Format(PyExc_ValueError, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
223 "Negative seek position %zd", pos); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
224 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
225 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
226 else if (mode != 0 && pos != 0) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
227 PyErr_SetString(PyExc_IOError, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
228 "Can't do nonzero cur-relative seeks"); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
229 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
230 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
231 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
232 /* mode 0: offset relative to beginning of the string. |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
233 mode 1: no change to current position. |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
234 mode 2: change position to end of file. */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
235 if (mode == 1) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
236 pos = self->pos; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
237 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
238 else if (mode == 2) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
239 pos = self->string_size; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
240 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
241 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
242 self->pos = pos; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
243 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
244 return PyLong_FromSsize_t(self->pos); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
245 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
246 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
247 static PyObject * |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
248 stringio_write(StringIOObject *self, PyObject *obj) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
249 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
250 const Py_UNICODE *str; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
251 Py_ssize_t size; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
252 Py_ssize_t n = 0; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
253 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
254 if (PyUnicode_Check(obj)) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
255 str = PyUnicode_AsUnicode(obj); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
256 size = PyUnicode_GetSize(obj); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
257 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
258 else { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
259 PyErr_Format(PyExc_TypeError, "string argument expected, got '%s'", |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
260 Py_TYPE(obj)->tp_name); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
261 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
262 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
263 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
264 if (size != 0) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
265 n = write_str(self, str, size); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
266 if (n < 0) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
267 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
268 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
269 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
270 return PyLong_FromSsize_t(n); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
271 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
272 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
273 static void |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
274 stringio_dealloc(StringIOObject *self) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
275 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
276 PyMem_Free(self->buf); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
277 Py_TYPE(self)->tp_free(self); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
278 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
279 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
280 static PyObject * |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
281 stringio_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
282 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
283 StringIOObject *self; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
284 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
285 assert(type != NULL && type->tp_alloc != NULL); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
286 self = (StringIOObject *)type->tp_alloc(type, 0); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
287 if (self == NULL) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
288 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
289 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
290 self->string_size = 0; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
291 self->pos = 0; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
292 self->buf_size = 0; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
293 self->buf = (Py_UNICODE *)PyMem_Malloc(0); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
294 if (self->buf == NULL) { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
295 Py_DECREF(self); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
296 return PyErr_NoMemory(); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
297 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
298 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
299 return (PyObject *)self; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
300 } |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
301 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
302 static struct PyMethodDef stringio_methods[] = { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
303 {"getvalue", (PyCFunction)stringio_getvalue, METH_VARARGS, NULL}, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
304 {"read", (PyCFunction)stringio_read, METH_VARARGS, NULL}, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
305 {"tell", (PyCFunction)stringio_tell, METH_NOARGS, NULL}, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
306 {"truncate", (PyCFunction)stringio_truncate, METH_VARARGS, NULL}, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
307 {"seek", (PyCFunction)stringio_seek, METH_VARARGS, NULL}, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
308 {"write", (PyCFunction)stringio_write, METH_O, NULL}, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
309 {NULL, NULL} /* sentinel */ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
310 }; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
311 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
312 static PyTypeObject StringIO_Type = { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
313 PyVarObject_HEAD_INIT(NULL, 0) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
314 "_stringio._StringIO", /*tp_name*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
315 sizeof(StringIOObject), /*tp_basicsize*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
316 0, /*tp_itemsize*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
317 (destructor)stringio_dealloc, /*tp_dealloc*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
318 0, /*tp_print*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
319 0, /*tp_getattr*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
320 0, /*tp_setattr*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
321 0, /*tp_compare*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
322 0, /*tp_repr*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
323 0, /*tp_as_number*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
324 0, /*tp_as_sequence*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
325 0, /*tp_as_mapping*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
326 0, /*tp_hash*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
327 0, /*tp_call*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
328 0, /*tp_str*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
329 0, /*tp_getattro*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
330 0, /*tp_setattro*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
331 0, /*tp_as_buffer*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
332 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
333 0, /*tp_doc*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
334 0, /*tp_traverse*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
335 0, /*tp_clear*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
336 0, /*tp_richcompare*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
337 0, /*tp_weaklistoffset*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
338 0, /*tp_iter*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
339 0, /*tp_iternext*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
340 stringio_methods, /*tp_methods*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
341 0, /*tp_members*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
342 0, /*tp_getset*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
343 0, /*tp_base*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
344 0, /*tp_dict*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
345 0, /*tp_descr_get*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
346 0, /*tp_descr_set*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
347 0, /*tp_dictoffset*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
348 0, /*tp_init*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
349 0, /*tp_alloc*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
350 stringio_new, /*tp_new*/ |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
351 }; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
352 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
353 static struct PyModuleDef _stringiomodule = { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
354 PyModuleDef_HEAD_INIT, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
355 "_stringio", |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
356 NULL, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
357 -1, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
358 NULL, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
359 NULL, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
360 NULL, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
361 NULL, |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
362 NULL |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
363 }; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
364 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
365 PyMODINIT_FUNC |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
366 PyInit__stringio(void) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
367 { |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
368 PyObject *m; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
369 |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
370 if (PyType_Ready(&StringIO_Type) < 0) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
371 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
372 m = PyModule_Create(&_stringiomodule); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
373 if (m == NULL) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
374 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
375 Py_INCREF(&StringIO_Type); |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
376 if (PyModule_AddObject(m, "_StringIO", (PyObject *)&StringIO_Type) < 0) |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
377 return NULL; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
378 return m; |
|
1bfea956d0d7
Issue 2918: Merge StringIO and cStringIO.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
diff
changeset
|
379 } |
