2 * See the file LICENSE for redistribution information.
4 * Copyright (c) 1997-2009 Oracle. All rights reserved.
18 __os_io(env, op, fhp, pgno, pgsize, relative, io_len, buf, niop)
23 u_int32_t pgsize, relative, io_len;
29 MUTEX_LOCK(env, fhp->mtx_fh);
31 if ((ret = __os_seek(env, fhp, pgno, pgsize, relative)) != 0)
35 ret = __os_read(env, fhp, buf, io_len, niop);
38 ret = __os_write(env, fhp, buf, io_len, niop);
45 err: MUTEX_UNLOCK(env, fhp->mtx_fh);
53 * Read from a file handle.
56 __os_read(env, fhp, addr, len, nrp)
70 #if defined(HAVE_STATISTICS)
74 for (taddr = addr, offset = 0, nr = 0;
75 offset < len; taddr += nr, offset += (u_int32_t)nr) {
76 LAST_PANIC_CHECK_BEFORE_IO(env);
77 nr = (size_t)IFILE_Read(fhp->ifp, addr, len);
78 /* an error occured, or we reached the end of the file */
83 IFILE_GetInfo(fhp->ifp, &pInfo);
84 if (pInfo.dwSize != 0) {/* not an empty file */
86 * If we have not reached the end of the file,
87 * we got an error in IFILE_Read
90 fhp->ifp, _SEEK_CURRENT, 0) != pInfo.dwSize) {
91 ret = __os_get_syserr();
92 __db_syserr(env, ret, "IFILE_Read: %#lx, %lu",
93 P_TO_ULONG(addr), (u_long)len);
94 ret = __os_posix_err(ret);
98 *nrp = (size_t)(taddr - (u_int8_t *)addr);
104 * Write to a file handle.
107 __os_write(env, fhp, addr, len, nwp)
115 #ifdef HAVE_FILESYSTEM_NOTZERO
116 /* Zero-fill as necessary. */
117 if (__os_fs_notzero()) {
119 if ((ret = __db_zero_fill(env, fhp)) != 0)
123 return (__os_physwrite(env, fhp, addr, len, nwp));
128 * Physical write to a file handle.
131 __os_physwrite(env, fhp, addr, len, nwp)
142 #if defined(HAVE_STATISTICS)
146 LAST_PANIC_CHECK_BEFORE_IO(env);
147 if ((*nwp = (size_t)IFILE_Write(fhp->ifp, addr, len)) != len) {
148 ret = __os_get_syserr();
149 __db_syserr(env, ret, "IFILE_Write: %#lx, %lu",
150 P_TO_ULONG(addr), (u_long)len);
151 ret = __os_posix_err(ret);