aboutsummaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2003-12-31 23:10:44 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2003-12-31 23:10:44 +0000
commitcfc0ad4260149f5cdad59c79051c3779d42b2ff5 (patch)
tree417552339486b47bfdb4bca24b526d24078060fb /coreutils
parent7f48a959f53f72fdffb354bebaee1925618f53e6 (diff)
downloadbusybox-w32-cfc0ad4260149f5cdad59c79051c3779d42b2ff5.tar.gz
busybox-w32-cfc0ad4260149f5cdad59c79051c3779d42b2ff5.tar.bz2
busybox-w32-cfc0ad4260149f5cdad59c79051c3779d42b2ff5.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:
Diffstat (limited to 'coreutils')
-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);