]> git.ozlabs.org Git - ccan/commitdiff
tdb: support tdb_check() on r/o databases.
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 13 Sep 2010 07:53:29 +0000 (17:23 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 13 Sep 2010 07:53:29 +0000 (17:23 +0930)
(Imported from SAMBA commit bc1c82ea137e1bf6cb55139a666c56ebb2226b23)

Author: Jeremy Allison <jra@samba.org>
Date:   Wed Jul 28 05:15:40 2010 -0700

Fix tdb_check() to work with read-only tdb databases. The function tdb_lockall() uses F_WRLCK internally, which doesn't work on a fd opened with O_RDONLY. Use tdb_lockall_read() instead.

Jeremy.

ccan/tdb/check.c

index b3b8c23104e5a4d770672d15f68acc6e8d7f875a..c5469e9998122dc57eefcdb90ddb747cb99d684d 100644 (file)
@@ -328,7 +328,7 @@ int tdb_check(struct tdb_context *tdb,
        bool found_recovery = false;
        tdb_len_t dead;
 
        bool found_recovery = false;
        tdb_len_t dead;
 
-       if (tdb_lockall(tdb) == -1)
+       if (tdb_lockall_read(tdb) == -1)
                return -1;
 
        /* Make sure we know true size of the underlying file. */
                return -1;
 
        /* Make sure we know true size of the underlying file. */
@@ -444,12 +444,12 @@ int tdb_check(struct tdb_context *tdb,
        }
 
        free(hashes);
        }
 
        free(hashes);
-       tdb_unlockall(tdb);
+       tdb_unlockall_read(tdb);
        return 0;
 
 free:
        free(hashes);
 unlock:
        return 0;
 
 free:
        free(hashes);
 unlock:
-       tdb_unlockall(tdb);
+       tdb_unlockall_read(tdb);
        return -1;
 }
        return -1;
 }