summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/locking/posix.c69
1 files changed, 40 insertions, 29 deletions
diff --git a/source3/locking/posix.c b/source3/locking/posix.c
index b25baad295..a28744a76f 100644
--- a/source3/locking/posix.c
+++ b/source3/locking/posix.c
@@ -423,23 +423,27 @@ static void increment_windows_lock_ref_count(files_struct *fsp)
struct db_record *rec;
int lock_ref_count = 0;
NTSTATUS status;
+ TDB_DATA value;
- rec = posix_pending_close_db->fetch_locked(
+ rec = dbwrap_fetch_locked(
posix_pending_close_db, talloc_tos(),
locking_ref_count_key_fsp(fsp, &tmp));
SMB_ASSERT(rec != NULL);
- if (rec->value.dptr != NULL) {
- SMB_ASSERT(rec->value.dsize == sizeof(lock_ref_count));
- memcpy(&lock_ref_count, rec->value.dptr,
+ value = dbwrap_record_get_value(rec);
+
+ if (value.dptr != NULL) {
+ SMB_ASSERT(value.dsize == sizeof(lock_ref_count));
+ memcpy(&lock_ref_count, value.dptr,
sizeof(lock_ref_count));
}
lock_ref_count++;
- status = rec->store(rec, make_tdb_data((uint8 *)&lock_ref_count,
- sizeof(lock_ref_count)), 0);
+ status = dbwrap_record_store(rec,
+ make_tdb_data((uint8 *)&lock_ref_count,
+ sizeof(lock_ref_count)), 0);
SMB_ASSERT(NT_STATUS_IS_OK(status));
@@ -459,23 +463,27 @@ void reduce_windows_lock_ref_count(files_struct *fsp, unsigned int dcount)
struct db_record *rec;
int lock_ref_count = 0;
NTSTATUS status;
+ TDB_DATA value;
- rec = posix_pending_close_db->fetch_locked(
+ rec = dbwrap_fetch_locked(
posix_pending_close_db, talloc_tos(),
locking_ref_count_key_fsp(fsp, &tmp));
+ value = dbwrap_record_get_value(rec);
+
SMB_ASSERT((rec != NULL)
- && (rec->value.dptr != NULL)
- && (rec->value.dsize == sizeof(lock_ref_count)));
+ && (value.dptr != NULL)
+ && (value.dsize == sizeof(lock_ref_count)));
- memcpy(&lock_ref_count, rec->value.dptr, sizeof(lock_ref_count));
+ memcpy(&lock_ref_count, value.dptr, sizeof(lock_ref_count));
SMB_ASSERT(lock_ref_count > 0);
lock_ref_count -= dcount;
- status = rec->store(rec, make_tdb_data((uint8 *)&lock_ref_count,
- sizeof(lock_ref_count)), 0);
+ status = dbwrap_record_store(rec,
+ make_tdb_data((uint8 *)&lock_ref_count,
+ sizeof(lock_ref_count)), 0);
SMB_ASSERT(NT_STATUS_IS_OK(status));
@@ -498,14 +506,14 @@ static int get_windows_lock_ref_count(files_struct *fsp)
{
struct lock_ref_count_key tmp;
TDB_DATA dbuf;
- int res;
+ NTSTATUS status;
int lock_ref_count = 0;
- res = posix_pending_close_db->fetch(
+ status = dbwrap_fetch(
posix_pending_close_db, talloc_tos(),
locking_ref_count_key_fsp(fsp, &tmp), &dbuf);
- SMB_ASSERT(res == 0);
+ SMB_ASSERT(NT_STATUS_IS_OK(status));
if (dbuf.dsize != 0) {
SMB_ASSERT(dbuf.dsize == sizeof(lock_ref_count));
@@ -528,7 +536,7 @@ static void delete_windows_lock_ref_count(files_struct *fsp)
struct lock_ref_count_key tmp;
struct db_record *rec;
- rec = posix_pending_close_db->fetch_locked(
+ rec = dbwrap_fetch_locked(
posix_pending_close_db, talloc_tos(),
locking_ref_count_key_fsp(fsp, &tmp));
@@ -536,7 +544,7 @@ static void delete_windows_lock_ref_count(files_struct *fsp)
/* Not a bug if it doesn't exist - no locks were ever granted. */
- rec->delete_rec(rec);
+ dbwrap_record_delete(rec);
TALLOC_FREE(rec);
DEBUG(10,("delete_windows_lock_ref_count for file %s\n",
@@ -552,25 +560,28 @@ static void add_fd_to_close_entry(files_struct *fsp)
struct db_record *rec;
uint8_t *new_data;
NTSTATUS status;
+ TDB_DATA value;
- rec = posix_pending_close_db->fetch_locked(
+ rec = dbwrap_fetch_locked(
posix_pending_close_db, talloc_tos(),
fd_array_key_fsp(fsp));
SMB_ASSERT(rec != NULL);
- new_data = talloc_array(
- rec, uint8_t, rec->value.dsize + sizeof(fsp->fh->fd));
+ value = dbwrap_record_get_value(rec);
+
+ new_data = talloc_array(rec, uint8_t,
+ value.dsize + sizeof(fsp->fh->fd));
SMB_ASSERT(new_data != NULL);
- memcpy(new_data, rec->value.dptr, rec->value.dsize);
- memcpy(new_data + rec->value.dsize,
+ memcpy(new_data, value.dptr, value.dsize);
+ memcpy(new_data + value.dsize,
&fsp->fh->fd, sizeof(fsp->fh->fd));
- status = rec->store(
+ status = dbwrap_record_store(
rec, make_tdb_data(new_data,
- rec->value.dsize + sizeof(fsp->fh->fd)), 0);
+ value.dsize + sizeof(fsp->fh->fd)), 0);
SMB_ASSERT(NT_STATUS_IS_OK(status));
@@ -588,12 +599,12 @@ static void delete_close_entries(files_struct *fsp)
{
struct db_record *rec;
- rec = posix_pending_close_db->fetch_locked(
+ rec = dbwrap_fetch_locked(
posix_pending_close_db, talloc_tos(),
fd_array_key_fsp(fsp));
SMB_ASSERT(rec != NULL);
- rec->delete_rec(rec);
+ dbwrap_record_delete(rec);
TALLOC_FREE(rec);
}
@@ -606,13 +617,13 @@ static size_t get_posix_pending_close_entries(TALLOC_CTX *mem_ctx,
files_struct *fsp, int **entries)
{
TDB_DATA dbuf;
- int res;
+ NTSTATUS status;
- res = posix_pending_close_db->fetch(
+ status = dbwrap_fetch(
posix_pending_close_db, mem_ctx, fd_array_key_fsp(fsp),
&dbuf);
- SMB_ASSERT(res == 0);
+ SMB_ASSERT(NT_STATUS_IS_OK(status));
if (dbuf.dsize == 0) {
*entries = NULL;