diff options
author | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2003-12-31 23:10:44 +0000 |
---|---|---|
committer | bug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2003-12-31 23:10:44 +0000 |
commit | 0039d70bf34d766b6eecd27e38f205a0d300598b (patch) | |
tree | 417552339486b47bfdb4bca24b526d24078060fb | |
parent | 7c315a2526c779275cdc6bea410587476f166ff6 (diff) | |
download | busybox-w32-0039d70bf34d766b6eecd27e38f205a0d300598b.tar.gz busybox-w32-0039d70bf34d766b6eecd27e38f205a0d300598b.tar.bz2 busybox-w32-0039d70bf34d766b6eecd27e38f205a0d300598b.zip |
Batch from Bastian Blank to fix debian bug #216435;
When linking a non existing file busybox ln will report the target
missind and not the source:
git-svn-id: svn://busybox.net/trunk/busybox@8206 69ca8d6d-28ef-0310-b511-8ec308f3f277
-rw-r--r-- | coreutils/ln.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/coreutils/ln.c b/coreutils/ln.c index 5217634f7..0640c6666 100644 --- a/coreutils/ln.c +++ b/coreutils/ln.c | |||
@@ -43,7 +43,8 @@ extern int ln_main(int argc, char **argv) | |||
43 | int flag; | 43 | int flag; |
44 | char *last; | 44 | char *last; |
45 | char *src_name; | 45 | char *src_name; |
46 | const char *src; | 46 | char *src; |
47 | struct stat statbuf; | ||
47 | int (*link_func)(const char *, const char *); | 48 | int (*link_func)(const char *, const char *); |
48 | 49 | ||
49 | flag = bb_getopt_ulflags(argc, argv, "sfn"); | 50 | flag = bb_getopt_ulflags(argc, argv, "sfn"); |
@@ -61,7 +62,7 @@ extern int ln_main(int argc, char **argv) | |||
61 | } | 62 | } |
62 | 63 | ||
63 | do { | 64 | do { |
64 | src_name = 0; | 65 | src_name = NULL; |
65 | src = last; | 66 | src = last; |
66 | 67 | ||
67 | if (is_directory(src, | 68 | if (is_directory(src, |
@@ -70,7 +71,14 @@ extern int ln_main(int argc, char **argv) | |||
70 | src_name = bb_xstrdup(*argv); | 71 | src_name = bb_xstrdup(*argv); |
71 | src = concat_path_file(src, bb_get_last_path_component(src_name)); | 72 | src = concat_path_file(src, bb_get_last_path_component(src_name)); |
72 | free(src_name); | 73 | free(src_name); |
73 | src_name = (char *)src; | 74 | src_name = src; |
75 | } | ||
76 | |||
77 | if (stat(*argv, &statbuf)) { | ||
78 | bb_perror_msg(*argv); | ||
79 | status = EXIT_FAILURE; | ||
80 | free(src_name); | ||
81 | continue; | ||
74 | } | 82 | } |
75 | 83 | ||
76 | if (flag & LN_FORCE) { | 84 | if (flag & LN_FORCE) { |
@@ -84,7 +92,7 @@ extern int ln_main(int argc, char **argv) | |||
84 | 92 | ||
85 | if (link_func(*argv, src) != 0) { | 93 | if (link_func(*argv, src) != 0) { |
86 | bb_perror_msg(src); | 94 | bb_perror_msg(src); |
87 | status = EXIT_FAILURE;; | 95 | status = EXIT_FAILURE; |
88 | } | 96 | } |
89 | 97 | ||
90 | free(src_name); | 98 | free(src_name); |