[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha2-494-g7077df3

Andrew Tridgell tridge at samba.org
Fri Jan 18 04:46:11 GMT 2008


The branch, v4-0-test has been updated
       via  7077df3e2e3f171532f6a5ac87d45201736c9c11 (commit)
      from  c54c087a19e36e0522eb4546c9425ae446f0628b (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit 7077df3e2e3f171532f6a5ac87d45201736c9c11
Author: Andrew Tridgell <tridge at samba.org>
Date:   Fri Jan 18 15:45:22 2008 +1100

    merged changes from v3-2-test

-----------------------------------------------------------------------

Summary of changes:
 source/lib/tdb/common/open.c        |    6 +---
 source/lib/tdb/common/tdb.c         |   42 -----------------------------------
 source/lib/tdb/common/tdb_private.h |    1 +
 source/lib/tdb/common/transaction.c |    7 ++++-
 source/lib/tdb/common/traverse.c    |    3 ++
 source/lib/tdb/docs/README          |    3 ++
 source/lib/tdb/include/tdb.h        |    7 ++---
 source/lib/tdb/tools/tdbtool.c      |    2 +-
 8 files changed, 18 insertions(+), 53 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/tdb/common/open.c b/source/lib/tdb/common/open.c
index 6bd8fda..b19e4ce 100644
--- a/source/lib/tdb/common/open.c
+++ b/source/lib/tdb/common/open.c
@@ -179,9 +179,7 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
 		tdb->page_size = 0x2000;
 	}
 
-	if (open_flags & TDB_VOLATILE) {
-		tdb->max_dead_records = 5;
-	}
+	tdb->max_dead_records = (tdb_flags & TDB_VOLATILE) ? 5 : 0;
 
 	if ((open_flags & O_ACCMODE) == O_WRONLY) {
 		TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_open_ex: can't open tdb %s write-only\n",
@@ -229,6 +227,7 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
 
 	/* we need to zero database if we are the only one with it open */
 	if ((tdb_flags & TDB_CLEAR_IF_FIRST) &&
+	    (!tdb->read_only) &&
 	    (locked = (tdb->methods->tdb_brlock(tdb, ACTIVE_LOCK, F_WRLCK, F_SETLK, 0, 1) == 0))) {
 		open_flags |= O_CREAT;
 		if (ftruncate(tdb->fd, 0) == -1) {
@@ -288,7 +287,6 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
 	tdb->map_size = st.st_size;
 	tdb->device = st.st_dev;
 	tdb->inode = st.st_ino;
-	tdb->max_dead_records = 0;
 	tdb_mmap(tdb);
 	if (locked) {
 		if (tdb->methods->tdb_brlock(tdb, ACTIVE_LOCK, F_UNLCK, F_SETLK, 0, 1) == -1) {
diff --git a/source/lib/tdb/common/tdb.c b/source/lib/tdb/common/tdb.c
index fd4e1cc..ea5d9cc 100644
--- a/source/lib/tdb/common/tdb.c
+++ b/source/lib/tdb/common/tdb.c
@@ -743,45 +743,3 @@ failed:
 	tdb_unlockall(tdb);
 	return -1;
 }
-
-
-/* 
-   validate the integrity of all tdb hash chains. Useful when debugging
- */
-int tdb_validate(struct tdb_context *tdb)
-{
-	int h;
-	for (h=-1;h<(int)tdb->header.hash_size;h++) {
-		tdb_off_t rec_ptr;
-		uint32_t count = 0;
-		if (tdb_ofs_read(tdb, TDB_HASH_TOP(h), &rec_ptr) == -1) {
-			TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_validate: failed ofs_read at top of hash %d\n", h));
-			return -1;
-		}
-		while (rec_ptr) {
-			struct list_struct r;
-			tdb_off_t size;
-
-			if (tdb_rec_read(tdb, rec_ptr, &r) == -1) {
-				TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_validate: failed rec_read h=%d rec_ptr=%u count=%u\n",
-					 h, rec_ptr, count));
-				return -1;
-			}
-			if (tdb_ofs_read(tdb, rec_ptr + sizeof(r) + r.rec_len - sizeof(tdb_off_t), &size) == -1) {
-				TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_validate: failed ofs_read h=%d rec_ptr=%u count=%u\n",
-					 h, rec_ptr, count));
-				return -1;
-			}
-			if (size != r.rec_len + sizeof(r)) {
-				TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_validate: failed size check size=%u h=%d rec_ptr=%u count=%u\n",
-					 size, h, rec_ptr, count));
-				return -1;
-			}
-			rec_ptr = r.next;
-			count++;
-		}		
-	}
-	return 0;
-}
-
-
diff --git a/source/lib/tdb/common/tdb_private.h b/source/lib/tdb/common/tdb_private.h
index 0d3f105..ffac89f 100644
--- a/source/lib/tdb/common/tdb_private.h
+++ b/source/lib/tdb/common/tdb_private.h
@@ -177,6 +177,7 @@ struct tdb_context {
 int tdb_munmap(struct tdb_context *tdb);
 void tdb_mmap(struct tdb_context *tdb);
 int tdb_lock(struct tdb_context *tdb, int list, int ltype);
+int tdb_lock_nonblock(struct tdb_context *tdb, int list, int ltype);
 int tdb_unlock(struct tdb_context *tdb, int list, int ltype);
 int tdb_brlock(struct tdb_context *tdb, tdb_off_t offset, int rw_type, int lck_type, int probe, size_t len);
 int tdb_transaction_lock(struct tdb_context *tdb, int ltype);
diff --git a/source/lib/tdb/common/transaction.c b/source/lib/tdb/common/transaction.c
index ea0e3a9..c3e7a4e 100644
--- a/source/lib/tdb/common/transaction.c
+++ b/source/lib/tdb/common/transaction.c
@@ -219,9 +219,12 @@ static int transaction_write(struct tdb_context *tdb, tdb_off_t off,
 		uint8_t **new_blocks;
 		/* expand the blocks array */
 		if (tdb->transaction->blocks == NULL) {
-			new_blocks = malloc((blk+1)*sizeof(uint8_t *));
+			new_blocks = (uint8_t **)malloc(
+				(blk+1)*sizeof(uint8_t *));
 		} else {
-			new_blocks = realloc(tdb->transaction->blocks, (blk+1)*sizeof(uint8_t *));
+			new_blocks = (uint8_t **)realloc(
+				tdb->transaction->blocks,
+				(blk+1)*sizeof(uint8_t *));
 		}
 		if (new_blocks == NULL) {
 			tdb->ecode = TDB_ERR_OOM;
diff --git a/source/lib/tdb/common/traverse.c b/source/lib/tdb/common/traverse.c
index 2bde127..07b0c23 100644
--- a/source/lib/tdb/common/traverse.c
+++ b/source/lib/tdb/common/traverse.c
@@ -223,6 +223,9 @@ int tdb_traverse_read(struct tdb_context *tdb,
 /*
   a write style traverse - needs to get the transaction lock to
   prevent deadlocks
+
+  WARNING: The data buffer given to the callback fn does NOT meet the
+  alignment restrictions malloc gives you.
 */
 int tdb_traverse(struct tdb_context *tdb, 
 		 tdb_traverse_func fn, void *private_data)
diff --git a/source/lib/tdb/docs/README b/source/lib/tdb/docs/README
index b31ce36..63fcf5e 100644
--- a/source/lib/tdb/docs/README
+++ b/source/lib/tdb/docs/README
@@ -130,6 +130,9 @@ int tdb_traverse(TDB_CONTEXT *tdb, int (*fn)(TDB_CONTEXT *tdb,
    a non-zero return value from fn() indicates that the traversal
    should stop. Traversal callbacks may not start transactions.
 
+   WARNING: The data buffer given to the callback fn does NOT meet the
+   alignment restrictions malloc gives you.
+
 ----------------------------------------------------------------------
 int tdb_traverse_read(TDB_CONTEXT *tdb, int (*fn)(TDB_CONTEXT *tdb,
                      TDB_DATA key, TDB_DATA dbuf, void *state), void *state);
diff --git a/source/lib/tdb/include/tdb.h b/source/lib/tdb/include/tdb.h
index 0058d55..0008085 100644
--- a/source/lib/tdb/include/tdb.h
+++ b/source/lib/tdb/include/tdb.h
@@ -32,9 +32,9 @@ extern "C" {
 
 
 /* flags to tdb_store() */
-#define TDB_REPLACE 1
-#define TDB_INSERT 2
-#define TDB_MODIFY 3
+#define TDB_REPLACE 1		/* Unused */
+#define TDB_INSERT 2 		/* Don't overwrite an existing entry */
+#define TDB_MODIFY 3		/* Don't create an existing entry    */
 
 /* flags for tdb_open() */
 #define TDB_DEFAULT 0 /* just a readability place holder */
@@ -157,7 +157,6 @@ int tdb_printfreelist(struct tdb_context *tdb);
 int tdb_validate_freelist(struct tdb_context *tdb, int *pnum_entries);
 int tdb_wipe_all(struct tdb_context *tdb);
 int tdb_freelist_size(struct tdb_context *tdb);
-int tdb_validate(struct tdb_context *tdb);
 
 extern TDB_DATA tdb_null;
 
diff --git a/source/lib/tdb/tools/tdbtool.c b/source/lib/tdb/tools/tdbtool.c
index 79435a3..d104ccd 100644
--- a/source/lib/tdb/tools/tdbtool.c
+++ b/source/lib/tdb/tools/tdbtool.c
@@ -135,7 +135,7 @@ static void print_data(const char *buf,int len)
 	if (len<=0) return;
 	printf("[%03X] ",i);
 	for (i=0;i<len;) {
-		printf("%02X ",(int)buf[i]);
+		printf("%02X ",(int)((unsigned char)buf[i]));
 		i++;
 		if (i%8 == 0) printf(" ");
 		if (i%16 == 0) {      


-- 
Samba Shared Repository


More information about the samba-cvs mailing list