浏览代码

Call realpath after creating the dir. At least on linux the call to realpath

may fail if the last path component doesn't exist.
master
Richard Nyberg 19 年前
父节点
当前提交
eef8a3a837
共有 1 个文件被更改,包括 8 次插入9 次删除
  1. +8
    -9
      cli/btcli.c

+ 8
- 9
cli/btcli.c 查看文件

@@ -131,7 +131,7 @@ void
cmd_add(int argc, char **argv) cmd_add(int argc, char **argv)
{ {
int ch, topdir = 0; int ch, topdir = 0;
char *dir = NULL, bdir[PATH_MAX];
char *dir = NULL;


while ((ch = getopt_long(argc, argv, "d:", add_opts, NULL)) != -1) { while ((ch = getopt_long(argc, argv, "d:", add_opts, NULL)) != -1) {
switch (ch) { switch (ch) {
@@ -151,14 +151,10 @@ cmd_add(int argc, char **argv)
if (argc < 1 || (topdir == 1 && dir == NULL) || (dir != NULL && argc > 1)) if (argc < 1 || (topdir == 1 && dir == NULL) || (dir != NULL && argc > 1))
usage_add(); usage_add();


if (dir != NULL)
if (realpath(dir, bdir) == NULL)
err(1, "path error on %s", bdir);

btpd_connect(); btpd_connect();
for (int i = 0; i < argc; i++) { for (int i = 0; i < argc; i++) {
struct metainfo *mi; 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) { if ((errno = load_metainfo(argv[i], -1, 0, &mi)) != 0) {
warn("error loading torrent %s", argv[i]); warn("error loading torrent %s", argv[i]);
@@ -168,9 +164,9 @@ cmd_add(int argc, char **argv)
if ((topdir && if ((topdir &&
!(mi->nfiles == 1 !(mi->nfiles == 1
&& strcmp(mi->name, mi->files[0].path) == 0))) && 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) else if (dir != NULL)
strncpy(dpath, bdir, PATH_MAX);
strncpy(dpath, dir, PATH_MAX);
else { else {
if (content_link(mi->info_hash, dpath) != 0) { if (content_link(mi->info_hash, dpath) != 0) {
warnx("unknown content dir for %s", argv[i]); 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) if (mkdir(dpath, 0777) != 0 && errno != EEXIST)
err(1, "couldn't create directory %s", dpath); 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) if (realpath(argv[i], fpath) == NULL)
err(1, "path error on %s", fpath); 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); clear_metainfo(mi);
free(mi); free(mi);
} }


正在加载...
取消
保存