equal
deleted
inserted
replaced
83 if (!self->entered) { |
83 if (!self->entered) { |
84 PyErr_SetString(ZstdError, "write must be called from an active context manager"); |
84 PyErr_SetString(ZstdError, "write must be called from an active context manager"); |
85 return NULL; |
85 return NULL; |
86 } |
86 } |
87 |
87 |
88 output.dst = malloc(self->outSize); |
88 output.dst = PyMem_Malloc(self->outSize); |
89 if (!output.dst) { |
89 if (!output.dst) { |
90 return PyErr_NoMemory(); |
90 return PyErr_NoMemory(); |
91 } |
91 } |
92 output.size = self->outSize; |
92 output.size = self->outSize; |
93 output.pos = 0; |
93 output.pos = 0; |
100 Py_BEGIN_ALLOW_THREADS |
100 Py_BEGIN_ALLOW_THREADS |
101 zresult = ZSTD_decompressStream(self->dstream, &output, &input); |
101 zresult = ZSTD_decompressStream(self->dstream, &output, &input); |
102 Py_END_ALLOW_THREADS |
102 Py_END_ALLOW_THREADS |
103 |
103 |
104 if (ZSTD_isError(zresult)) { |
104 if (ZSTD_isError(zresult)) { |
105 free(output.dst); |
105 PyMem_Free(output.dst); |
106 PyErr_Format(ZstdError, "zstd decompress error: %s", |
106 PyErr_Format(ZstdError, "zstd decompress error: %s", |
107 ZSTD_getErrorName(zresult)); |
107 ZSTD_getErrorName(zresult)); |
108 return NULL; |
108 return NULL; |
109 } |
109 } |
110 |
110 |
118 Py_XDECREF(res); |
118 Py_XDECREF(res); |
119 output.pos = 0; |
119 output.pos = 0; |
120 } |
120 } |
121 } |
121 } |
122 |
122 |
123 free(output.dst); |
123 PyMem_Free(output.dst); |
124 |
124 |
125 /* TODO return bytes written */ |
125 /* TODO return bytes written */ |
126 Py_RETURN_NONE; |
126 Py_RETURN_NONE; |
127 } |
127 } |
128 |
128 |