about summary refs log tree commit diff
path: root/cli/btcli.c
diff options
context:
space:
mode:
authorRichard Nyberg <rnyberg@murmeldjur.se>2006-02-10 20:45:22 +0000
committerRichard Nyberg <rnyberg@murmeldjur.se>2006-02-10 20:45:22 +0000
commiteef8a3a83778fd89e5d6ab5067bd015653eebb6b (patch)
tree313465d6041b4515bae9e20f4a77699f0f9fddc2 /cli/btcli.c
parentc865aa9254ebe351d84d844f202984e4822c4030 (diff)
downloadbtpd-eef8a3a83778fd89e5d6ab5067bd015653eebb6b.tar.gz
btpd-eef8a3a83778fd89e5d6ab5067bd015653eebb6b.zip
Call realpath after creating the dir. At least on linux the call to realpath
may fail if the last path component doesn't exist.

Diffstat (limited to 'cli/btcli.c')
-rw-r--r--cli/btcli.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/cli/btcli.c b/cli/btcli.c
index 306df1c..bd66201 100644
--- a/cli/btcli.c
+++ b/cli/btcli.c
@@ -131,7 +131,7 @@ void
 cmd_add(int argc, char **argv)
 {
     int ch, topdir = 0;
-    char *dir = NULL, bdir[PATH_MAX];
+    char *dir = NULL;
 
     while ((ch = getopt_long(argc, argv, "d:", add_opts, NULL)) != -1) {
         switch (ch) {
@@ -151,14 +151,10 @@ cmd_add(int argc, char **argv)
     if (argc < 1 || (topdir == 1 && dir == NULL) || (dir != NULL && argc > 1))
         usage_add();
 
-    if (dir != NULL)
-        if (realpath(dir, bdir) == NULL)
-            err(1, "path error on %s", bdir);
-
     btpd_connect();
     for (int i = 0; i < argc; i++) {
         struct metainfo *mi;
-        char dpath[PATH_MAX], fpath[PATH_MAX];
+        char rdpath[PATH_MAX], dpath[PATH_MAX], fpath[PATH_MAX];
 
         if ((errno = load_metainfo(argv[i], -1, 0, &mi)) != 0) {
             warn("error loading torrent %s", argv[i]);
@@ -168,9 +164,9 @@ cmd_add(int argc, char **argv)
         if ((topdir &&
                 !(mi->nfiles == 1
                     && strcmp(mi->name, mi->files[0].path) == 0)))
-            snprintf(dpath, PATH_MAX, "%s/%s", bdir, mi->name);
+            snprintf(dpath, PATH_MAX, "%s/%s", dir, mi->name);
         else if (dir != NULL)
-            strncpy(dpath, bdir, PATH_MAX);
+            strncpy(dpath, dir, PATH_MAX);
         else {
             if (content_link(mi->info_hash, dpath) != 0) {
                 warnx("unknown content dir for %s", argv[i]);
@@ -181,10 +177,13 @@ cmd_add(int argc, char **argv)
         if (mkdir(dpath, 0777) != 0 && errno != EEXIST)
             err(1, "couldn't create directory %s", dpath);
 
+        if (realpath(dpath, rdpath) == NULL)
+            err(1, "path error on %s", dpath);
+
         if (realpath(argv[i], fpath) == NULL)
             err(1, "path error on %s", fpath);
 
-        handle_ipc_res(btpd_add(ipc, mi->info_hash, fpath, dpath), argv[i]);
+        handle_ipc_res(btpd_add(ipc, mi->info_hash, fpath, rdpath), argv[i]);
         clear_metainfo(mi);
         free(mi);
     }