• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/ap/gpl/timemachine/netatalk-2.2.0/etc/cnid_dbd/

Lines Matching defs:dbd

34 static int dbif_stamp(DBD *dbd, void *buffer, int size)
49 if ((chdir(dbd->db_envhome)) != 0) {
50 LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno));
54 if ((rc = stat(dbd->db_table[DBIF_CNID].name, &st)) < 0) {
55 LOG(log_error, logtype_cnid, "error stating database %s: %s", dbd->db_table[DBIF_CNID].name, db_strerror(errno));
78 * @param dbd (rw) database handle
83 static int dbif_init_rootinfo(DBD *dbd, int version)
103 if (dbif_stamp(dbd, buf + CNID_DEV_OFS, CNID_DEV_LEN) < 0)
106 if (dbif_put(dbd, DBIF_CNID, &key, &data, 0) < 0)
108 if (dbif_txn_commit(dbd) != 1) {
123 static int dbif_getversion(DBD *dbd, uint32_t *version)
136 switch (dbif_get(dbd, DBIF_CNID, &key, &data, 0)) {
162 static int dbif_setversion(DBD *dbd, uint32_t version)
178 if ((ret = dbif_get(dbd, DBIF_CNID, &key, &data, 0)) == -1)
182 if (dbif_init_rootinfo(dbd, CNID_VERSION) != 0)
185 if (dbif_get(dbd, DBIF_CNID, &key, &data, 0) == -1)
190 if (dbif_put(dbd, DBIF_CNID, &key, &data, 0) < 0)
202 static int dbif_upgrade(DBD *dbd)
206 if (dbif_getversion(dbd, &version) == -1)
210 if (dbif_setversion(dbd, CNID_VERSION) != 0)
220 if (dbif_setversion(dbd, CNID_VERSION) != 0)
230 static int dbif_openlog(DBD *dbd)
235 if ( ! dbd->db_filename)
246 if ((chdir(dbd->db_envhome)) != 0) {
247 LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno));
252 if ((dbd->db_errlog = fopen(DB_ERRLOGFILE, "a")) == NULL)
255 if (dbd->db_errlog != NULL) {
256 dbd->db_env->set_errfile(dbd->db_env, dbd->db_errlog);
257 dbd->db_env->set_msgfile(dbd->db_env, dbd->db_errlog);
272 static int dbif_logautorem(DBD *dbd)
279 if ( ! dbd->db_filename)
290 if ((chdir(dbd->db_envhome)) != 0) {
291 LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno));
296 if ((ret = dbd->db_env->log_archive(dbd->db_env, &logfiles, 0)) != 0) {
299 dbd->db_env->close(dbd->db_env, 0);
300 dbd->db_env = NULL;
412 DBD *dbd;
414 if ( NULL == (dbd = calloc(sizeof(DBD), 1)) )
422 dbd->db_envhome = strdup(envhome);
423 if (NULL == dbd->db_envhome) {
424 free(dbd);
428 dbd->db_filename = strdup(filename);
429 if (NULL == dbd->db_filename) {
430 free(dbd->db_envhome);
431 free(dbd);
436 dbd->db_table[DBIF_CNID].name = "cnid2.db";
437 dbd->db_table[DBIF_IDX_DEVINO].name = "devino.db";
438 dbd->db_table[DBIF_IDX_DIDNAME].name = "didname.db";
439 dbd->db_table[DBIF_IDX_NAME].name = "name.db";
441 dbd->db_table[DBIF_CNID].type = DB_BTREE;
442 dbd->db_table[DBIF_IDX_DEVINO].type = DB_BTREE;
443 dbd->db_table[DBIF_IDX_DIDNAME].type = DB_BTREE;
444 dbd->db_table[DBIF_IDX_NAME].type = DB_BTREE;
446 dbd->db_table[DBIF_CNID].openflags = DB_CREATE;
447 dbd->db_table[DBIF_IDX_DEVINO].openflags = DB_CREATE;
448 dbd->db_table[DBIF_IDX_DIDNAME].openflags = DB_CREATE;
449 dbd->db_table[DBIF_IDX_NAME].openflags = DB_CREATE;
451 dbd->db_table[DBIF_IDX_NAME].flags = DB_DUPSORT;
453 return dbd;
457 We must open the db_env with an absolute pathname, as `dbd` keeps chdir'ing, which
463 int dbif_env_open(DBD *dbd, struct db_param *dbp, uint32_t dbenv_oflags)
467 if ((ret = db_env_create(&dbd->db_env, 0))) {
470 dbd->db_env = NULL;
474 dbd->db_param = *dbp;
476 if ((dbif_openlog(dbd)) != 0)
483 dbd->db_env->set_verbose(dbd->db_env, DB_VERB_RECOVERY, 1);
485 if ((ret = dbd->db_env->open(dbd->db_env, dbd->db_envhome, dbenv_oflags | DB_PRIVATE, 0))) {
488 dbd->db_env->close(dbd->db_env, 0);
489 dbd->db_env = NULL;
494 if (dbd->db_errlog != NULL)
495 fflush(dbd->db_errlog);
497 if ((ret = dbd->db_env->close(dbd->db_env, 0))) {
500 dbd->db_env = NULL;
503 dbd->db_errlog = NULL;
505 if ((ret = db_env_create(&dbd->db_env, 0))) {
508 dbd->db_env = NULL;
512 if ((dbif_openlog(dbd)) != 0)
518 if ((ret = dbd->db_env->set_cachesize(dbd->db_env, 0, 1024 * dbp->cachesize, 0))) {
521 dbd->db_env->close(dbd->db_env, 0);
522 dbd->db_env = NULL;
526 if ((ret = dbd->db_env->set_lk_max_locks(dbd->db_env, dbp->maxlocks))) {
529 dbd->db_env->close(dbd->db_env, 0);
530 dbd->db_env = NULL;
534 if ((ret = dbd->db_env->set_lk_max_objects(dbd->db_env, dbp->maxlockobjs))) {
537 dbd->db_env->close(dbd->db_env, 0);
538 dbd->db_env = NULL;
542 if ((ret = dbd->db_env->open(dbd->db_env, dbd->db_envhome, dbenv_oflags, 0))) {
545 dbd->db_env->close(dbd->db_env, 0);
546 dbd->db_env = NULL;
550 if ((ret = dbd->db_env->set_flags(dbd->db_env, DB_AUTO_COMMIT, 1))) {
553 dbd->db_env->close(dbd->db_env, 0);
554 dbd->db_env = NULL;
559 if ((dbif_logautorem(dbd)) != 0)
563 if ((ret = dbd->db_env->log_set_config(dbd->db_env, DB_LOG_AUTO_REMOVE, 1))) {
566 dbd->db_env->close(dbd->db_env, 0);
567 dbd->db_env = NULL;
571 if ((ret = dbd->db_env->set_flags(dbd->db_env, DB_LOG_AUTOREMOVE, 1))) {
574 dbd->db_env->close(dbd->db_env, 0);
575 dbd->db_env = NULL;
585 int dbif_open(DBD *dbd, struct db_param *dbp, int reindex)
593 if (dbd->db_envhome) {
601 if ((chdir(dbd->db_envhome)) != 0) {
602 LOG(log_error, logtype_cnid, "error chdiring to db_env '%s': %s", dbd->db_envhome, strerror(errno));
606 if ((stat(dbd->db_filename, &st)) == 0) {
608 if ((ret = db_create(&upgrade_db, dbd->db_env, 0))) {
612 if ((ret = upgrade_db->upgrade(upgrade_db, dbd->db_filename, 0))) {
620 if ((ret = dbd->db_env->txn_checkpoint(dbd->db_env, 0, 0, DB_FORCE))) {
635 if ((ret = db_create(&dbd->db_table[i].db, dbd->db_env, 0))) {
637 dbd->db_table[i].name, db_strerror(ret));
641 if (dbd->db_table[i].flags) {
642 if ((ret = dbd->db_table[i].db->set_flags(dbd->db_table[i].db,
643 dbd->db_table[i].flags))) {
645 dbd->db_table[i].name, db_strerror(ret));
650 if ( ! dbd->db_env) { /* In memory db */
651 if ((ret = dbd->db_table[i].db->set_cachesize(dbd->db_table[i].db,
657 dbp->cachesize / 1024, dbd->db_table[i].name, db_strerror(ret));
662 if (dbd->db_table[i].db->open(dbd->db_table[i].db,
663 dbd->db_txn,
664 dbd->db_filename,
665 dbd->db_table[i].name,
666 dbd->db_table[i].type,
667 dbd->db_table[i].openflags,
675 if ((ret = dbd->db_table[i].db->truncate(dbd->db_table[i].db, NULL, &count, 0))) {
677 dbd->db_table[i].name, db_strerror(ret));
688 if ((ret = dbd->db_table[0].db->associate(dbd->db_table[DBIF_CNID].db,
689 dbd->db_txn,
690 dbd->db_table[DBIF_IDX_DIDNAME].db,
702 if ((ret = dbd->db_table[0].db->associate(dbd->db_table[0].db,
703 dbd->db_txn,
704 dbd->db_table[DBIF_IDX_DEVINO].db,
722 if (dbd->db_envhome && !reindex) {
723 if (dbif_getversion(dbd, &version) == -1)
727 if ((ret = dbd->db_table[0].db->associate(dbd->db_table[0].db,
728 dbd->db_txn,
729 dbd->db_table[DBIF_IDX_NAME].db,
741 if ((dbd->db_envhome) && ((ret = dbif_upgrade(dbd)) != 0)) {
750 static int dbif_closedb(DBD *dbd)
757 if (dbd->db_table[i].db != NULL && (ret = dbd->db_table[i].db->close(dbd->db_table[i].db, 0))) {
758 LOG(log_error, logtype_cnid, "error closing database %s: %s", dbd->db_table[i].name, db_strerror(ret));
768 int dbif_close(DBD *dbd)
773 if (dbif_closedb(dbd))
776 if (dbd->db_env != NULL && (ret = dbd->db_env->close(dbd->db_env, 0))) {
780 if (dbd->db_errlog != NULL && fclose(dbd->db_errlog) == EOF) {
785 free(dbd->db_filename);
786 free(dbd);
787 dbd = NULL;
801 DBD *dbd;
805 if (NULL == (dbd = dbif_init(path, "cnid2.db")))
809 if ((ret = db_env_create(&dbd->db_env, 0))) {
811 dbd->db_env = NULL;
815 if ((dbif_openlog(dbd)) != 0)
819 if ((ret = dbd->db_env->open(dbd->db_env,
820 dbd->db_envhome,
825 dbd->db_env->close(dbd->db_env, 0);
826 dbd->db_env = NULL;
830 if (dbd->db_errlog != NULL)
831 fflush(dbd->db_errlog);
834 if ((ret = dbd->db_env->log_archive(dbd->db_env, NULL, DB_ARCH_REMOVE))) {
839 if ((ret = dbd->db_env->close(dbd->db_env, 0))) {
841 dbd->db_env = NULL;
848 if ((ret = db_env_create(&dbd->db_env, 0))) {
850 dbd->db_env = NULL;
853 if ((ret = dbd->db_env->remove(dbd->db_env, dbd->db_envhome, 0))) {
873 int dbif_get(DBD *dbd, const int dbi, DBT *key, DBT *val, u_int32_t flags)
877 ret = dbd->db_table[dbi].db->get(dbd->db_table[dbi].db,
878 dbd->db_txn,
887 dbd->db_table[dbi].name, db_strerror(ret));
894 int dbif_pget(DBD *dbd, const int dbi, DBT *key, DBT *pkey, DBT *val, u_int32_t flags)
898 ret = dbd->db_table[dbi].db->pget(dbd->db_table[dbi].db,
899 dbd->db_txn,
910 dbd->db_table[dbi].name, db_strerror(ret));
917 int dbif_put(DBD *dbd, const int dbi, DBT *key, DBT *val, u_int32_t flags)
921 if (dbif_txn_begin(dbd) < 0) {
922 LOG(log_error, logtype_cnid, "error setting key/value in %s", dbd->db_table[dbi].name);
926 ret = dbd->db_table[dbi].db->put(dbd->db_table[dbi].db,
927 dbd->db_txn,
938 dbd->db_table[dbi].name, db_strerror(ret));
945 int dbif_del(DBD *dbd, const int dbi, DBT *key, u_int32_t flags)
949 /* For cooperation with the dbd utility and its usage of a cursor */
950 if (dbd->db_cur) {
951 dbd->db_cur->close(dbd->db_cur);
952 dbd->db_cur = NULL;
955 if (dbif_txn_begin(dbd) < 0) {
956 LOG(log_error, logtype_cnid, "error deleting key/value from %s", dbd->db_table[dbi].name);
960 ret = dbd->db_table[dbi].db->del(dbd->db_table[dbi].db,
961 dbd->db_txn,
971 dbd->db_table[dbi].name, db_strerror(ret));
985 int dbif_search(DBD *dbd, DBT *key, char *resbuf)
1000 ret = dbd->db_table[DBIF_IDX_NAME].db->cursor(dbd->db_table[DBIF_IDX_NAME].db,
1031 int dbif_txn_begin(DBD *dbd)
1036 if (dbd->db_txn)
1040 if (dbd->db_env == NULL)
1043 ret = dbd->db_env->txn_begin(dbd->db_env, NULL, &dbd->db_txn, 0);
1052 int dbif_txn_commit(DBD *dbd)
1056 if (! dbd->db_txn)
1060 if (dbd->db_env == NULL)
1063 ret = dbd->db_txn->commit(dbd->db_txn, 0);
1064 dbd->db_txn = NULL;
1073 int dbif_txn_abort(DBD *dbd)
1077 if (! dbd->db_txn)
1081 if (dbd->db_env == NULL)
1084 ret = dbd->db_txn->abort(dbd->db_txn);
1085 dbd->db_txn = NULL;
1101 int dbif_txn_close(DBD *dbd, int ret)
1104 if (dbif_txn_abort(dbd) < 0) {
1109 ret = dbif_txn_commit(dbd);
1121 int dbif_txn_checkpoint(DBD *dbd, u_int32_t kbyte, u_int32_t min, u_int32_t flags)
1124 ret = dbd->db_env->txn_checkpoint(dbd->db_env, kbyte, min, flags);
1132 int dbif_count(DBD *dbd, const int dbi, u_int32_t *count)
1136 DB *db = dbd->db_table[dbi].db;
1179 int dbif_dump(DBD *dbd, int dumpindexes)
1187 DB *db = dbd->db_table[DBIF_CNID].db;
1216 printf("CNID db version: %u, dbd stamp: 0x%08x (%s), next free CNID: %u\n",
1260 db = dbd->db_table[DBIF_IDX_DEVINO].db;
1305 db = dbd->db_table[DBIF_IDX_DIDNAME].db;
1348 Iterates over dbd, returning cnids.
1353 int dbif_idwalk(DBD *dbd, cnid_t *cnid, int close)
1360 DB *db = dbd->db_table[DBIF_CNID].db;
1363 if (dbd->db_cur) {
1364 dbd->db_cur->close(dbd->db_cur);
1365 dbd->db_cur = NULL;
1371 if ( ! dbd->db_cur ) {
1372 if ((rc = db->cursor(db, NULL, &dbd->db_cur, 0)) != 0) {
1383 if ((rc = dbd->db_cur->get(dbd->db_cur, &key, &data, flag)) == 0) {
1391 dbd->db_cur->close(dbd->db_cur);
1392 dbd->db_cur = NULL;
1396 if (dbd->db_cur) {
1397 dbd->db_cur->close(dbd->db_cur);
1398 dbd->db_cur = NULL;