From fa6b8f8c1ddb605319f116a5269310e75ab6fe4e Mon Sep 17 00:00:00 2001
From: Dmitry Simonenko <pmwkaa@gmail.com>
Date: Tue, 4 Feb 2014 17:35:58 +0400
Subject: [PATCH] gh-185: add slash separator for pathes that are relative from
 work_dir. closes #185.

---
 client/tarantar/main.c  | 36 +++++++++++++++++++++---------------
 client/tarantar/space.c |  2 ++
 2 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/client/tarantar/main.c b/client/tarantar/main.c
index 40b4fcdca3..92872474ac 100644
--- a/client/tarantar/main.c
+++ b/client/tarantar/main.c
@@ -139,31 +139,37 @@ int main(int argc, char *argv[])
 		return 1;
 	}
 
-	char cur_dir_snap[PATH_MAX], cur_dir_wal[PATH_MAX];
-	tss.snap_dir = cur_dir_snap;
-	tss.wal_dir  = cur_dir_wal;
+	char workdir[PATH_MAX];
+	char snapdir[PATH_MAX], waldir[PATH_MAX];
+
+	tss.snap_dir = snapdir;
+	tss.wal_dir = waldir;
+
+	if (tss.opts.cfg.work_dir != NULL)
+		snprintf(workdir, sizeof(workdir), "%s", tss.opts.cfg.work_dir);
+	else
+		getcwd(workdir, PATH_MAX);
 
-	if (tss.opts.cfg.work_dir != NULL) {
-		strncpy((char *)tss.snap_dir, tss.opts.cfg.work_dir, PATH_MAX);
-		strncpy((char *)tss.wal_dir, tss.opts.cfg.work_dir, PATH_MAX);
-	} else {
-		getcwd((char *)tss.snap_dir, PATH_MAX);
-		getcwd((char *)tss.wal_dir, PATH_MAX);
-	}
 	if (tss.opts.cfg.snap_dir != NULL) {
 		if (tss.opts.cfg.snap_dir[0] == '/')
 			tss.snap_dir = tss.opts.cfg.snap_dir;
-		else
-			strncat((char *)tss.snap_dir, tss.opts.cfg.snap_dir,
-				PATH_MAX);
+		else {
+			snprintf(snapdir, sizeof(snapdir), "%s/%s", workdir,
+			         tss.opts.cfg.snap_dir);
+		}
+	} else {
+		snprintf(snapdir, sizeof(snapdir), "%s", workdir);
 	}
 	if (tss.opts.cfg.wal_dir != NULL) {
 		if (tss.opts.cfg.wal_dir[0] == '/')
 			tss.wal_dir = tss.opts.cfg.wal_dir;
 		else
-			strncat((char *)tss.wal_dir, tss.opts.cfg.wal_dir,
-				PATH_MAX);
+			snprintf(waldir, sizeof(waldir), "%s/%s", workdir,
+			         tss.opts.cfg.wal_dir);
+	} else {
+		snprintf(waldir, sizeof(waldir), "%s", workdir);
 	}
+
 	/* create spaces */
 	rc = ts_space_init(&tss.s);
 	if (rc == -1) {
diff --git a/client/tarantar/space.c b/client/tarantar/space.c
index dc28d7c49b..522791dfaa 100644
--- a/client/tarantar/space.c
+++ b/client/tarantar/space.c
@@ -238,6 +238,8 @@ int ts_space_fillof(struct ts_spaces *s, int n, tarantool_cfg_space *cs)
 
 int ts_space_fill(struct ts_spaces *s, struct ts_options *opts)
 {
+	if (opts->cfg.space == NULL)
+		return 0;
 	int i = 0;
 	for (; opts->cfg.space[i]; i++) {
 		tarantool_cfg_space *cs = opts->cfg.space[i];
-- 
GitLab