mirror of
https://github.com/samba-team/samba.git
synced 2025-12-16 00:23:52 +03:00
merged tdb from ctdb bzr tree
This commit is contained in:
@@ -35,7 +35,7 @@ static struct tdb_context *tdbs = NULL;
|
||||
static unsigned int default_tdb_hash(TDB_DATA *key)
|
||||
{
|
||||
uint32_t value; /* Used to compute the hash value. */
|
||||
uint32_t i; /* Used to cycle through random values. */
|
||||
uint32_t i; /* Used to cycle through random values. */
|
||||
|
||||
/* Set the initial value from the key size. */
|
||||
for (value = 0x238F13AF * key->dsize, i=0; i < key->dsize; i++)
|
||||
@@ -90,7 +90,7 @@ static int tdb_new_database(struct tdb_context *tdb, int hash_size)
|
||||
size -= written;
|
||||
written = write(tdb->fd, newdb+written, size);
|
||||
if (written == size) {
|
||||
ret = 0;
|
||||
ret = 0;
|
||||
} else if (written >= 0) {
|
||||
/* a second incomplete write - we give up.
|
||||
* guessing the errno... */
|
||||
@@ -152,6 +152,7 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
|
||||
int rev = 0, locked = 0;
|
||||
unsigned char *vp;
|
||||
uint32_t vertest;
|
||||
unsigned v;
|
||||
|
||||
if (!(tdb = (struct tdb_context *)calloc(1, sizeof *tdb))) {
|
||||
/* Can't log this */
|
||||
@@ -215,6 +216,10 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
|
||||
goto fail; /* errno set by open(2) */
|
||||
}
|
||||
|
||||
/* on exec, don't inherit the fd */
|
||||
v = fcntl(tdb->fd, F_GETFD, 0);
|
||||
fcntl(tdb->fd, F_SETFD, v | FD_CLOEXEC);
|
||||
|
||||
/* ensure there is only one process initialising at once */
|
||||
if (tdb->methods->tdb_brlock(tdb, GLOBAL_LOCK, F_WRLCK, F_SETLKW, 0, 1) == -1) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_open_ex: failed to get global lock on %s: %s\n",
|
||||
@@ -242,7 +247,7 @@ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
|
||||
/* its not a valid database - possibly initialise it */
|
||||
if (!(open_flags & O_CREAT) || tdb_new_database(tdb, hash_size) == -1) {
|
||||
if (errno == 0) {
|
||||
errno = EIO; /* ie bad format or something */
|
||||
errno = EIO; /* ie bad format or something */
|
||||
}
|
||||
goto fail;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user