Update from db-2.3.12.
[kopensolaris-gnu/glibc.git] / db2 / os / os_rw.c
1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 1997
5  *      Sleepycat Software.  All rights reserved.
6  */
7
8 #include "config.h"
9
10 #ifndef lint
11 static const char sccsid[] = "@(#)os_rw.c       10.6 (Sleepycat) 10/25/97";
12 #endif /* not lint */
13
14 #ifndef NO_SYSTEM_INCLUDES
15 #include <sys/types.h>
16
17 #include <errno.h>
18 #include <unistd.h>
19 #endif
20
21 #include "db_int.h"
22
23 /*
24  * __db_read --
25  *      Read from a file handle.
26  *
27  * PUBLIC: int __db_read __P((int, void *, size_t, ssize_t *));
28  */
29 int
30 __db_read(fd, addr, len, nrp)
31         int fd;
32         void *addr;
33         size_t len;
34         ssize_t *nrp;
35 {
36         size_t offset;
37         ssize_t nr;
38         u_int8_t *taddr;
39
40         for (taddr = addr,
41             offset = 0; offset < len; taddr += nr, offset += nr) {
42                 if ((nr = __os_read(fd, taddr, len - offset)) < 0)
43                         return (errno);
44                 if (nr == 0)
45                         break;
46         }
47         *nrp = taddr - (u_int8_t *)addr;
48         return (0);
49 }
50
51 /*
52  * __db_write --
53  *      Write to a file handle.
54  *
55  * PUBLIC: int __db_write __P((int, void *, size_t, ssize_t *));
56  */
57 int
58 __db_write(fd, addr, len, nwp)
59         int fd;
60         void *addr;
61         size_t len;
62         ssize_t *nwp;
63 {
64         size_t offset;
65         ssize_t nw;
66         u_int8_t *taddr;
67
68         for (taddr = addr,
69             offset = 0; offset < len; taddr += nw, offset += nw)
70                 if ((nw = __os_write(fd, taddr, len - offset)) < 0)
71                         return (errno);
72         *nwp = len;
73         return (0);
74 }