jfb2 writes in Bug 119:
[oweals/busybox.git] / coreutils / ln.c
index 5217634f7354d5915f13478862e9a75c66291613..885ba61dbd9c3febc70fbb51605135f8cd077042 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Mini ln implementation for busybox
  *
- * Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.org>
+ * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -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,13 @@ 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 (!(flag & LN_SYMLINK) && stat(*argv, &statbuf)) {
+                       bb_perror_msg(*argv);
+                       status = EXIT_FAILURE;
+                       free(src_name);
+                       continue;
                }
 
                if (flag & LN_FORCE) {
@@ -81,25 +88,15 @@ extern int ln_main(int argc, char **argv)
                if (flag & LN_SYMLINK) {
                        link_func = symlink;
                }
-               
+
                if (link_func(*argv, src) != 0) {
                        bb_perror_msg(src);
-                       status = EXIT_FAILURE;;
+                       status = EXIT_FAILURE;
                }
 
                free(src_name);
-               
+
        } while ((++argv)[1]);
 
        return status;
 }
-
-
-
-
-
-
-
-
-
-