aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277>2003-12-31 23:10:44 +0000
committerbug1 <bug1@69ca8d6d-28ef-0310-b511-8ec308f3f277>2003-12-31 23:10:44 +0000
commit0039d70bf34d766b6eecd27e38f205a0d300598b (patch)
tree417552339486b47bfdb4bca24b526d24078060fb
parent7c315a2526c779275cdc6bea410587476f166ff6 (diff)
downloadbusybox-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.c16
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);