Update from db-2.3.12.
[kopensolaris-gnu/glibc.git] / db2 / os / os_func.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_func.c     10.4 (Sleepycat) 10/28/97";
12 #endif /* not lint */
13
14 #ifndef NO_SYSTEM_INCLUDES
15 #include <sys/types.h>
16
17 #include <errno.h>
18 #endif
19
20 #include "db_int.h"
21
22 /*
23  * XXX
24  * We provide our own extern declarations so that we don't collide with
25  * systems that get them wrong, e.g., SunOS.
26  */
27 #ifdef _WIN32
28 #define fsync           _commit
29 #define imported        __declspec(dllimport)
30 #else
31 #define imported
32 #endif
33
34 imported extern void    *calloc __P((size_t, size_t));
35 imported extern int      close __P((int));
36 imported extern void     free __P((void *));
37 imported extern int      fsync __P((int));
38 imported extern void    *malloc __P((size_t));
39 imported extern int      open __P((const char *, int, ...));
40 imported extern ssize_t  read __P((int, void *, size_t));
41 imported extern char    *strdup __P((const char *));
42 imported extern void    *realloc __P((void *, size_t));
43 imported extern int      unlink __P((const char *));
44 imported extern ssize_t  write __P((int, const void *, size_t));
45
46 /*
47  * __db_jump --
48  *      This list of interfaces that applications can replace.  In some
49  *      cases, the user is permitted to replace the standard ANSI C or
50  *      POSIX 1003.1 call, e.g., calloc or read.  In others, we provide
51  *      a local interface to the functionality, e.g., __os_map.
52  */
53 struct __db_jumptab __db_jump = {
54         calloc,                         /* DB_FUNC_CALLOC */
55         close,                          /* DB_FUNC_CLOSE */
56         __os_dirfree,                   /* DB_FUNC_DIRFREE */
57         __os_dirlist,                   /* DB_FUNC_DIRLIST */
58         __os_exists,                    /* DB_FUNC_EXISTS */
59         free,                           /* DB_FUNC_FREE */
60         fsync,                          /* DB_FUNC_FSYNC */
61         __os_ioinfo,                    /* DB_FUNC_IOINFO */
62         malloc,                         /* DB_FUNC_MALLOC */
63         __os_map,                       /* DB_FUNC_MAP */
64         open,                           /* DB_FUNC_OPEN */
65         read,                           /* DB_FUNC_READ */
66         realloc,                        /* DB_FUNC_REALLOC */
67         __os_seek,                      /* DB_FUNC_SEEK */
68         __os_sleep,                     /* DB_FUNC_SLEEP */
69         strdup,                         /* DB_FUNC_STRDUP */
70         unlink,                         /* DB_FUNC_UNLINK */
71         __os_unmap,                     /* DB_FUNC_UNMAP */
72         write,                          /* DB_FUNC_WRITE */
73         NULL                            /* DB_FUNC_YIELD */
74 };
75
76 /*
77  * db_jump_set --
78  *      Replace an interface.
79  */
80 int
81 db_jump_set(func, which)
82         void *func;
83         int which;
84 {
85         switch (which) {
86         case DB_FUNC_CALLOC:
87                 __db_calloc = (void *(*) __P((size_t, size_t)))func;
88                 break;
89         case DB_FUNC_CLOSE:
90                 __os_close = (int (*) __P((int)))func;
91                 break;
92         case DB_FUNC_DIRFREE:
93                 __db_dirfree = (void (*) __P((char **, int)))func;
94                 break;
95         case DB_FUNC_DIRLIST:
96                 __db_dirlist =
97                     (int (*) __P((const char *, char ***, int *)))func;
98                 break;
99         case DB_FUNC_EXISTS:
100                 __db_exists = (int (*) __P((const char *, int *)))func;
101                 break;
102         case DB_FUNC_FREE:
103                 __db_free = (void (*) __P((void *)))func;
104                 break;
105         case DB_FUNC_FSYNC:
106                 __os_fsync = (int (*) __P((int)))func;
107                 break;
108         case DB_FUNC_IOINFO:
109                 __db_ioinfo =
110                     (int (*) __P((const char *, int, off_t *, off_t *)))func;
111                 break;
112         case DB_FUNC_MALLOC:
113                 __db_malloc = (void *(*) __P((size_t)))func;
114                 break;
115         case DB_FUNC_MAP:
116                 __db_map = (int (*) __P((int, size_t, int, int, void **)))func;
117                 break;
118         case DB_FUNC_OPEN:
119                 __os_open = (int (*) __P((const char *, int, ...)))func;
120                 break;
121         case DB_FUNC_READ:
122                 __os_read = (ssize_t (*) __P((int, void *, size_t)))func;
123                 break;
124         case DB_FUNC_REALLOC:
125                 __db_realloc = (void *(*) __P((void *, size_t)))func;
126                 break;
127         case DB_FUNC_SEEK:
128                 __db_seek =
129                     (int (*) __P((int, size_t, db_pgno_t, u_long, int)))func;
130                 break;
131         case DB_FUNC_SLEEP:
132                 __db_sleep = (int (*) __P((u_long, u_long)))func;
133                 break;
134         case DB_FUNC_STRDUP:
135                 __db_strdup = (char *(*) __P((const char *)))func;
136                 break;
137         case DB_FUNC_UNLINK:
138                 __os_unlink = (int (*) __P((const char *)))func;
139                 break;
140         case DB_FUNC_UNMAP:
141                 __db_unmap = (int (*) __P((void *, size_t)))func;
142                 break;
143         case DB_FUNC_WRITE:
144                 __os_write = (ssize_t (*) __P((int, const void *, size_t)))func;
145                 break;
146         case DB_FUNC_YIELD:
147                 __db_yield = (int (*) __P((void)))func;
148                 break;
149         default:
150                 return (EINVAL);
151         }
152         return (0);
153 }