Commit 3490ff78 authored by Timo Teräs's avatar Timo Teräs

fix tee io error handling

use ERR_PTR mechanism, and handle it at all places.
parent 43955329
......@@ -2586,7 +2586,7 @@ static int apk_db_unpack_pkg(struct apk_database *db,
apk_blob_push_blob(&b, tmpprefix);
apk_pkg_format_cache_pkg(b, pkg);
cache_bs = apk_bstream_tee(bs, db->cache_fd, tmpcacheitem, NULL, NULL);
if (cache_bs != NULL)
if (!IS_ERR_OR_NULL(cache_bs))
bs = cache_bs;
apk_warning(PKG_VER_FMT": unable to cache: %s",
......@@ -421,22 +421,24 @@ static void tee_close(void *stream, size_t *size)
struct apk_bstream *apk_bstream_tee(struct apk_bstream *from, int atfd, const char *to, apk_progress_cb cb, void *cb_ctx)
struct apk_tee_bstream *tbs;
int fd;
int fd, r;
if (IS_ERR_OR_NULL(from)) return ERR_CAST(from);
fd = openat(atfd, to, O_CREAT | O_RDWR | O_TRUNC | O_CLOEXEC,
if (fd < 0) {
r = errno;
from->close(from, NULL);
return NULL;
return ERR_PTR(-r);
tbs = malloc(sizeof(struct apk_tee_bstream));
if (!tbs) {
r = errno;
from->close(from, NULL);
return NULL;
return ERR_PTR(-r);
tbs->bs = (struct apk_bstream) {
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment