/* * Compress from a file to a newly malloc'd block. */ int dcc_compress_file_lzo1x(int in_fd, size_t in_len, char **out_buf, size_t *out_len) { char *in_buf = NULL; int ret; if ((in_buf = malloc(in_len)) == NULL) { rs_log_error("allocation of %ld byte buffer failed", (long) in_len); ret = EXIT_OUT_OF_MEMORY; goto out; } if ((ret = dcc_readx(in_fd, in_buf, in_len))) goto out; if ((ret = dcc_compress_lzo1x_alloc(in_buf, in_len, out_buf, out_len))) goto out; out: if (in_buf != NULL) { free(in_buf); } return ret; }
static PyObject * CompressLzo1xAlloc(PyObject *dummy, PyObject *args) { PyObject *string_object; const char *in_buf; int in_len; char *out_buf; size_t out_len; UNUSED(dummy); if (!PyArg_ParseTuple(args, "s#", &in_buf, &in_len)) return NULL; if (in_len < 0) return NULL; if (dcc_compress_lzo1x_alloc(in_buf, in_len, &out_buf, &out_len)) { PyErr_SetString(distcc_pump_c_extensionsError, "Couldn't compress that."); return NULL; } string_object = PyBytes_FromStringAndSize(out_buf, out_len); free(out_buf); return string_object; }