1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 1997,2008 Oracle.  All rights reserved.
5 *
6 * $Id: os_open.c,v 1.8 2008/03/26 04:11:34 david Exp $
7 */
8
9#include "db_config.h"
10
11#include "db_int.h"
12
13/*
14 * __os_open --
15 *	Open a file descriptor (including page size and log size information).
16 */
17int
18__os_open(env, name, page_size, flags, mode, fhpp)
19	ENV *env;
20	const char *name;
21	u_int32_t page_size, flags;
22	int mode;
23	DB_FH **fhpp;
24{
25	OpenFileMode oflags;
26	int ret;
27
28	COMPQUIET(page_size, 0);
29
30#define	OKFLAGS								\
31	(DB_OSO_ABSMODE | DB_OSO_CREATE | DB_OSO_DIRECT | DB_OSO_DSYNC |\
32	DB_OSO_EXCL | DB_OSO_RDONLY | DB_OSO_REGION |	DB_OSO_SEQ |	\
33	DB_OSO_TEMP | DB_OSO_TRUNC)
34	if ((ret = __db_fchk(env, "__os_open", flags, OKFLAGS)) != 0)
35		return (ret);
36
37	oflags = 0;
38	if (LF_ISSET(DB_OSO_CREATE))
39		oflags |= _OFM_CREATE;
40
41	if (LF_ISSET(DB_OSO_RDONLY))
42		oflags |= _OFM_READ;
43	else
44		oflags |= _OFM_READWRITE;
45
46	if ((ret = __os_openhandle(env, name, oflags, mode, fhpp)) != 0)
47		return (ret);
48	if (LF_ISSET(DB_OSO_REGION))
49		F_SET(fhp, DB_FH_REGION);
50	return (ret);
51}
52