commit - b65ae19a62d9cce64ca53f9ecb9d219a66ef2f86
commit + 15c8b0e675da56f362174a5673cb04f7d2ac7a0d
blob - 4cfa4a51368b015a532f56d4588e182ad78b9e69
blob + 37a0ffc06e205900a148c1e549b6fffdc28b580e
--- lib/got_lib_object.h
+++ lib/got_lib_object.h
size_t hdrlen;
size_t blocksize;
uint8_t *read_buf;
- int flags;
-#define GOT_BLOB_F_COMPRESSED 0x01
struct got_object_id id;
};
blob - 98e4f11e71887b6117bf17e88675d07c1a274080
blob + b422dcf23f4d3202618f7f7f5dd3c76c728f7479
--- lib/object.c
+++ lib/object.c
if (*blob == NULL)
return got_error_from_errno();
+ (*blob)->read_buf = calloc(1, blocksize);
+ if ((*blob)->read_buf == NULL) {
+ err = got_error_from_errno();
+ free(*blob);
+ *blob = NULL;
+ return err;
+ }
if (obj->flags & GOT_OBJ_FLAG_PACKED) {
- (*blob)->read_buf = calloc(1, blocksize);
- if ((*blob)->read_buf == NULL) {
- err = got_error_from_errno();
- free(*blob);
- *blob = NULL;
- return err;
- }
err = got_packfile_extract_object(&((*blob)->f), obj, repo);
if (err) {
free((*blob)->read_buf);
}
} else {
int fd;
+ FILE *f = NULL;
+ size_t size;
err = open_loose_object(&fd, obj, repo);
if (err) {
+ free((*blob)->read_buf);
free(*blob);
*blob = NULL;
return err;
}
- (*blob)->f = fdopen(fd, "rb");
+ f = fdopen(fd, "rb");
+ if (f == NULL) {
+ free((*blob)->read_buf);
+ free(*blob);
+ *blob = NULL;
+ return err;
+ }
+
+ (*blob)->f = got_opentemp();
if ((*blob)->f == NULL) {
+ err = got_error_from_errno();
+ free((*blob)->read_buf);
free(*blob);
*blob = NULL;
close(fd);
+ fclose(f);
return err;
}
- err = got_inflate_init(&(*blob)->zb, NULL, blocksize);
+ err = got_inflate_to_file(&size, f, (*blob)->f);
if (err != NULL) {
fclose((*blob)->f);
+ free((*blob)->read_buf);
free(*blob);
*blob = NULL;
+ fclose(f);
return err;
}
-
- (*blob)->read_buf = (*blob)->zb.outbuf;
- (*blob)->flags |= GOT_BLOB_F_COMPRESSED;
}
(*blob)->hdrlen = obj->hdrlen;
void
got_object_blob_close(struct got_blob_object *blob)
{
- if (blob->flags & GOT_BLOB_F_COMPRESSED)
- got_inflate_end(&blob->zb);
- else
- free(blob->read_buf);
+ free(blob->read_buf);
fclose(blob->f);
free(blob);
}
{
size_t n;
- if (blob->flags & GOT_BLOB_F_COMPRESSED)
- return got_inflate_read(&blob->zb, blob->f, outlenp);
-
n = fread(blob->read_buf, 1, blob->blocksize, blob->f);
if (n == 0 && ferror(blob->f))
return got_ferror(blob->f, GOT_ERR_IO);