commit 040bf4a1507fed89b06cff95edf9f230ebc32ed2 from: Stefan Sperling date: Sun Apr 01 12:43:53 2018 UTC stop using fmemopen(); that code path didn't work correctly commit - 5a83d54eba5f144334986a6989a7c146de4b3423 commit + 040bf4a1507fed89b06cff95edf9f230ebc32ed2 blob - f9c3ce7964f9b871111c17a917f1e3348cae9ea3 blob + 10708fc5990cd0278bf912f985c9d3f289af2553 --- lib/pack.c +++ lib/pack.c @@ -1277,43 +1277,23 @@ got_packfile_extract_object(FILE **f, struct got_objec err = cache_pack(&pack, obj->path_packfile, NULL, repo); if (err) goto done; + } + + *f = got_opentemp(); + if (*f == NULL) { + err = got_error(GOT_ERR_FILE_OPEN); + goto done; } if ((obj->flags & GOT_OBJ_FLAG_DELTIFIED) == 0) { if (fseeko(pack->packfile, obj->pack_offset, SEEK_SET) != 0) { err = got_error_from_errno(); - goto done; - } - - if (obj->size < GOT_DELTA_RESULT_SIZE_CACHED_MAX) { - size_t size = obj->size; - if (size == 0) /* empty file */ - size = 1; - *f = fmemopen(NULL, size, "w+"); - } else - *f = got_opentemp(); - if (*f == NULL) { - err = got_error(GOT_ERR_FILE_OPEN); goto done; } err = got_inflate_to_file(&obj->size, pack->packfile, *f); - } else { - uint64_t max_size; - - err = get_delta_chain_max_size(&max_size, &obj->deltas); - if (err) - return err; - if (max_size < GOT_DELTA_RESULT_SIZE_CACHED_MAX) - *f = fmemopen(NULL, max_size, "w+"); - else - *f = got_opentemp(); - if (*f == NULL) { - err = got_error(GOT_ERR_FILE_OPEN); - goto done; - } + } else err = dump_delta_chain_to_file(&obj->size, &obj->deltas, *f, pack, repo); - } done: if (err && *f) { fclose(*f);