Batch from Bastian Blank to fix debian bug #216435;
authorGlenn L McGrath <bug1@ihug.co.nz>
Wed, 31 Dec 2003 23:10:44 +0000 (23:10 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Wed, 31 Dec 2003 23:10:44 +0000 (23:10 -0000)
When linking a non existing file busybox ln will report the target
missind and not the source:

coreutils/ln.c

index 5217634f7354d5915f13478862e9a75c66291613..0640c666611e9a6d5d475643717864a5cac3ad9d 100644 (file)
@@ -43,7 +43,8 @@ extern int ln_main(int argc, char **argv)
        int flag;
        char *last;
        char *src_name;
-       const char *src;
+       char *src;
+       struct stat statbuf;
        int (*link_func)(const char *, const char *);
 
        flag = bb_getopt_ulflags(argc, argv, "sfn");
@@ -61,7 +62,7 @@ extern int ln_main(int argc, char **argv)
        }
 
        do {
-               src_name = 0;
+               src_name = NULL;
                src = last;
 
                if (is_directory(src,
@@ -70,7 +71,14 @@ extern int ln_main(int argc, char **argv)
                        src_name = bb_xstrdup(*argv);
                        src = concat_path_file(src, bb_get_last_path_component(src_name));
                        free(src_name);
-                       src_name = (char *)src;
+                       src_name = src;
+               }
+
+               if (stat(*argv, &statbuf)) {
+                       bb_perror_msg(*argv);
+                       status = EXIT_FAILURE;
+                       free(src_name);
+                       continue;
                }
 
                if (flag & LN_FORCE) {
@@ -84,7 +92,7 @@ extern int ln_main(int argc, char **argv)
                
                if (link_func(*argv, src) != 0) {
                        bb_perror_msg(src);
-                       status = EXIT_FAILURE;;
+                       status = EXIT_FAILURE;
                }
 
                free(src_name);