Line | Count | Source |
1 | | #ifndef CSUM_FILE_H |
2 | | #define CSUM_FILE_H |
3 | | |
4 | | #include "hash.h" |
5 | | #include "write-or-die.h" |
6 | | |
7 | | struct progress; |
8 | | |
9 | | /* A SHA1-protected file */ |
10 | | struct hashfile { |
11 | | int fd; |
12 | | int check_fd; |
13 | | unsigned int offset; |
14 | | struct git_hash_ctx ctx; |
15 | | off_t total; |
16 | | struct progress *tp; |
17 | | const char *name; |
18 | | int do_crc; |
19 | | uint32_t crc32; |
20 | | size_t buffer_len; |
21 | | unsigned char *buffer; |
22 | | unsigned char *check_buffer; |
23 | | const struct git_hash_algo *algop; |
24 | | |
25 | | /** |
26 | | * If non-zero, skip_hash indicates that we should |
27 | | * not actually compute the hash for this hashfile and |
28 | | * instead only use it as a buffered write. |
29 | | */ |
30 | | int skip_hash; |
31 | | }; |
32 | | |
33 | | /* Checkpoint */ |
34 | | struct hashfile_checkpoint { |
35 | | off_t offset; |
36 | | struct git_hash_ctx ctx; |
37 | | }; |
38 | | |
39 | | void hashfile_checkpoint_init(struct hashfile *, struct hashfile_checkpoint *); |
40 | | void hashfile_checkpoint(struct hashfile *, struct hashfile_checkpoint *); |
41 | | int hashfile_truncate(struct hashfile *, struct hashfile_checkpoint *); |
42 | | |
43 | | /* finalize_hashfile flags */ |
44 | 0 | #define CSUM_CLOSE 1 |
45 | 0 | #define CSUM_FSYNC 2 |
46 | 0 | #define CSUM_HASH_IN_STREAM 4 |
47 | | |
48 | | struct hashfile *hashfd(const struct git_hash_algo *algop, |
49 | | int fd, const char *name); |
50 | | struct hashfile *hashfd_check(const struct git_hash_algo *algop, |
51 | | const char *name); |
52 | | struct hashfile *hashfd_throughput(const struct git_hash_algo *algop, |
53 | | int fd, const char *name, struct progress *tp); |
54 | | |
55 | | /* |
56 | | * Free the hashfile without flushing its contents to disk. This only |
57 | | * needs to be called when not calling `finalize_hashfile()`. |
58 | | */ |
59 | | void free_hashfile(struct hashfile *f); |
60 | | |
61 | | /* |
62 | | * Finalize the hashfile by flushing data to disk and free'ing it. |
63 | | */ |
64 | | int finalize_hashfile(struct hashfile *, unsigned char *, enum fsync_component, unsigned int); |
65 | | void discard_hashfile(struct hashfile *); |
66 | | void hashwrite(struct hashfile *, const void *, unsigned int); |
67 | | void hashflush(struct hashfile *f); |
68 | | void crc32_begin(struct hashfile *); |
69 | | uint32_t crc32_end(struct hashfile *); |
70 | | |
71 | | /* Verify checksum validity while reading. Returns non-zero on success. */ |
72 | | int hashfile_checksum_valid(const struct git_hash_algo *algop, |
73 | | const unsigned char *data, size_t len); |
74 | | |
75 | | /* |
76 | | * Returns the total number of bytes fed to the hashfile so far (including ones |
77 | | * that have not been written out to the descriptor yet). |
78 | | */ |
79 | | static inline off_t hashfile_total(struct hashfile *f) |
80 | 0 | { |
81 | 0 | return f->total + f->offset; |
82 | 0 | } Unexecuted instantiation: packfile.c:hashfile_total Unexecuted instantiation: repo-settings.c:hashfile_total Unexecuted instantiation: midx.c:hashfile_total Unexecuted instantiation: object-file.c:hashfile_total Unexecuted instantiation: pack-check.c:hashfile_total Unexecuted instantiation: pack-revindex.c:hashfile_total Unexecuted instantiation: pack-write.c:hashfile_total Unexecuted instantiation: read-cache.c:hashfile_total Unexecuted instantiation: chunk-format.c:hashfile_total Unexecuted instantiation: commit-graph.c:hashfile_total Unexecuted instantiation: csum-file.c:hashfile_total Unexecuted instantiation: fetch-pack.c:hashfile_total |
83 | | |
84 | | static inline void hashwrite_u8(struct hashfile *f, uint8_t data) |
85 | 0 | { |
86 | 0 | hashwrite(f, &data, sizeof(data)); |
87 | 0 | } Unexecuted instantiation: packfile.c:hashwrite_u8 Unexecuted instantiation: repo-settings.c:hashwrite_u8 Unexecuted instantiation: midx.c:hashwrite_u8 Unexecuted instantiation: object-file.c:hashwrite_u8 Unexecuted instantiation: pack-check.c:hashwrite_u8 Unexecuted instantiation: pack-revindex.c:hashwrite_u8 Unexecuted instantiation: pack-write.c:hashwrite_u8 Unexecuted instantiation: read-cache.c:hashwrite_u8 Unexecuted instantiation: chunk-format.c:hashwrite_u8 Unexecuted instantiation: commit-graph.c:hashwrite_u8 Unexecuted instantiation: csum-file.c:hashwrite_u8 Unexecuted instantiation: fetch-pack.c:hashwrite_u8 |
88 | | |
89 | | static inline void hashwrite_be32(struct hashfile *f, uint32_t data) |
90 | 0 | { |
91 | 0 | data = htonl(data); |
92 | 0 | hashwrite(f, &data, sizeof(data)); |
93 | 0 | } Unexecuted instantiation: packfile.c:hashwrite_be32 Unexecuted instantiation: repo-settings.c:hashwrite_be32 Unexecuted instantiation: midx.c:hashwrite_be32 Unexecuted instantiation: object-file.c:hashwrite_be32 Unexecuted instantiation: pack-check.c:hashwrite_be32 Unexecuted instantiation: pack-revindex.c:hashwrite_be32 Unexecuted instantiation: pack-write.c:hashwrite_be32 Unexecuted instantiation: read-cache.c:hashwrite_be32 Unexecuted instantiation: chunk-format.c:hashwrite_be32 Unexecuted instantiation: commit-graph.c:hashwrite_be32 Unexecuted instantiation: csum-file.c:hashwrite_be32 Unexecuted instantiation: fetch-pack.c:hashwrite_be32 |
94 | | |
95 | | static inline size_t hashwrite_be64(struct hashfile *f, uint64_t data) |
96 | 0 | { |
97 | 0 | data = htonll(data); |
98 | 0 | hashwrite(f, &data, sizeof(data)); |
99 | 0 | return sizeof(data); |
100 | 0 | } Unexecuted instantiation: packfile.c:hashwrite_be64 Unexecuted instantiation: repo-settings.c:hashwrite_be64 Unexecuted instantiation: midx.c:hashwrite_be64 Unexecuted instantiation: object-file.c:hashwrite_be64 Unexecuted instantiation: pack-check.c:hashwrite_be64 Unexecuted instantiation: pack-revindex.c:hashwrite_be64 Unexecuted instantiation: pack-write.c:hashwrite_be64 Unexecuted instantiation: read-cache.c:hashwrite_be64 Unexecuted instantiation: chunk-format.c:hashwrite_be64 Unexecuted instantiation: commit-graph.c:hashwrite_be64 Unexecuted instantiation: csum-file.c:hashwrite_be64 Unexecuted instantiation: fetch-pack.c:hashwrite_be64 |
101 | | |
102 | | #endif |