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