diff options
author | Andrew Bartlett <abartlet@samba.org> | 2008-01-18 17:05:17 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2008-01-18 17:05:17 +1100 |
commit | 130db062bf53cff39fd2d5ac4d5766dc0a98663e (patch) | |
tree | 5165b525cc3d0927dcd816c9c91b444984bb429a /source4/lib/tdb/common/transaction.c | |
parent | 391f089d71b4b51a130819ab681dcd1253f16b8c (diff) | |
parent | 61a015a786c52008f4471e62750ad93507bce518 (diff) | |
download | samba-130db062bf53cff39fd2d5ac4d5766dc0a98663e.tar.gz samba-130db062bf53cff39fd2d5ac4d5766dc0a98663e.tar.bz2 samba-130db062bf53cff39fd2d5ac4d5766dc0a98663e.zip |
Merge commit 'origin/v4-0-test' into 4-0-local
(This used to be commit 51422414bed28f425197519298c6b04a9f4e2c4e)
Diffstat (limited to 'source4/lib/tdb/common/transaction.c')
-rw-r--r-- | source4/lib/tdb/common/transaction.c | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/source4/lib/tdb/common/transaction.c b/source4/lib/tdb/common/transaction.c index 0ecfb9b7ff..c3e7a4e2c0 100644 --- a/source4/lib/tdb/common/transaction.c +++ b/source4/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; @@ -316,25 +319,15 @@ static int transaction_write_existing(struct tdb_context *tdb, tdb_off_t off, return 0; } - /* overwrite part of an existing block */ - if (buf == NULL) { - memset(tdb->transaction->blocks[blk] + off, 0, len); - } else { - memcpy(tdb->transaction->blocks[blk] + off, buf, len); - } - if (blk == tdb->transaction->num_blocks-1) { - if (len + off > tdb->transaction->last_block_size) { - tdb->transaction->last_block_size = len + off; - } + if (blk == tdb->transaction->num_blocks-1 && + off + len > tdb->transaction->last_block_size) { + len = tdb->transaction->last_block_size - off; } - return 0; + /* overwrite part of an existing block */ + memcpy(tdb->transaction->blocks[blk] + off, buf, len); -fail: - TDB_LOG((tdb, TDB_DEBUG_FATAL, "transaction_write: failed at off=%d len=%d\n", - (blk*tdb->transaction->block_size) + off, len)); - tdb->transaction->transaction_error = 1; - return -1; + return 0; } |