summaryrefslogtreecommitdiff
path: root/src/apk_io.h
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2021-07-17 23:21:16 +0300
committerTimo Teräs <timo.teras@iki.fi>2021-07-22 15:30:08 +0300
commit7e585512f4409eb4e1635ed4d58e9c9774495dfa (patch)
treea47e9a278ab9178e0dde9cc3ff937b0b4c5a96b2 /src/apk_io.h
parent395e92b66e35ccbd2f07a4857d6da588ec9f51f2 (diff)
downloadapk-tools-7e585512f4409eb4e1635ed4d58e9c9774495dfa.tar.gz
apk-tools-7e585512f4409eb4e1635ed4d58e9c9774495dfa.tar.bz2
apk-tools-7e585512f4409eb4e1635ed4d58e9c9774495dfa.tar.xz
apk-tools-7e585512f4409eb4e1635ed4d58e9c9774495dfa.zip
io: make apk_istream_get/read() fail on incomplete read
Diffstat (limited to 'src/apk_io.h')
-rw-r--r--src/apk_io.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/apk_io.h b/src/apk_io.h
index d03369e..50464a9 100644
--- a/src/apk_io.h
+++ b/src/apk_io.h
@@ -92,9 +92,10 @@ static inline struct apk_istream *apk_istream_from_file(int atfd, const char *fi
static inline struct apk_istream *apk_istream_from_file_mmap(int atfd, const char *file) { return __apk_istream_from_file(atfd, file, 1); }
struct apk_istream *apk_istream_from_fd(int fd);
struct apk_istream *apk_istream_from_fd_url_if_modified(int atfd, const char *url, time_t since);
-static inline int apk_istream_error(struct apk_istream *is, int err) { if (!is->err) is->err = err; return err; }
+static inline int apk_istream_error(struct apk_istream *is, int err) { if (is->err >= 0 && err) is->err = err; return is->err < 0 ? is->err : 0; }
apk_blob_t apk_istream_mmap(struct apk_istream *is);
-ssize_t apk_istream_read(struct apk_istream *is, void *ptr, size_t size);
+ssize_t apk_istream_read_max(struct apk_istream *is, void *ptr, size_t size);
+int apk_istream_read(struct apk_istream *is, void *ptr, size_t size);
void *apk_istream_peek(struct apk_istream *is, size_t len);
void *apk_istream_get(struct apk_istream *is, size_t len);
int apk_istream_get_max(struct apk_istream *is, size_t size, apk_blob_t *data);