diff --git a/btpd/content.c b/btpd/content.c index e69216f..4829cff 100644 --- a/btpd/content.c +++ b/btpd/content.c @@ -595,6 +595,12 @@ again: if (truncate(path, tp->files[i].length) != 0) return errno; goto again; + } else if (ret[i].size == -1 && tp->files[i].length == 0) { + int fd; + errno = vopen(&fd, O_CREAT|O_RDWR, "%s", path); + if (errno != 0 || close(fd) != 0) + return errno; + goto again; } } return 0; diff --git a/misc/metainfo.c b/misc/metainfo.c index 104b927..c69f64b 100644 --- a/misc/metainfo.c +++ b/misc/metainfo.c @@ -279,7 +279,7 @@ mi_test_files(const char *files) int pcount = 0; if (!benc_isdct(fdct)) return 0; - if (benc_dget_int(fdct, "length") <= 0) + if (benc_dget_int(fdct, "length") < 0) return 0; if ((plst = benc_dget_lst(fdct, "path")) == NULL) return 0; diff --git a/misc/stream.c b/misc/stream.c index 6f9492e..32a2512 100644 --- a/misc/stream.c +++ b/misc/stream.c @@ -83,6 +83,8 @@ bts_get(struct bt_stream *bts, off_t off, uint8_t *buf, size_t len) boff = 0; while (boff < len) { if (bts->fd == -1) { + while (bts->files[bts->index].length == 0) + bts->index++; err = bts->fd_cb(bts->files[bts->index].path, &bts->fd, bts->fd_arg); if (err != 0) @@ -125,6 +127,8 @@ bts_put(struct bt_stream *bts, off_t off, const uint8_t *buf, size_t len) boff = 0; while (boff < len) { if (bts->fd == -1) { + while (bts->files[bts->index].length == 0) + bts->index++; err = bts->fd_cb(bts->files[bts->index].path, &bts->fd, bts->fd_arg); if (err != 0)