• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/ap/gpl/timemachine/db-4.7.25.NC/docs_src/ref/transapp/
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
13#define	MAXIMUM_RETRY	5
14
15int add_cat(DB_ENV *dbenv, DB *db, char *name, ...);
16
17int add_color(DB_ENV *a, DB *b, char *c, int d) {
18	a = NULL; b = NULL; c = NULL; d = 0;
19	return (0);
20}
21int add_fruit(DB_ENV *a, DB *b, char *c, char *d) {
22	a = NULL; b = NULL; c = NULL; d = 0;
23	return (0);
24}
25void  db_open(DB_ENV *a, DB **b, char *c, int d) {
26	a = NULL; b = NULL; c = NULL; d = 0;
27}
28void usage(){}
29void env_open(DB_ENV **a) { a = NULL; }
30void env_dir_create() {}
31])
32m4_indent([dnl
33int
34main(int argc, char *argv[])
35{
36	extern int optind;
37	DB *db_cats, *db_color, *db_fruit;
38	DB_ENV *dbenv;
39	int ch;
40m4_blank
41	while ((ch = getopt(argc, argv, "")) != EOF)
42		switch (ch) {
43		case '?':
44		default:
45			usage();
46		}
47	argc -= optind;
48	argv += optind;
49m4_blank
50	env_dir_create();
51	env_open(&dbenv);
52m4_blank
53	/* Open database: Key is fruit class; Data is specific type. */
54	db_open(dbenv, &db_fruit, "fruit", 0);
55m4_blank
56	/* Open database: Key is a color; Data is an integer. */
57	db_open(dbenv, &db_color, "color", 0);
58m4_blank
59	/*
60	 * Open database:
61	 *	Key is a name; Data is: company name, cat breeds.
62	 */
63	db_open(dbenv, &db_cats, "cats", 1);
64m4_blank
65	add_fruit(dbenv, db_fruit, "apple", "yellow delicious");
66m4_blank
67	add_color(dbenv, db_color, "blue", 0);
68	add_color(dbenv, db_color, "blue", 3);
69m4_blank
70m4_cbold([dnl
71	add_cat(dbenv, db_cats,
72		"Amy Adams",
73		"Oracle",
74		"abyssinian",
75		"bengal",
76		"chartreaux",
77		NULL);])
78m4_blank
79	return (0);
80}
81m4_blank
82m4_cbold([dnl
83int
84add_cat(DB_ENV *dbenv, DB *db, char *name, ...)
85{
86	va_list ap;
87	DBC *dbc;
88	DBT key, data;
89	DB_TXN *tid;
90	int fail, ret, t_ret;
91	char *s;
92m4_blank
93	/* Initialization. */
94	fail = 0;
95m4_blank
96	memset(&key, 0, sizeof(key));
97	memset(&data, 0, sizeof(data));
98	key.data = name;
99	key.size = strlen(name);
100m4_blank
101retry:	/* Begin the transaction. */
102	if ((ret = dbenv-__GT__txn_begin(dbenv, NULL, &tid, 0)) != 0) {
103		dbenv-__GT__err(dbenv, ret, "DB_ENV-__GT__txn_begin");
104		exit (1);
105	}
106m4_blank
107	/* Delete any previously existing item. */
108	switch (ret = db-__GT__del(db, tid, &key, 0)) {
109	case 0:
110	case DB_NOTFOUND:
111		break;
112	case DB_LOCK_DEADLOCK:
113	default:
114		/* Retry the operation. */
115		if ((t_ret = tid-__GT__abort(tid)) != 0) {
116			dbenv-__GT__err(dbenv, t_ret, "DB_TXN-__GT__abort");
117			exit (1);
118		}
119		if (fail++ == MAXIMUM_RETRY)
120			return (ret);
121		goto retry;
122	}
123m4_blank
124	/* Create a cursor. */
125	if ((ret = db-__GT__cursor(db, tid, &dbc, 0)) != 0) {
126		dbenv-__GT__err(dbenv, ret, "db-__GT__cursor");
127		exit (1);
128	}
129m4_blank
130	/* Append the items, in order. */
131	va_start(ap, name);
132	while ((s = va_arg(ap, char *)) != NULL) {
133		data.data = s;
134		data.size = strlen(s);
135		switch (ret = dbc-__GT__c_put(dbc, &key, &data, DB_KEYLAST)) {
136		case 0:
137			break;
138		case DB_LOCK_DEADLOCK:
139		default:
140			va_end(ap);
141m4_blank
142			/* Retry the operation. */
143			if ((t_ret = dbc-__GT__c_close(dbc)) != 0) {
144				dbenv-__GT__err(
145				    dbenv, t_ret, "dbc-__GT__c_close");
146				exit (1);
147			}
148			if ((t_ret = tid-__GT__abort(tid)) != 0) {
149				dbenv-__GT__err(dbenv, t_ret, "DB_TXN-__GT__abort");
150				exit (1);
151			}
152			if (fail++ == MAXIMUM_RETRY)
153				return (ret);
154			goto retry;
155		}
156	}
157	va_end(ap);
158m4_blank
159	/* Success: commit the change. */
160	if ((ret = dbc-__GT__c_close(dbc)) != 0) {
161		dbenv-__GT__err(dbenv, ret, "dbc-__GT__c_close");
162		exit (1);
163	}
164	if ((ret = tid-__GT__commit(tid, 0)) != 0) {
165		dbenv-__GT__err(dbenv, ret, "DB_TXN-__GT__commit");
166		exit (1);
167	}
168	return (0);
169}])])
170