Ignore:
Timestamp:
Mar 11, 2009, 9:14:55 AM (17 years ago)
Author:
Paul Smedley
Message:

Add 'missing' 3.0.34 diffs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.0/source/tdb/common/io.c

    r124 r165  
    101101        if (tdb->map_ptr) {
    102102                memcpy(off + (char *)tdb->map_ptr, buf, len);
    103         } else if (pwrite(tdb->fd, buf, len, off) != (ssize_t)len) {
    104                 /* Ensure ecode is set for log fn. */
    105                 tdb->ecode = TDB_ERR_IO;
    106                 TDB_LOG((tdb, TDB_DEBUG_FATAL,"tdb_write failed at %d len=%d (%s)\n",
    107                            off, len, strerror(errno)));
    108         } else {
    109                 ssize_t written = pwrite(tdb->fd, buf, len, off);
    110                 if ((written != (ssize_t)len) && (written != -1)) {
    111                         /* try once more */
    112                         TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_write: wrote only "
    113                                  "%d of %d bytes at %d, trying once more\n",
     103        } else {
     104                ssize_t written = pwrite(tdb->fd, buf, len, off);
     105                if ((written != (ssize_t)len) && (written != -1)) {
     106                        /* try once more */
     107                        TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_write: wrote only "
     108                                 "%d of %d bytes at %d, trying once more\n",
    114109                                 (uint32_t)written, len, off));
    115                         errno = ENOSPC;
    116                         written = pwrite(tdb->fd, (void *)((char *)buf+written),
    117                                          len-written,
    118                                          off+written);
    119                 }
    120                 if (written == -1) {
    121                         /* Ensure ecode is set for log fn. */
    122                         tdb->ecode = TDB_ERR_IO;
    123                         TDB_LOG((tdb, TDB_DEBUG_FATAL,"tdb_write failed at %d "
    124                                  "len=%d (%s)\n", off, len, strerror(errno)));
    125                         return TDB_ERRCODE(TDB_ERR_IO, -1);
    126                 } else if (written != (ssize_t)len) {
    127                         TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_write: failed to "
    128                                  "write %d bytes at %d in two attempts\n",
    129                                  len, off));
    130                         errno = ENOSPC;
     110                        errno = ENOSPC;
     111                        written = pwrite(tdb->fd, (void *)((char *)buf+written),
     112                                         len-written,
     113                                         off+written);
     114                }
     115                if (written == -1) {
     116                        /* Ensure ecode is set for log fn. */
     117                        tdb->ecode = TDB_ERR_IO;
     118                        TDB_LOG((tdb, TDB_DEBUG_FATAL,"tdb_write failed at %d "
     119                                 "len=%d (%s)\n", off, len, strerror(errno)));
     120                        return TDB_ERRCODE(TDB_ERR_IO, -1);
     121                } else if (written != (ssize_t)len) {
     122                        TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_write: failed to "
     123                                 "write %d bytes at %d in two attempts\n",
     124                                 len, off));
     125                        errno = ENOSPC;
    131126#ifdef __OS2__
    132127                // remove our lock
     
    215210#ifdef HAVE_MMAP
    216211        if (tdb->map_ptr) {
    217                 int ret = munmap(tdb->map_ptr, tdb->map_size);
     212                int ret;
     213
     214                ret = munmap(tdb->map_ptr, tdb->map_size);
    218215                if (ret != 0)
    219216                        return ret;
Note: See TracChangeset for help on using the changeset viewer.