int fs_stateWrite(struct fs_dump_state * state, void * buf, size_t len) { int ret = 0; #ifdef FS_STATE_USE_MMAP if (fs_stateCheckIOSafety(state, len)) { if (fs_stateResizeFile(state, len)) { ViceLog(0, ("fs_stateWrite: could not resize dump file '%s'\n", state->fn)); ret = 1; goto done; } } memcpy(state->mmap.cursor, buf, len); fs_stateIncCursor(state, len); #else if (write(state->fd, buf, len) != len) { ViceLog(0, ("fs_stateWrite: write failed\n")); ret = 1; goto done; } #endif done: return ret; }
int fs_stateRead(struct fs_dump_state * state, void * buf, size_t len) { int ret = 0; #ifdef FS_STATE_USE_MMAP if (fs_stateCheckIOSafety(state, len)) { ViceLog(0, ("fs_stateRead: read beyond EOF for dump file '%s'\n", state->fn)); ret = 1; goto done; } memcpy(buf, state->mmap.cursor, len); fs_stateIncCursor(state, len); #else if (read(state->fd, buf, len) != len) { ViceLog(0, ("fs_stateRead: read failed\n")); ret = 1; goto done; } #endif done: return ret; }
int fs_stateReadV(struct fs_dump_state * state, struct iovec * iov, int niov) { int i, ret = 0; size_t len = 0; for (i=0; i < niov; i++) { len += iov[i].iov_len; } #ifdef FS_STATE_USE_MMAP if (fs_stateCheckIOSafety(state, len)) { ViceLog(0, ("fs_stateRead: read beyond EOF for dump file '%s'\n", state->fn)); ret = 1; goto done; } for (i=0; i < niov; i++) { memcpy(iov[i].iov_base, state->mmap.cursor, iov[i].iov_len); fs_stateIncCursor(state, iov[i].iov_len); } #else if (readv(state->fd, iov, niov) != len) { ViceLog(0, ("fs_stateReadV: read failed\n")); ret = 1; goto done; } #endif done: return ret; }
int fs_stateWriteV(struct fs_dump_state * state, struct iovec * iov, int niov) { int i, ret = 0; size_t len = 0; for (i=0; i < niov; i++) { len += iov[i].iov_len; } #ifdef FS_STATE_USE_MMAP if (fs_stateCheckIOSafety(state, len)) { if (fs_stateResizeFile(state, len)) { ViceLog(0, ("fs_stateWrite: could not resize dump file '%s'\n", state->fn)); ret = 1; goto done; } } for (i=0; i < niov; i++) { memcpy(state->mmap.cursor, iov[i].iov_base, iov[i].iov_len); fs_stateIncCursor(state, iov[i].iov_len); } #else #ifndef AFS_NT40_ENV if (writev(state->fd, iov, niov) != len) { ViceLog(0, ("fs_stateWriteV: write failed\n")); ret = 1; goto done; } #else /* AFS_NT40_ENV */ for (i=0; i < niov; i++) { if (write(state->fd, iov[i].iov_base, iov[i].iov_len) != iov[i].iov_len) { ViceLog(0, ("fs_stateWriteV: write failed\n")); ret = 1; goto done; } } #endif /* AFS_NT40_ENV */ #endif done: return ret; }