blob: 9bc9789e8a0f51c122ec93d0948a84da36eea351 [file] [edit]
#include "zipint.h"
ZIP_EXTERN int zip_source_at_eof(zip_source_t *src) {
zip_uint8_t d[1];
zip_int64_t n;
if (!ZIP_SOURCE_IS_OPEN_READING(src)) {
zip_error_set(&src->error, ZIP_ER_INVAL, 0);
return -1;
}
if (!src->eof) {
if (src->supports & ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_AT_EOF)) {
n = _zip_source_call(src, NULL, 0, ZIP_SOURCE_AT_EOF);
if (n < 0) {
return -1;
}
if (n != 0) {
src->eof = true;
}
}
else {
n = zip_source_read(src, d, sizeof(d));
if (n < 0) {
return -1;
}
if (n > 0) {
if (src->supports & ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SEEK)) {
if (zip_source_seek(src, -1, SEEK_CUR) < 0) {
return -1;
}
}
else {
src->have_next_byte = true;
src->next_byte = d[0];
src->bytes_read -= 1;
}
}
}
}
return src->eof ? 1 : 0;
}