/src/libzip/lib/zip_source_at_eof.c
Line | Count | Source |
1 | | #include "zipint.h" |
2 | | |
3 | 0 | ZIP_EXTERN int zip_source_at_eof(zip_source_t *src) { |
4 | 0 | zip_uint8_t d[1]; |
5 | 0 | zip_int64_t n; |
6 | |
|
7 | 0 | if (!ZIP_SOURCE_IS_OPEN_READING(src)) { |
8 | 0 | zip_error_set(&src->error, ZIP_ER_INVAL, 0); |
9 | 0 | return -1; |
10 | 0 | } |
11 | | |
12 | 0 | if (!src->eof) { |
13 | 0 | if (src->supports & ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_AT_EOF)) { |
14 | 0 | n = _zip_source_call(src, NULL, 0, ZIP_SOURCE_AT_EOF); |
15 | 0 | if (n < 0) { |
16 | 0 | return -1; |
17 | 0 | } |
18 | 0 | if (n != 0) { |
19 | 0 | src->eof = true; |
20 | 0 | } |
21 | 0 | } |
22 | 0 | else { |
23 | 0 | n = zip_source_read(src, d, sizeof(d)); |
24 | 0 | if (n < 0) { |
25 | 0 | return -1; |
26 | 0 | } |
27 | 0 | if (n > 0) { |
28 | 0 | if (src->supports & ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SEEK)) { |
29 | 0 | if (zip_source_seek(src, -1, SEEK_CUR) < 0) { |
30 | 0 | return -1; |
31 | 0 | } |
32 | 0 | } |
33 | 0 | else { |
34 | 0 | src->have_next_byte = true; |
35 | 0 | src->next_byte = d[0]; |
36 | 0 | src->bytes_read -= 1; |
37 | 0 | } |
38 | 0 | } |
39 | 0 | } |
40 | 0 | } |
41 | | |
42 | 0 | return src->eof ? 1 : 0; |
43 | 0 | } |