• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/timemachine/netatalk-2.2.5/etc/cnid_dbd/

Lines Matching defs:dbd

35 static int dbif_stamp(DBD *dbd, void *buffer, int size)
51 if ((chdir(dbd->db_envhome)) != 0) {
52 LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno));
56 if (stat(dbd->db_table[DBIF_CNID].name, &st) < 0) {
57 LOG(log_error, logtype_cnid, "error stating database %s: %s", dbd->db_table[DBIF_CNID].name, db_strerror(errno));
83 * @param dbd (rw) database handle
88 static int dbif_init_rootinfo(DBD *dbd, int version)
108 if (dbif_stamp(dbd, buf + CNID_DEV_OFS, CNID_DEV_LEN) < 0)
111 if (dbif_put(dbd, DBIF_CNID, &key, &data, 0) < 0)
113 if (dbif_txn_commit(dbd) != 1) {
128 static int dbif_getversion(DBD *dbd, uint32_t *version)
141 switch (dbif_get(dbd, DBIF_CNID, &key, &data, 0)) {
167 static int dbif_setversion(DBD *dbd, uint32_t version)
183 if ((ret = dbif_get(dbd, DBIF_CNID, &key, &data, 0)) == -1)
187 if (dbif_init_rootinfo(dbd, CNID_VERSION) != 0)
190 if (dbif_get(dbd, DBIF_CNID, &key, &data, 0) == -1)
195 if (dbif_put(dbd, DBIF_CNID, &key, &data, 0) < 0)
207 static int dbif_upgrade(DBD *dbd)
211 if (dbif_getversion(dbd, &version) == -1)
215 if (dbif_setversion(dbd, CNID_VERSION) != 0)
225 if (dbif_setversion(dbd, CNID_VERSION) != 0)
235 static int dbif_openlog(DBD *dbd)
240 if ( ! dbd->db_filename)
251 if ((chdir(dbd->db_envhome)) != 0) {
252 LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno));
257 if ((dbd->db_errlog = fopen(DB_ERRLOGFILE, "a")) == NULL)
260 if (dbd->db_errlog != NULL) {
261 dbd->db_env->set_errfile(dbd->db_env, dbd->db_errlog);
262 dbd->db_env->set_msgfile(dbd->db_env, dbd->db_errlog);
277 static int dbif_logautorem(DBD *dbd)
284 if ( ! dbd->db_filename)
295 if ((chdir(dbd->db_envhome)) != 0) {
296 LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno));
301 if ((ret = dbd->db_env->log_archive(dbd->db_env, &logfiles, 0)) != 0) {
304 dbd->db_env->close(dbd->db_env, 0);
305 dbd->db_env = NULL;
417 DBD *dbd;
419 if ( NULL == (dbd = calloc(sizeof(DBD), 1)) )
427 dbd->db_envhome = strdup(envhome);
428 if (NULL == dbd->db_envhome) {
429 free(dbd);
433 dbd->db_filename = strdup(filename);
434 if (NULL == dbd->db_filename) {
435 free(dbd->db_envhome);
436 free(dbd);
441 dbd->db_table[DBIF_CNID].name = "cnid2.db";
442 dbd->db_table[DBIF_IDX_DEVINO].name = "devino.db";
443 dbd->db_table[DBIF_IDX_DIDNAME].name = "didname.db";
444 dbd->db_table[DBIF_IDX_NAME].name = "name.db";
446 dbd->db_table[DBIF_CNID].type = DB_BTREE;
447 dbd->db_table[DBIF_IDX_DEVINO].type = DB_BTREE;
448 dbd->db_table[DBIF_IDX_DIDNAME].type = DB_BTREE;
449 dbd->db_table[DBIF_IDX_NAME].type = DB_BTREE;
451 dbd->db_table[DBIF_CNID].openflags = DB_CREATE;
452 dbd->db_table[DBIF_IDX_DEVINO].openflags = DB_CREATE;
453 dbd->db_table[DBIF_IDX_DIDNAME].openflags = DB_CREATE;
454 dbd->db_table[DBIF_IDX_NAME].openflags = DB_CREATE;
456 dbd->db_table[DBIF_IDX_NAME].flags = DB_DUPSORT;
458 return dbd;
462 We must open the db_env with an absolute pathname, as `dbd` keeps chdir'ing, which
468 int dbif_env_open(DBD *dbd, struct db_param *dbp, uint32_t dbenv_oflags)
472 if ((ret = db_env_create(&dbd->db_env, 0))) {
475 dbd->db_env = NULL;
479 dbd->db_param = *dbp;
481 if ((dbif_openlog(dbd)) != 0)
488 dbd->db_env->set_verbose(dbd->db_env, DB_VERB_RECOVERY, 1);
490 if ((ret = dbd->db_env->open(dbd->db_env, dbd->db_envhome, dbenv_oflags | DB_PRIVATE, 0))) {
493 dbd->db_env->close(dbd->db_env, 0);
494 dbd->db_env = NULL;
499 if (dbd->db_errlog != NULL)
500 fflush(dbd->db_errlog);
502 if ((ret = dbd->db_env->close(dbd->db_env, 0))) {
505 dbd->db_env = NULL;
508 dbd->db_errlog = NULL;
510 if ((ret = db_env_create(&dbd->db_env, 0))) {
513 dbd->db_env = NULL;
517 if ((dbif_openlog(dbd)) != 0)
523 if ((ret = dbd->db_env->set_cachesize(dbd->db_env, 0, 1024 * dbp->cachesize, 0))) {
526 dbd->db_env->close(dbd->db_env, 0);
527 dbd->db_env = NULL;
531 if ((ret = dbd->db_env->set_lk_max_locks(dbd->db_env, dbp->maxlocks))) {
534 dbd->db_env->close(dbd->db_env, 0);
535 dbd->db_env = NULL;
539 if ((ret = dbd->db_env->set_lk_max_objects(dbd->db_env, dbp->maxlockobjs))) {
542 dbd->db_env->close(dbd->db_env, 0);
543 dbd->db_env = NULL;
547 if ((ret = dbd->db_env->open(dbd->db_env, dbd->db_envhome, dbenv_oflags, 0))) {
550 dbd->db_env->close(dbd->db_env, 0);
551 dbd->db_env = NULL;
555 if ((ret = dbd->db_env->set_flags(dbd->db_env, DB_AUTO_COMMIT, 1))) {
558 dbd->db_env->close(dbd->db_env, 0);
559 dbd->db_env = NULL;
564 if ((dbif_logautorem(dbd)) != 0)
568 if ((ret = dbd->db_env->log_set_config(dbd->db_env, DB_LOG_AUTO_REMOVE, 1))) {
571 dbd->db_env->close(dbd->db_env, 0);
572 dbd->db_env = NULL;
576 if ((ret = dbd->db_env->set_flags(dbd->db_env, DB_LOG_AUTOREMOVE, 1))) {
579 dbd->db_env->close(dbd->db_env, 0);
580 dbd->db_env = NULL;
590 int dbif_open(DBD *dbd, struct db_param *dbp, int reindex)
598 if (dbd->db_envhome) {
606 if ((chdir(dbd->db_envhome)) != 0) {
607 LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno));
611 if ((stat(dbd->db_filename, &st)) == 0) {
613 if ((ret = db_create(&upgrade_db, dbd->db_env, 0))) {
617 if ((ret = upgrade_db->upgrade(upgrade_db, dbd->db_filename, 0))) {
625 if ((ret = dbd->db_env->txn_checkpoint(dbd->db_env, 0, 0, DB_FORCE))) {
640 if ((ret = db_create(&dbd->db_table[i].db, dbd->db_env, 0))) {
642 dbd->db_table[i].name, db_strerror(ret));
646 if (dbd->db_table[i].flags) {
647 if ((ret = dbd->db_table[i].db->set_flags(dbd->db_table[i].db,
648 dbd->db_table[i].flags))) {
650 dbd->db_table[i].name, db_strerror(ret));
655 if ( ! dbd->db_env) { /* In memory db */
656 if ((ret = dbd->db_table[i].db->set_cachesize(dbd->db_table[i].db,
662 dbp->cachesize / 1024, dbd->db_table[i].name, db_strerror(ret));
667 if (dbd->db_table[i].db->open(dbd->db_table[i].db,
668 dbd->db_txn,
669 dbd->db_filename,
670 dbd->db_table[i].name,
671 dbd->db_table[i].type,
672 dbd->db_table[i].openflags,
680 if ((ret = dbd->db_table[i].db->truncate(dbd->db_table[i].db, NULL, &count, 0))) {
682 dbd->db_table[i].name, db_strerror(ret));
693 if ((ret = dbd->db_table[0].db->associate(dbd->db_table[DBIF_CNID].db,
694 dbd->db_txn,
695 dbd->db_table[DBIF_IDX_DIDNAME].db,
707 if ((ret = dbd->db_table[0].db->associate(dbd->db_table[0].db,
708 dbd->db_txn,
709 dbd->db_table[DBIF_IDX_DEVINO].db,
727 if (dbd->db_envhome && !reindex) {
728 if (dbif_getversion(dbd, &version) == -1)
732 if ((ret = dbd->db_table[0].db->associate(dbd->db_table[0].db,
733 dbd->db_txn,
734 dbd->db_table[DBIF_IDX_NAME].db,
746 if ((dbd->db_envhome) && ((ret = dbif_upgrade(dbd)) != 0)) {
755 static int dbif_closedb(DBD *dbd)
762 if (dbd->db_table[i].db != NULL && (ret = dbd->db_table[i].db->close(dbd->db_table[i].db, 0))) {
763 LOG(log_error, logtype_cnid, "error closing database %s: %s", dbd->db_table[i].name, db_strerror(ret));
773 int dbif_close(DBD *dbd)
778 if (dbif_closedb(dbd))
781 if (dbd->db_env != NULL && (ret = dbd->db_env->close(dbd->db_env, 0))) {
785 if (dbd->db_errlog != NULL && fclose(dbd->db_errlog) == EOF) {
790 free(dbd->db_filename);
791 free(dbd);
792 dbd = NULL;
806 DBD *dbd;
815 if (NULL == (dbd = dbif_init(path, "cnid2.db")))
819 if ((ret = db_env_create(&dbd->db_env, 0))) {
821 dbd->db_env = NULL;
825 if ((dbif_openlog(dbd)) != 0)
829 if ((ret = dbd->db_env->open(dbd->db_env,
830 dbd->db_envhome,
835 dbd->db_env->close(dbd->db_env, 0);
836 dbd->db_env = NULL;
840 if (dbd->db_errlog != NULL)
841 fflush(dbd->db_errlog);
844 if ((ret = dbd->db_env->log_archive(dbd->db_env, NULL, DB_ARCH_REMOVE))) {
849 if ((ret = dbd->db_env->close(dbd->db_env, 0))) {
851 dbd->db_env = NULL;
858 if ((ret = db_env_create(&dbd->db_env, 0))) {
860 dbd->db_env = NULL;
863 if ((ret = dbd->db_env->remove(dbd->db_env, dbd->db_envhome, 0))) {
883 int dbif_get(DBD *dbd, const int dbi, DBT *key, DBT *val, u_int32_t flags)
887 ret = dbd->db_table[dbi].db->get(dbd->db_table[dbi].db,
888 dbd->db_txn,
897 dbd->db_table[dbi].name, db_strerror(ret));
904 int dbif_pget(DBD *dbd, const int dbi, DBT *key, DBT *pkey, DBT *val, u_int32_t flags)
908 ret = dbd->db_table[dbi].db->pget(dbd->db_table[dbi].db,
909 dbd->db_txn,
920 dbd->db_table[dbi].name, db_strerror(ret));
927 int dbif_put(DBD *dbd, const int dbi, DBT *key, DBT *val, u_int32_t flags)
931 if (dbif_txn_begin(dbd) < 0) {
932 LOG(log_error, logtype_cnid, "error setting key/value in %s", dbd->db_table[dbi].name);
936 ret = dbd->db_table[dbi].db->put(dbd->db_table[dbi].db,
937 dbd->db_txn,
948 dbd->db_table[dbi].name, db_strerror(ret));
955 int dbif_del(DBD *dbd, const int dbi, DBT *key, u_int32_t flags)
959 /* For cooperation with the dbd utility and its usage of a cursor */
960 if (dbd->db_cur) {
961 dbd->db_cur->close(dbd->db_cur);
962 dbd->db_cur = NULL;
965 if (dbif_txn_begin(dbd) < 0) {
966 LOG(log_error, logtype_cnid, "error deleting key/value from %s", dbd->db_table[dbi].name);
970 ret = dbd->db_table[dbi].db->del(dbd->db_table[dbi].db,
971 dbd->db_txn,
981 dbd->db_table[dbi].name, db_strerror(ret));
995 int dbif_search(DBD *dbd, DBT *key, char *resbuf)
1010 ret = dbd->db_table[DBIF_IDX_NAME].db->cursor(dbd->db_table[DBIF_IDX_NAME].db,
1041 int dbif_txn_begin(DBD *dbd)
1046 if (dbd->db_txn)
1050 if (dbd->db_env == NULL)
1053 ret = dbd->db_env->txn_begin(dbd->db_env, NULL, &dbd->db_txn, 0);
1062 int dbif_txn_commit(DBD *dbd)
1066 if (! dbd->db_txn)
1070 if (dbd->db_env == NULL)
1073 ret = dbd->db_txn->commit(dbd->db_txn, 0);
1074 dbd->db_txn = NULL;
1083 int dbif_txn_abort(DBD *dbd)
1087 if (! dbd->db_txn)
1091 if (dbd->db_env == NULL)
1094 ret = dbd->db_txn->abort(dbd->db_txn);
1095 dbd->db_txn = NULL;
1111 int dbif_txn_close(DBD *dbd, int ret)
1114 if (dbif_txn_abort(dbd) < 0) {
1119 ret = dbif_txn_commit(dbd);
1131 int dbif_txn_checkpoint(DBD *dbd, u_int32_t kbyte, u_int32_t min, u_int32_t flags)
1134 ret = dbd->db_env->txn_checkpoint(dbd->db_env, kbyte, min, flags);
1142 int dbif_count(DBD *dbd, const int dbi, u_int32_t *count)
1146 DB *db = dbd->db_table[dbi].db;
1189 int dbif_dump(DBD *dbd, int dumpindexes)
1197 DB *db = dbd->db_table[DBIF_CNID].db;
1226 printf("CNID db version: %u, dbd stamp: 0x%08x (%s), next free CNID: %u\n",
1270 db = dbd->db_table[DBIF_IDX_DEVINO].db;
1315 db = dbd->db_table[DBIF_IDX_DIDNAME].db;
1358 Iterates over dbd, returning cnids.
1363 int dbif_idwalk(DBD *dbd, cnid_t *cnid, int close)
1370 DB *db = dbd->db_table[DBIF_CNID].db;
1373 if (dbd->db_cur) {
1374 dbd->db_cur->close(dbd->db_cur);
1375 dbd->db_cur = NULL;
1381 if ( ! dbd->db_cur ) {
1382 if ((rc = db->cursor(db, NULL, &dbd->db_cur, 0)) != 0) {
1393 if ((rc = dbd->db_cur->get(dbd->db_cur, &key, &data, flag)) == 0) {
1401 dbd->db_cur->close(dbd->db_cur);
1402 dbd->db_cur = NULL;
1406 if (dbd->db_cur) {
1407 dbd->db_cur->close(dbd->db_cur);
1408 dbd->db_cur = NULL;