PageRenderTime 27ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/branches/SN-NG4.3-autoconf/db4/env/env_config.c

https://gitlab.com/OpenSourceMirror/sourcenav
C | 546 lines | 469 code | 46 blank | 31 comment | 322 complexity | ab32ec832f0654aff0a7883e9581fd72 MD5 | raw file
  1. /*-
  2. * See the file LICENSE for redistribution information.
  3. *
  4. * Copyright (c) 1996-2009 Oracle. All rights reserved.
  5. *
  6. * $Id$
  7. */
  8. #include "db_config.h"
  9. #include "db_int.h"
  10. #include "dbinc/lock.h"
  11. #include "dbinc/log.h"
  12. #include "dbinc/mp.h"
  13. #include "dbinc/txn.h"
  14. static int __config_parse __P((ENV *, char *, int));
  15. /*
  16. * __env_read_db_config --
  17. * Read the DB_CONFIG file.
  18. *
  19. * PUBLIC: int __env_read_db_config __P((ENV *));
  20. */
  21. int
  22. __env_read_db_config(env)
  23. ENV *env;
  24. {
  25. FILE *fp;
  26. int lc, ret;
  27. char *p, buf[256];
  28. /* Parse the config file. */
  29. p = NULL;
  30. if ((ret = __db_appname(env,
  31. DB_APP_NONE, "DB_CONFIG", NULL, &p)) != 0)
  32. return (ret);
  33. if (p == NULL)
  34. fp = NULL;
  35. else {
  36. fp = fopen(p, "r");
  37. __os_free(env, p);
  38. }
  39. if (fp == NULL)
  40. return (0);
  41. for (lc = 1; fgets(buf, sizeof(buf), fp) != NULL; ++lc) {
  42. if ((p = strchr(buf, '\n')) == NULL)
  43. p = buf + strlen(buf);
  44. if (p > buf && p[-1] == '\r')
  45. --p;
  46. *p = '\0';
  47. for (p = buf; *p != '\0' && isspace((int)*p); ++p)
  48. ;
  49. if (*p == '\0' || *p == '#')
  50. continue;
  51. if ((ret = __config_parse(env, p, lc)) != 0)
  52. break;
  53. }
  54. (void)fclose(fp);
  55. return (ret);
  56. }
  57. #undef CONFIG_GET_INT
  58. #define CONFIG_GET_INT(s, vp) do { \
  59. int __ret; \
  60. if ((__ret = \
  61. __db_getlong(env->dbenv, NULL, s, 0, INT_MAX, vp)) != 0) \
  62. return (__ret); \
  63. } while (0)
  64. #undef CONFIG_GET_LONG
  65. #define CONFIG_GET_LONG(s, vp) do { \
  66. int __ret; \
  67. if ((__ret = \
  68. __db_getlong(env->dbenv, NULL, s, 0, LONG_MAX, vp)) != 0) \
  69. return (__ret); \
  70. } while (0)
  71. #undef CONFIG_INT
  72. #define CONFIG_INT(s, f) do { \
  73. if (strcasecmp(s, argv[0]) == 0) { \
  74. long __v; \
  75. if (nf != 2) \
  76. goto format; \
  77. CONFIG_GET_INT(argv[1], &__v); \
  78. return (f(env->dbenv, (int)__v)); \
  79. } \
  80. } while (0)
  81. #undef CONFIG_GET_UINT32
  82. #define CONFIG_GET_UINT32(s, vp) do { \
  83. if (__db_getulong(env->dbenv, NULL, s, 0, UINT32_MAX, vp) != 0) \
  84. return (EINVAL); \
  85. } while (0)
  86. #undef CONFIG_UINT32
  87. #define CONFIG_UINT32(s, f) do { \
  88. if (strcasecmp(s, argv[0]) == 0) { \
  89. u_long __v; \
  90. if (nf != 2) \
  91. goto format; \
  92. CONFIG_GET_UINT32(argv[1], &__v); \
  93. return (f(env->dbenv, (u_int32_t)__v)); \
  94. } \
  95. } while (0)
  96. #undef CONFIG_SLOTS
  97. #define CONFIG_SLOTS 10
  98. /*
  99. * __config_parse --
  100. * Parse a single NAME VALUE pair.
  101. */
  102. static int
  103. __config_parse(env, s, lc)
  104. ENV *env;
  105. char *s;
  106. int lc;
  107. {
  108. DB_ENV *dbenv;
  109. u_long uv1, uv2;
  110. u_int32_t flags;
  111. long lv1, lv2;
  112. int nf;
  113. char *argv[CONFIG_SLOTS];
  114. dbenv = env->dbenv;
  115. /* Split the line by white-space. */
  116. if ((nf = __config_split(s, argv)) < 2) {
  117. format: __db_errx(env,
  118. "line %d: %s: incorrect name-value pair", lc, argv[0]);
  119. return (EINVAL);
  120. }
  121. CONFIG_UINT32("mutex_set_align", __mutex_set_align);
  122. CONFIG_UINT32("mutex_set_increment", __mutex_set_increment);
  123. CONFIG_UINT32("mutex_set_max", __mutex_set_max);
  124. CONFIG_UINT32("mutex_set_tas_spins", __mutex_set_tas_spins);
  125. if (strcasecmp(argv[0], "rep_set_clockskew") == 0) {
  126. if (nf != 3)
  127. goto format;
  128. CONFIG_GET_UINT32(argv[1], &uv1);
  129. CONFIG_GET_UINT32(argv[2], &uv2);
  130. return (__rep_set_clockskew(
  131. dbenv, (u_int32_t)uv1, (u_int32_t)uv2));
  132. }
  133. if (strcasecmp(argv[0], "rep_set_config") == 0) {
  134. if (nf != 2)
  135. goto format;
  136. if (strcasecmp(argv[1], "db_rep_conf_bulk") == 0)
  137. return (__rep_set_config(dbenv,
  138. DB_REP_CONF_BULK, 1));
  139. if (strcasecmp(argv[1], "db_rep_conf_delayclient") == 0)
  140. return (__rep_set_config(dbenv,
  141. DB_REP_CONF_DELAYCLIENT, 1));
  142. if (strcasecmp(argv[1], "db_rep_conf_lease") == 0)
  143. return (__rep_set_config(dbenv,
  144. DB_REP_CONF_LEASE, 1));
  145. if (strcasecmp(argv[1], "db_rep_conf_noautoinit") == 0)
  146. return (__rep_set_config(dbenv,
  147. DB_REP_CONF_NOAUTOINIT, 1));
  148. if (strcasecmp(argv[1], "db_rep_conf_nowait") == 0)
  149. return (__rep_set_config(dbenv, DB_REP_CONF_NOWAIT, 1));
  150. if (strcasecmp(argv[1], "db_repmgr_conf_2site_strict") == 0)
  151. return (__rep_set_config(dbenv,
  152. DB_REPMGR_CONF_2SITE_STRICT, 1));
  153. goto format;
  154. }
  155. if (strcasecmp(argv[0], "rep_set_limit") == 0) {
  156. if (nf != 3)
  157. goto format;
  158. CONFIG_GET_UINT32(argv[1], &uv1);
  159. CONFIG_GET_UINT32(argv[2], &uv2);
  160. return (__rep_set_limit(
  161. dbenv, (u_int32_t)uv1, (u_int32_t)uv2));
  162. }
  163. if (strcasecmp(argv[0], "rep_set_nsites") == 0) {
  164. if (nf != 2)
  165. goto format;
  166. CONFIG_GET_UINT32(argv[1], &uv1);
  167. return (__rep_set_nsites(
  168. dbenv, (u_int32_t)uv1));
  169. }
  170. if (strcasecmp(argv[0], "rep_set_priority") == 0) {
  171. if (nf != 2)
  172. goto format;
  173. CONFIG_GET_UINT32(argv[1], &uv1);
  174. return (__rep_set_priority(
  175. dbenv, (u_int32_t)uv1));
  176. }
  177. if (strcasecmp(argv[0], "rep_set_request") == 0) {
  178. if (nf != 3)
  179. goto format;
  180. CONFIG_GET_UINT32(argv[1], &uv1);
  181. CONFIG_GET_UINT32(argv[2], &uv2);
  182. return (__rep_set_request(
  183. dbenv, (u_int32_t)uv1, (u_int32_t)uv2));
  184. }
  185. if (strcasecmp(argv[0], "rep_set_timeout") == 0) {
  186. if (nf != 3)
  187. goto format;
  188. CONFIG_GET_UINT32(argv[2], &uv2);
  189. if (strcasecmp(argv[1], "db_rep_ack_timeout") == 0)
  190. return (__rep_set_timeout(
  191. dbenv, DB_REP_ACK_TIMEOUT, (u_int32_t)uv2));
  192. if (strcasecmp(argv[1], "db_rep_checkpoint_delay") == 0)
  193. return (__rep_set_timeout(
  194. dbenv, DB_REP_CHECKPOINT_DELAY, (u_int32_t)uv2));
  195. if (strcasecmp(argv[1], "db_rep_connection_retry") == 0)
  196. return (__rep_set_timeout(
  197. dbenv, DB_REP_CONNECTION_RETRY, (u_int32_t)uv2));
  198. if (strcasecmp(argv[1], "db_rep_election_timeout") == 0)
  199. return (__rep_set_timeout(
  200. dbenv, DB_REP_ELECTION_TIMEOUT, (u_int32_t)uv2));
  201. if (strcasecmp(argv[1], "db_rep_election_retry") == 0)
  202. return (__rep_set_timeout(
  203. dbenv, DB_REP_ELECTION_RETRY, (u_int32_t)uv2));
  204. if (strcasecmp(argv[1], "db_rep_full_election_timeout") == 0)
  205. return (__rep_set_timeout(dbenv,
  206. DB_REP_FULL_ELECTION_TIMEOUT, (u_int32_t)uv2));
  207. if (strcasecmp(argv[1], "db_rep_heartbeat_monitor") == 0)
  208. return (__rep_set_timeout(
  209. dbenv, DB_REP_HEARTBEAT_MONITOR, (u_int32_t)uv2));
  210. if (strcasecmp(argv[1], "db_rep_heartbeat_send") == 0)
  211. return (__rep_set_timeout(
  212. dbenv, DB_REP_HEARTBEAT_SEND, (u_int32_t)uv2));
  213. if (strcasecmp(argv[1], "db_rep_lease_timeout") == 0)
  214. return (__rep_set_timeout(
  215. dbenv, DB_REP_LEASE_TIMEOUT, (u_int32_t)uv2));
  216. goto format;
  217. }
  218. if (strcasecmp(argv[0], "repmgr_set_ack_policy") == 0) {
  219. if (nf != 2)
  220. goto format;
  221. if (strcasecmp(argv[1], "db_repmgr_acks_all") == 0)
  222. return (__repmgr_set_ack_policy(
  223. dbenv, DB_REPMGR_ACKS_ALL));
  224. if (strcasecmp(argv[1], "db_repmgr_acks_all_peers") == 0)
  225. return (__repmgr_set_ack_policy(
  226. dbenv, DB_REPMGR_ACKS_ALL_PEERS));
  227. if (strcasecmp(argv[1], "db_repmgr_acks_none") == 0)
  228. return (__repmgr_set_ack_policy(
  229. dbenv, DB_REPMGR_ACKS_NONE));
  230. if (strcasecmp(argv[1], "db_repmgr_acks_one") == 0)
  231. return (__repmgr_set_ack_policy(
  232. dbenv, DB_REPMGR_ACKS_ONE));
  233. if (strcasecmp(argv[1], "db_repmgr_acks_one_peer") == 0)
  234. return (__repmgr_set_ack_policy(
  235. dbenv, DB_REPMGR_ACKS_ONE_PEER));
  236. if (strcasecmp(argv[1], "db_repmgr_acks_quorum") == 0)
  237. return (__repmgr_set_ack_policy(
  238. dbenv, DB_REPMGR_ACKS_QUORUM));
  239. goto format;
  240. }
  241. if (strcasecmp(argv[0], "set_cachesize") == 0) {
  242. if (nf != 4)
  243. goto format;
  244. CONFIG_GET_UINT32(argv[1], &uv1);
  245. CONFIG_GET_UINT32(argv[2], &uv2);
  246. CONFIG_GET_INT(argv[3], &lv1);
  247. return (__memp_set_cachesize(
  248. dbenv, (u_int32_t)uv1, (u_int32_t)uv2, (int)lv1));
  249. }
  250. if (strcasecmp(argv[0], "set_data_dir") == 0 ||
  251. strcasecmp(argv[0], "db_data_dir") == 0) { /* Compatibility. */
  252. if (nf != 2)
  253. goto format;
  254. return (__env_set_data_dir(dbenv, argv[1]));
  255. }
  256. if (strcasecmp(argv[0], "add_data_dir") == 0) {
  257. if (nf != 2)
  258. goto format;
  259. return (__env_add_data_dir(dbenv, argv[1]));
  260. }
  261. if (strcasecmp(argv[0], "set_create_dir") == 0) {
  262. if (nf != 2)
  263. goto format;
  264. return (__env_set_create_dir(dbenv, argv[1]));
  265. }
  266. /* Compatibility */
  267. if (strcasecmp(argv[0], "set_intermediate_dir") == 0) {
  268. if (nf != 2)
  269. goto format;
  270. CONFIG_GET_INT(argv[1], &lv1);
  271. if (lv1 <= 0)
  272. goto format;
  273. env->dir_mode = (int)lv1;
  274. return (0);
  275. }
  276. if (strcasecmp(argv[0], "set_intermediate_dir_mode") == 0) {
  277. if (nf != 2)
  278. goto format;
  279. return (__env_set_intermediate_dir_mode(dbenv, argv[1]));
  280. }
  281. if (strcasecmp(argv[0], "set_flags") == 0) {
  282. if (nf != 2)
  283. goto format;
  284. if (strcasecmp(argv[1], "db_auto_commit") == 0)
  285. return (__env_set_flags(dbenv, DB_AUTO_COMMIT, 1));
  286. if (strcasecmp(argv[1], "db_cdb_alldb") == 0)
  287. return (__env_set_flags(dbenv, DB_CDB_ALLDB, 1));
  288. if (strcasecmp(argv[1], "db_direct_db") == 0)
  289. return (__env_set_flags(dbenv, DB_DIRECT_DB, 1));
  290. if (strcasecmp(argv[1], "db_dsync_db") == 0)
  291. return (__env_set_flags(dbenv, DB_DSYNC_DB, 1));
  292. if (strcasecmp(argv[1], "db_multiversion") == 0)
  293. return (__env_set_flags(dbenv, DB_MULTIVERSION, 1));
  294. if (strcasecmp(argv[1], "db_nolocking") == 0)
  295. return (__env_set_flags(dbenv, DB_NOLOCKING, 1));
  296. if (strcasecmp(argv[1], "db_nommap") == 0)
  297. return (__env_set_flags(dbenv, DB_NOMMAP, 1));
  298. if (strcasecmp(argv[1], "db_nopanic") == 0)
  299. return (__env_set_flags(dbenv, DB_NOPANIC, 1));
  300. if (strcasecmp(argv[1], "db_overwrite") == 0)
  301. return (__env_set_flags(dbenv, DB_OVERWRITE, 1));
  302. if (strcasecmp(argv[1], "db_region_init") == 0)
  303. return (__env_set_flags(dbenv, DB_REGION_INIT, 1));
  304. if (strcasecmp(argv[1], "db_txn_nosync") == 0)
  305. return (__env_set_flags(dbenv, DB_TXN_NOSYNC, 1));
  306. if (strcasecmp(argv[1], "db_txn_nowait") == 0)
  307. return (__env_set_flags(dbenv, DB_TXN_NOWAIT, 1));
  308. if (strcasecmp(argv[1], "db_txn_snapshot") == 0)
  309. return (__env_set_flags(dbenv, DB_TXN_SNAPSHOT, 1));
  310. if (strcasecmp(argv[1], "db_txn_write_nosync") == 0)
  311. return (
  312. __env_set_flags(dbenv, DB_TXN_WRITE_NOSYNC, 1));
  313. if (strcasecmp(argv[1], "db_yieldcpu") == 0)
  314. return (__env_set_flags(dbenv, DB_YIELDCPU, 1));
  315. if (strcasecmp(argv[1], "db_log_inmemory") == 0)
  316. return (__log_set_config(dbenv, DB_LOG_IN_MEMORY, 1));
  317. if (strcasecmp(argv[1], "db_direct_log") == 0)
  318. return (__log_set_config(dbenv, DB_LOG_DIRECT, 1));
  319. if (strcasecmp(argv[1], "db_dsync_log") == 0)
  320. return (__log_set_config(dbenv, DB_LOG_DSYNC, 1));
  321. if (strcasecmp(argv[1], "db_log_autoremove") == 0)
  322. return (__log_set_config(dbenv, DB_LOG_AUTO_REMOVE, 1));
  323. goto format;
  324. }
  325. if (strcasecmp(argv[0], "set_log_config") == 0) {
  326. if (nf != 2)
  327. goto format;
  328. if (strcasecmp(argv[1], "db_log_auto_remove") == 0)
  329. return (__log_set_config(dbenv, DB_LOG_AUTO_REMOVE, 1));
  330. if (strcasecmp(argv[1], "db_log_direct") == 0)
  331. return (__log_set_config(dbenv, DB_LOG_DIRECT, 1));
  332. if (strcasecmp(argv[1], "db_log_dsync") == 0)
  333. return (__log_set_config(dbenv, DB_LOG_DSYNC, 1));
  334. if (strcasecmp(argv[1], "db_log_in_memory") == 0)
  335. return (__log_set_config(dbenv, DB_LOG_IN_MEMORY, 1));
  336. if (strcasecmp(argv[1], "db_log_zero") == 0)
  337. return (__log_set_config(dbenv, DB_LOG_ZERO, 1));
  338. goto format;
  339. }
  340. CONFIG_UINT32("set_lg_bsize", __log_set_lg_bsize);
  341. CONFIG_INT("set_lg_filemode", __log_set_lg_filemode);
  342. CONFIG_UINT32("set_lg_max", __log_set_lg_max);
  343. CONFIG_UINT32("set_lg_regionmax", __log_set_lg_regionmax);
  344. if (strcasecmp(argv[0], "set_lg_dir") == 0 ||
  345. strcasecmp(argv[0], "db_log_dir") == 0) { /* Compatibility. */
  346. if (nf != 2)
  347. goto format;
  348. return (__log_set_lg_dir(dbenv, argv[1]));
  349. }
  350. if (strcasecmp(argv[0], "set_lk_detect") == 0) {
  351. if (nf != 2)
  352. goto format;
  353. if (strcasecmp(argv[1], "db_lock_default") == 0)
  354. flags = DB_LOCK_DEFAULT;
  355. else if (strcasecmp(argv[1], "db_lock_expire") == 0)
  356. flags = DB_LOCK_EXPIRE;
  357. else if (strcasecmp(argv[1], "db_lock_maxlocks") == 0)
  358. flags = DB_LOCK_MAXLOCKS;
  359. else if (strcasecmp(argv[1], "db_lock_maxwrite") == 0)
  360. flags = DB_LOCK_MAXWRITE;
  361. else if (strcasecmp(argv[1], "db_lock_minlocks") == 0)
  362. flags = DB_LOCK_MINLOCKS;
  363. else if (strcasecmp(argv[1], "db_lock_minwrite") == 0)
  364. flags = DB_LOCK_MINWRITE;
  365. else if (strcasecmp(argv[1], "db_lock_oldest") == 0)
  366. flags = DB_LOCK_OLDEST;
  367. else if (strcasecmp(argv[1], "db_lock_random") == 0)
  368. flags = DB_LOCK_RANDOM;
  369. else if (strcasecmp(argv[1], "db_lock_youngest") == 0)
  370. flags = DB_LOCK_YOUNGEST;
  371. else
  372. goto format;
  373. return (__lock_set_lk_detect(dbenv, flags));
  374. }
  375. CONFIG_UINT32("set_lk_max_locks", __lock_set_lk_max_locks);
  376. CONFIG_UINT32("set_lk_max_lockers", __lock_set_lk_max_lockers);
  377. CONFIG_UINT32("set_lk_max_objects", __lock_set_lk_max_objects);
  378. CONFIG_UINT32("set_lk_partitions", __lock_set_lk_partitions);
  379. if (strcasecmp(argv[0], "set_lock_timeout") == 0) {
  380. if (nf != 2)
  381. goto format;
  382. CONFIG_GET_UINT32(argv[1], &uv1);
  383. return (__lock_set_env_timeout(
  384. dbenv, (u_int32_t)uv1, DB_SET_LOCK_TIMEOUT));
  385. }
  386. CONFIG_INT("set_mp_max_openfd", __memp_set_mp_max_openfd);
  387. if (strcasecmp(argv[0], "set_mp_max_write") == 0) {
  388. if (nf != 3)
  389. goto format;
  390. CONFIG_GET_INT(argv[1], &lv1);
  391. CONFIG_GET_INT(argv[2], &lv2);
  392. return (__memp_set_mp_max_write(
  393. dbenv, (int)lv1, (db_timeout_t)lv2));
  394. }
  395. CONFIG_UINT32("set_mp_mmapsize", __memp_set_mp_mmapsize);
  396. if (strcasecmp(argv[0], "set_region_init") == 0) {
  397. if (nf != 2)
  398. goto format;
  399. CONFIG_GET_INT(argv[1], &lv1);
  400. if (lv1 != 0 && lv1 != 1)
  401. goto format;
  402. return (__env_set_flags(
  403. dbenv, DB_REGION_INIT, lv1 == 0 ? 0 : 1));
  404. }
  405. if (strcasecmp(argv[0], "set_reg_timeout") == 0) {
  406. if (nf != 2)
  407. goto format;
  408. CONFIG_GET_UINT32(argv[1], &uv1);
  409. return (__env_set_timeout(
  410. dbenv, (u_int32_t)uv1, DB_SET_REG_TIMEOUT));
  411. }
  412. if (strcasecmp(argv[0], "set_shm_key") == 0) {
  413. if (nf != 2)
  414. goto format;
  415. CONFIG_GET_LONG(argv[1], &lv1);
  416. return (__env_set_shm_key(dbenv, lv1));
  417. }
  418. /*
  419. * The set_tas_spins method has been replaced by mutex_set_tas_spins.
  420. * The set_tas_spins argv[0] remains for DB_CONFIG compatibility.
  421. */
  422. CONFIG_UINT32("set_tas_spins", __mutex_set_tas_spins);
  423. if (strcasecmp(argv[0], "set_tmp_dir") == 0 ||
  424. strcasecmp(argv[0], "db_tmp_dir") == 0) { /* Compatibility.*/
  425. if (nf != 2)
  426. goto format;
  427. return (__env_set_tmp_dir(dbenv, argv[1]));
  428. }
  429. CONFIG_UINT32("set_thread_count", __env_set_thread_count);
  430. CONFIG_UINT32("set_tx_max", __txn_set_tx_max);
  431. if (strcasecmp(argv[0], "set_txn_timeout") == 0) {
  432. if (nf != 2)
  433. goto format;
  434. CONFIG_GET_UINT32(argv[1], &uv1);
  435. return (__lock_set_env_timeout(
  436. dbenv, (u_int32_t)uv1, DB_SET_TXN_TIMEOUT));
  437. }
  438. if (strcasecmp(argv[0], "set_verbose") == 0) {
  439. if (nf != 2)
  440. goto format;
  441. if (strcasecmp(argv[1], "db_verb_deadlock") == 0)
  442. flags = DB_VERB_DEADLOCK;
  443. else if (strcasecmp(argv[1], "db_verb_fileops") == 0)
  444. flags = DB_VERB_FILEOPS;
  445. else if (strcasecmp(argv[1], "db_verb_fileops_all") == 0)
  446. flags = DB_VERB_FILEOPS_ALL;
  447. else if (strcasecmp(argv[1], "db_verb_recovery") == 0)
  448. flags = DB_VERB_RECOVERY;
  449. else if (strcasecmp(argv[1], "db_verb_register") == 0)
  450. flags = DB_VERB_REGISTER;
  451. else if (strcasecmp(argv[1], "db_verb_replication") == 0)
  452. flags = DB_VERB_REPLICATION;
  453. else if (strcasecmp(argv[1], "db_verb_rep_elect") == 0)
  454. flags = DB_VERB_REP_ELECT;
  455. else if (strcasecmp(argv[1], "db_verb_rep_lease") == 0)
  456. flags = DB_VERB_REP_LEASE;
  457. else if (strcasecmp(argv[1], "db_verb_rep_misc") == 0)
  458. flags = DB_VERB_REP_MISC;
  459. else if (strcasecmp(argv[1], "db_verb_rep_msgs") == 0)
  460. flags = DB_VERB_REP_MSGS;
  461. else if (strcasecmp(argv[1], "db_verb_rep_sync") == 0)
  462. flags = DB_VERB_REP_SYNC;
  463. else if (strcasecmp(argv[1], "db_verb_rep_test") == 0)
  464. flags = DB_VERB_REP_TEST;
  465. else if (strcasecmp(argv[1], "db_verb_repmgr_connfail") == 0)
  466. flags = DB_VERB_REPMGR_CONNFAIL;
  467. else if (strcasecmp(argv[1], "db_verb_repmgr_misc") == 0)
  468. flags = DB_VERB_REPMGR_MISC;
  469. else if (strcasecmp(argv[1], "db_verb_waitsfor") == 0)
  470. flags = DB_VERB_WAITSFOR;
  471. else
  472. goto format;
  473. return (__env_set_verbose(dbenv, flags, 1));
  474. }
  475. __db_errx(env, "unrecognized name-value pair: %s", s);
  476. return (EINVAL);
  477. }
  478. /*
  479. * __config_split --
  480. * Split lines into white-space separated fields, returning the count of
  481. * fields.
  482. *
  483. * PUBLIC: int __config_split __P((char *, char *[]));
  484. */
  485. int
  486. __config_split(input, argv)
  487. char *input, *argv[CONFIG_SLOTS];
  488. {
  489. int count;
  490. char **ap;
  491. for (count = 0, ap = argv; (*ap = strsep(&input, " \t\n")) != NULL;)
  492. if (**ap != '\0') {
  493. ++count;
  494. if (++ap == &argv[CONFIG_SLOTS - 1]) {
  495. *ap = NULL;
  496. break;
  497. }
  498. }
  499. return (count);
  500. }