X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Fio.c;h=11914b3c76b639f63e89442758e259b21aeeb5fe;hp=7d20f46ad388614eba4cb56a7b9688ea08ee4fcd;hb=b72a2ee12f033abd049111d90a2066b1151bc25d;hpb=1d4d21dfb5ac43274afc125f132d196ce07f3177 diff --git a/ccan/tdb2/io.c b/ccan/tdb2/io.c index 7d20f46a..11914b3c 100644 --- a/ccan/tdb2/io.c +++ b/ccan/tdb2/io.c @@ -133,6 +133,7 @@ void *tdb_convert(const struct tdb_context *tdb, void *buf, tdb_len_t size) return buf; } +/* Return first non-zero offset in offset array, or end, or -ve error. */ /* FIXME: Return the off? */ uint64_t tdb_find_nonzero_off(struct tdb_context *tdb, tdb_off_t base, uint64_t start, uint64_t end) @@ -144,8 +145,7 @@ uint64_t tdb_find_nonzero_off(struct tdb_context *tdb, val = tdb_access_read(tdb, base + start * sizeof(tdb_off_t), (end - start) * sizeof(tdb_off_t), false); if (TDB_PTR_IS_ERR(val)) { - tdb->ecode = TDB_PTR_ERR(val); - return end; + return TDB_PTR_ERR(val); } for (i = 0; i < (end - start); i++) { @@ -156,7 +156,7 @@ uint64_t tdb_find_nonzero_off(struct tdb_context *tdb, return start + i; } -/* Return first zero offset in num offset array, or num. */ +/* Return first zero offset in num offset array, or num, or -ve error. */ uint64_t tdb_find_zero_off(struct tdb_context *tdb, tdb_off_t off, uint64_t num) { @@ -166,8 +166,7 @@ uint64_t tdb_find_zero_off(struct tdb_context *tdb, tdb_off_t off, /* Zero vs non-zero is the same unconverted: minor optimization. */ val = tdb_access_read(tdb, off, num * sizeof(tdb_off_t), false); if (TDB_PTR_IS_ERR(val)) { - tdb->ecode = TDB_PTR_ERR(val); - return num; + return TDB_PTR_ERR(val); } for (i = 0; i < num; i++) { @@ -213,8 +212,7 @@ tdb_off_t tdb_read_off(struct tdb_context *tdb, tdb_off_t off) tdb_off_t *p = tdb->methods->direct(tdb, off, sizeof(*p), false); if (TDB_PTR_IS_ERR(p)) { - tdb->ecode = TDB_PTR_ERR(p); - return TDB_OFF_ERR; + return TDB_PTR_ERR(p); } if (p) return *p; @@ -222,8 +220,7 @@ tdb_off_t tdb_read_off(struct tdb_context *tdb, tdb_off_t off) ecode = tdb_read_convert(tdb, off, &ret, sizeof(ret)); if (ecode != TDB_SUCCESS) { - tdb->ecode = ecode; - return TDB_OFF_ERR; + return ecode; } return ret; } @@ -239,11 +236,6 @@ static enum TDB_ERROR tdb_write(struct tdb_context *tdb, tdb_off_t off, "Write to read-only database"); } - /* FIXME: Bogus optimization? */ - if (len == 0) { - return TDB_SUCCESS; - } - ecode = tdb->methods->oob(tdb, off + len, 0); if (ecode != TDB_SUCCESS) { return ecode; @@ -254,7 +246,7 @@ static enum TDB_ERROR tdb_write(struct tdb_context *tdb, tdb_off_t off, } else { ssize_t ret; ret = pwrite(tdb->fd, buf, len, off); - if (ret < len) { + if (ret != len) { /* This shouldn't happen: we avoid sparse files. */ if (ret >= 0) errno = ENOSPC; @@ -383,7 +375,7 @@ static enum TDB_ERROR fill(struct tdb_context *tdb, while (len) { size_t n = len > size ? size : len; ssize_t ret = pwrite(tdb->fd, buf, n, off); - if (ret < n) { + if (ret != n) { if (ret >= 0) errno = ENOSPC;