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)
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++) {
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)
{
/* 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++) {
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;
ecode = tdb_read_convert(tdb, off, &ret, sizeof(ret));
if (ecode != TDB_SUCCESS) {
- tdb->ecode = ecode;
- return TDB_OFF_ERR;
+ return ecode;
}
return ret;
}
"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;
} 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;
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;