r21706: get_delete_on_close_flag() is the perfect candidate for tdb_parse_record()
authorVolker Lendecke <vlendec@samba.org>
Mon, 5 Mar 2007 20:09:27 +0000 (20:09 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:18:24 +0000 (12:18 -0500)
(This used to be commit b73685d20751ac343faab79332552cd7ee92d831)

source3/locking/locking.c

index ffac43aff5933b18c13aeba05ea9a6758c65e39f..7326ea08c09b42627b80789318bca921140f8347 100644 (file)
@@ -858,15 +858,29 @@ BOOL rename_share_filename(struct share_mode_lock *lck,
        return True;
 }
 
        return True;
 }
 
-BOOL get_delete_on_close_flag(SMB_DEV_T dev, SMB_INO_T inode)
+static int pull_delete_on_close_flag(TDB_DATA key, TDB_DATA dbuf,
+                                    void *private_data)
 {
 {
-       BOOL result;
-       struct share_mode_lock *lck = get_share_mode_lock(NULL, dev, inode, NULL, NULL);
-       if (!lck) {
-               return False;
+       BOOL *result = (BOOL *)private_data;
+       struct locking_data *data;
+
+       if (dbuf.dsize < sizeof(struct locking_data)) {
+               smb_panic("PANIC: parse_share_modes: buffer too short.\n");
        }
        }
-       result = lck->delete_on_close;
-       TALLOC_FREE(lck);
+
+       data = (struct locking_data *)dbuf.dptr;
+
+       *result = data->u.s.delete_on_close;
+       return 0;
+}
+
+BOOL get_delete_on_close_flag(SMB_DEV_T dev, SMB_INO_T inode)
+{
+       TDB_DATA key = locking_key(dev, inode);
+       BOOL result = False;
+
+       tdb_parse_record(tdb, key, pull_delete_on_close_flag,
+                        (void *)&result);
        return result;
 }
 
        return result;
 }