equal
deleted
inserted
replaced
50 size_t zresult; |
50 size_t zresult; |
51 |
51 |
52 ZSTD_outBuffer output; |
52 ZSTD_outBuffer output; |
53 PyObject* res; |
53 PyObject* res; |
54 |
54 |
55 if (!PyArg_ParseTuple(args, "OOO", &exc_type, &exc_value, &exc_tb)) { |
55 if (!PyArg_ParseTuple(args, "OOO:__exit__", &exc_type, &exc_value, &exc_tb)) { |
56 return NULL; |
56 return NULL; |
57 } |
57 } |
58 |
58 |
59 self->entered = 0; |
59 self->entered = 0; |
60 |
60 |
117 Py_ssize_t sourceSize; |
117 Py_ssize_t sourceSize; |
118 size_t zresult; |
118 size_t zresult; |
119 ZSTD_inBuffer input; |
119 ZSTD_inBuffer input; |
120 ZSTD_outBuffer output; |
120 ZSTD_outBuffer output; |
121 PyObject* res; |
121 PyObject* res; |
122 |
122 Py_ssize_t totalWrite = 0; |
123 #if PY_MAJOR_VERSION >= 3 |
123 |
124 if (!PyArg_ParseTuple(args, "y#", &source, &sourceSize)) { |
124 #if PY_MAJOR_VERSION >= 3 |
125 #else |
125 if (!PyArg_ParseTuple(args, "y#:write", &source, &sourceSize)) { |
126 if (!PyArg_ParseTuple(args, "s#", &source, &sourceSize)) { |
126 #else |
|
127 if (!PyArg_ParseTuple(args, "s#:write", &source, &sourceSize)) { |
127 #endif |
128 #endif |
128 return NULL; |
129 return NULL; |
129 } |
130 } |
130 |
131 |
131 if (!self->entered) { |
132 if (!self->entered) { |
162 #else |
163 #else |
163 res = PyObject_CallMethod(self->writer, "write", "s#", |
164 res = PyObject_CallMethod(self->writer, "write", "s#", |
164 #endif |
165 #endif |
165 output.dst, output.pos); |
166 output.dst, output.pos); |
166 Py_XDECREF(res); |
167 Py_XDECREF(res); |
|
168 totalWrite += output.pos; |
167 } |
169 } |
168 output.pos = 0; |
170 output.pos = 0; |
169 } |
171 } |
170 |
172 |
171 PyMem_Free(output.dst); |
173 PyMem_Free(output.dst); |
172 |
174 |
173 /* TODO return bytes written */ |
175 return PyLong_FromSsize_t(totalWrite); |
174 Py_RETURN_NONE; |
|
175 } |
176 } |
176 |
177 |
177 static PyObject* ZstdCompressionWriter_flush(ZstdCompressionWriter* self, PyObject* args) { |
178 static PyObject* ZstdCompressionWriter_flush(ZstdCompressionWriter* self, PyObject* args) { |
178 size_t zresult; |
179 size_t zresult; |
179 ZSTD_outBuffer output; |
180 ZSTD_outBuffer output; |
180 PyObject* res; |
181 PyObject* res; |
|
182 Py_ssize_t totalWrite = 0; |
181 |
183 |
182 if (!self->entered) { |
184 if (!self->entered) { |
183 PyErr_SetString(ZstdError, "flush must be called from an active context manager"); |
185 PyErr_SetString(ZstdError, "flush must be called from an active context manager"); |
184 return NULL; |
186 return NULL; |
185 } |
187 } |
213 #else |
215 #else |
214 res = PyObject_CallMethod(self->writer, "write", "s#", |
216 res = PyObject_CallMethod(self->writer, "write", "s#", |
215 #endif |
217 #endif |
216 output.dst, output.pos); |
218 output.dst, output.pos); |
217 Py_XDECREF(res); |
219 Py_XDECREF(res); |
|
220 totalWrite += output.pos; |
218 } |
221 } |
219 output.pos = 0; |
222 output.pos = 0; |
220 } |
223 } |
221 |
224 |
222 PyMem_Free(output.dst); |
225 PyMem_Free(output.dst); |
223 |
226 |
224 /* TODO return bytes written */ |
227 return PyLong_FromSsize_t(totalWrite); |
225 Py_RETURN_NONE; |
|
226 } |
228 } |
227 |
229 |
228 static PyMethodDef ZstdCompressionWriter_methods[] = { |
230 static PyMethodDef ZstdCompressionWriter_methods[] = { |
229 { "__enter__", (PyCFunction)ZstdCompressionWriter_enter, METH_NOARGS, |
231 { "__enter__", (PyCFunction)ZstdCompressionWriter_enter, METH_NOARGS, |
230 PyDoc_STR("Enter a compression context.") }, |
232 PyDoc_STR("Enter a compression context.") }, |