1m4_ignore([dnl
2#include <sys/types.h>
3#include <sys/stat.h>
4
5#include <errno.h>
6#include <stdarg.h>
7#include <stdlib.h>
8#include <string.h>
9#include <unistd.h>
10
11#include <db.h>
12
13int  db_open(DB_ENV *, DB **, char *, int);
14
15void usage(){}
16void env_open(DB_ENV **a) { a = NULL; }
17void env_dir_create() {}
18])
19m4_indent([dnl
20int
21main(int argc, char *argv[])
22{
23	extern int optind;
24	DB *db_cats, *db_color, *db_fruit;
25	DB_ENV *dbenv;
26	int ch;
27m4_blank
28	while ((ch = getopt(argc, argv, "")) != EOF)
29		switch (ch) {
30		case '?':
31		default:
32			usage();
33		}
34	argc -= optind;
35	argv += optind;
36m4_blank
37	env_dir_create();
38	env_open(&dbenv);
39m4_blank
40m4_cbold([dnl
41	/* Open database: Key is fruit class; Data is specific type. */
42	if (db_open(dbenv, &db_fruit, "fruit", 0))
43		return (1);
44m4_blank
45	/* Open database: Key is a color; Data is an integer. */
46	if (db_open(dbenv, &db_color, "color", 0))
47		return (1);
48m4_blank
49	/*
50	 * Open database:
51	 *	Key is a name; Data is: company name, cat breeds.
52	 */
53	if (db_open(dbenv, &db_cats, "cats", 1))
54		return (1);])
55m4_blank
56	return (0);
57}
58m4_blank
59m4_cbold([dnl
60int
61db_open(DB_ENV *dbenv, DB **dbp, char *name, int dups)
62{
63	DB *db;
64	int ret;
65m4_blank
66	/* Create the database handle. */
67	if ((ret = db_create(&db, dbenv, 0)) != 0) {
68		dbenv-__GT__err(dbenv, ret, "db_create");
69		return (1);
70	}
71m4_blank
72	/* Optionally, turn on duplicate data items. */
73	if (dups && (ret = db-__GT__set_flags(db, DB_DUP)) != 0) {
74		(void)db-__GT__close(db, 0);
75		dbenv-__GT__err(dbenv, ret, "db-__GT__set_flags: DB_DUP");
76		return (1);
77	}
78m4_blank
79	/*
80	 * Open a database in the environment:
81	 *	create if it doesn't exist
82	 *	free-threaded handle
83	 *	read/write owner only
84	 */
85	if ((ret = db-__GT__open(db, NULL, name, NULL, DB_BTREE,
86	    DB_AUTO_COMMIT | DB_CREATE | DB_THREAD, S_IRUSR | S_IWUSR)) != 0) {
87		(void)db-__GT__close(db, 0);
88		dbenv-__GT__err(dbenv, ret, "db-__GT__open: %s", name);
89		return (1);
90	}
91m4_blank
92	*dbp = db;
93	return (0);
94}])])
95