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_fruit(DB_ENV *, DB *, char *, char *); 16 17void db_open(DB_ENV *a, DB **b, char *c, int d) { 18 a = NULL; b = NULL; c = NULL; d = 0; 19} 20void usage(){} 21void env_open(DB_ENV **a) { a = NULL; } 22void env_dir_create() {} 23int 24main(int argc, char *argv[]) 25{ 26 extern int optind; 27 DB *db_cats, *db_color, *db_fruit; 28 DB_ENV *dbenv; 29 int ch; 30 31 while ((ch = getopt(argc, argv, "")) != EOF) 32 switch (ch) { 33 case '?': 34 default: 35 usage(); 36 } 37 argc -= optind; 38 argv += optind; 39 40 env_dir_create(); 41 env_open(&dbenv); 42 43 /* Open database: Key is fruit class; Data is specific type. */ 44 db_open(dbenv, &db_fruit, "fruit", 0); 45 46 /* Open database: Key is a color; Data is an integer. */ 47 db_open(dbenv, &db_color, "color", 0); 48 49 /* 50 * Open database: 51 * Key is a name; Data is: company name, cat breeds. 52 */ 53 db_open(dbenv, &db_cats, "cats", 1); 54 55 add_fruit(dbenv, db_fruit, "apple", "yellow delicious"); 56 57 return (0); 58} 59 60int 61add_fruit(DB_ENV *dbenv, DB *db, char *fruit, char *name) 62{ 63 DBT key, data; 64 int fail, ret; 65 66 /* Initialization. */ 67 memset(&key, 0, sizeof(key)); 68 memset(&data, 0, sizeof(data)); 69 key.data = fruit; 70 key.size = strlen(fruit); 71 data.data = name; 72 data.size = strlen(name); 73]) 74m4_indent([m4_cbold([dnl 75 for (fail = 0; fail++ __LT__= MAXIMUM_RETRY && 76 (ret = db-__GT__put(db, NULL, &key, &data, 0)) == DB_LOCK_DEADLOCK;) 77 ; 78 return (ret == 0 ? 0 : 1);])]) 79m4_ignore([ 80}]) 81