#define BDB_MAX_ADD_LOOP 30
#ifdef BDB_SUBDIRS
-#define BDB_TMP_SUBDIR LDAP_DIRSEP "tmp"
-#define BDB_LG_SUBDIR LDAP_DIRSEP "log"
-#define BDB_DATA_SUBDIR LDAP_DIRSEP "data"
+#define BDB_TMP_SUBDIR "tmp"
+#define BDB_LG_SUBDIR "log"
+#define BDB_DATA_SUBDIR "data"
#endif
#define BDB_SUFFIX ".bdb"
#ifdef BDB_SUBDIRS
{
- char dir[MAXPATHLEN];
- size_t len = strlen( bdb->bi_dbenv_home );
-
- strcpy( dir, bdb->bi_dbenv_home );
- strcat( &dir[len], BDB_TMP_SUBDIR );
+ char dir[MAXPATHLEN], *ptr;
+ if (bdb->bi_dbenv_home[0] == '.') {
+ /* If home is a relative path, relative subdirs
+ * are just concat'd by BDB. We don't want the
+ * path to be concat'd twice, e.g.
+ * ./test-db/./test-db/tmp
+ */
+ ptr = dir;
+ } else {
+ ptr = lutil_strcopy( dir, bdb->bi_dbenv_home );
+ *ptr++ = LDAP_DIRSEP[0];
+#ifdef HAVE_EBCDIC
+ __atoe( dir );
+#endif
+ }
+
+ strcpy( ptr, BDB_TMP_SUBDIR );
+#ifdef HAVE_EBCDIC
+ __atoe( ptr );
+#endif
rc = bdb->bi_dbenv->set_tmp_dir( bdb->bi_dbenv, dir );
if( rc != 0 ) {
#ifdef NEW_LOGGING
return rc;
}
- strcat( &dir[len], BDB_LG_SUBDIR );
-
+ strcpy( ptr, BDB_LG_SUBDIR );
+#ifdef HAVE_EBCDIC
+ __atoe( ptr );
+#endif
rc = bdb->bi_dbenv->set_lg_dir( bdb->bi_dbenv, dir );
if( rc != 0 ) {
#ifdef NEW_LOGGING
return rc;
}
- strcat( &dir[len], BDB_DATA_SUBDIR );
-
+ strcpy( ptr, BDB_DATA_SUBDIR );
+#ifdef HAVE_EBCDIC
+ __atoe( ptr );
+#endif
rc = bdb->bi_dbenv->set_data_dir( bdb->bi_dbenv, dir );
if( rc != 0 ) {
#ifdef NEW_LOGGING