| 2931 | } |
| 2932 | |
| 2933 | int packfile_read_object_stream(struct odb_read_stream **out, |
| 2934 | const struct object_id *oid, |
| 2935 | struct packed_git *pack, |
| 2936 | off_t offset) |
| 2937 | { |
| 2938 | struct odb_packed_read_stream *stream; |
| 2939 | struct pack_window *window = NULL; |
| 2940 | enum object_type in_pack_type; |
| 2941 | size_t size; |
| 2942 | |
| 2943 | in_pack_type = unpack_object_header(pack, &window, &offset, &size); |
| 2944 | unuse_pack(&window); |
| 2945 | |
| 2946 | if (repo_settings_get_big_file_threshold(pack->repo) >= size) |
| 2947 | return -1; |
| 2948 | |
| 2949 | switch (in_pack_type) { |
| 2950 | default: |
| 2951 | return -1; /* we do not do deltas for now */ |
| 2952 | case OBJ_BAD: |
| 2953 | mark_bad_packed_object(pack, oid); |
| 2954 | return -1; |
| 2955 | case OBJ_COMMIT: |
| 2956 | case OBJ_TREE: |
| 2957 | case OBJ_BLOB: |
| 2958 | case OBJ_TAG: |
| 2959 | break; |
| 2960 | } |
| 2961 | |
| 2962 | CALLOC_ARRAY(stream, 1); |
| 2963 | stream->base.close = close_istream_pack_non_delta; |
| 2964 | stream->base.read = read_istream_pack_non_delta; |
| 2965 | stream->base.type = in_pack_type; |
| 2966 | stream->base.size = size; |
| 2967 | stream->z_state = ODB_PACKED_READ_STREAM_UNINITIALIZED; |
| 2968 | stream->pack = pack; |
| 2969 | stream->pos = offset; |
| 2970 | |
| 2971 | *out = &stream->base; |
| 2972 | |
| 2973 | return 0; |
| 2974 | } |
| 2975 | |
| 2976 | int packfile_store_read_object_stream(struct odb_read_stream **out, |
| 2977 | struct packfile_store *store, |
no test coverage detected