commit - 15c8b0e675da56f362174a5673cb04f7d2ac7a0d
commit + c7254d795765d62beabc23051fba3028bf97533e
blob - b422dcf23f4d3202618f7f7f5dd3c76c728f7479
blob + 5ccc4389388e2e198f43ced7311b5c28058150d4
--- lib/object.c
+++ lib/object.c
(*blob)->read_buf = calloc(1, blocksize);
if ((*blob)->read_buf == NULL) {
err = got_error_from_errno();
- free(*blob);
- *blob = NULL;
- return err;
+ goto done;
}
if (obj->flags & GOT_OBJ_FLAG_PACKED) {
err = got_packfile_extract_object(&((*blob)->f), obj, repo);
- if (err) {
- free((*blob)->read_buf);
- free(*blob);
- *blob = NULL;
- return err;
- }
+ if (err)
+ goto done;
} 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;
- }
+ if (err)
+ goto done;
+
f = fdopen(fd, "rb");
if (f == NULL) {
- free((*blob)->read_buf);
- free(*blob);
- *blob = NULL;
- return err;
+ err = got_error_from_errno();
+ close(fd);
+ goto done;
}
(*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;
+ goto done;
}
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;
- }
+ fclose(f);
+ if (err != NULL)
+ goto done;
}
(*blob)->hdrlen = obj->hdrlen;
(*blob)->blocksize = blocksize;
memcpy(&(*blob)->id.sha1, obj->id.sha1, SHA1_DIGEST_LENGTH);
+done:
+ if (err && *blob) {
+ if ((*blob)->f)
+ fclose((*blob)->f);
+ free((*blob)->read_buf);
+ free(*blob);
+ *blob = NULL;
+ }
return err;
}