contrib/python-zstandard/c-ext/decompressionwriter.c
changeset 30822 b54a2984cdd4
parent 30435 b86a448a2965
child 30895 c32454d69b85
equal deleted inserted replaced
30821:7005c03f7387 30822:b54a2984cdd4
    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