Magellan Linux

Diff of /trunk/mkinitrd-magellan/busybox/coreutils/ln.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 983 by niro, Fri Apr 24 18:33:46 2009 UTC revision 984 by niro, Sun May 30 11:32:42 2010 UTC
# Line 26  int ln_main(int argc, char **argv) MAIN_ Line 26  int ln_main(int argc, char **argv) MAIN_
26  int ln_main(int argc, char **argv)  int ln_main(int argc, char **argv)
27  {  {
28   int status = EXIT_SUCCESS;   int status = EXIT_SUCCESS;
29   int flag;   int opts;
30   char *last;   char *last;
31   char *src_name;   char *src_name;
32   char *src;   char *src;
# Line 34  int ln_main(int argc, char **argv) Line 34  int ln_main(int argc, char **argv)
34   struct stat statbuf;   struct stat statbuf;
35   int (*link_func)(const char *, const char *);   int (*link_func)(const char *, const char *);
36    
37   flag = getopt32(argv, "sfnbS:", &suffix);   opt_complementary = "-1"; /* min one arg */
38     opts = getopt32(argv, "sfnbS:", &suffix);
  if (argc == optind) {  
  bb_show_usage();  
  }  
39    
40   last = argv[argc - 1];   last = argv[argc - 1];
41   argv += optind;   argv += optind;
# Line 53  int ln_main(int argc, char **argv) Line 50  int ln_main(int argc, char **argv)
50   src = last;   src = last;
51    
52   if (is_directory(src,   if (is_directory(src,
53                  (flag & LN_NODEREFERENCE) ^ LN_NODEREFERENCE,                  (opts & LN_NODEREFERENCE) ^ LN_NODEREFERENCE,
54                  NULL)                  NULL)
55   ) {   ) {
56   src_name = xstrdup(*argv);   src_name = xstrdup(*argv);
# Line 61  int ln_main(int argc, char **argv) Line 58  int ln_main(int argc, char **argv)
58   free(src_name);   free(src_name);
59   src_name = src;   src_name = src;
60   }   }
61   if (!(flag & LN_SYMLINK) && stat(*argv, &statbuf)) {   if (!(opts & LN_SYMLINK) && stat(*argv, &statbuf)) {
62   // coreutils: "ln dangling_symlink new_hardlink" works   // coreutils: "ln dangling_symlink new_hardlink" works
63   if (lstat(*argv, &statbuf) || !S_ISLNK(statbuf.st_mode)) {   if (lstat(*argv, &statbuf) || !S_ISLNK(statbuf.st_mode)) {
64   bb_simple_perror_msg(*argv);   bb_simple_perror_msg(*argv);
# Line 71  int ln_main(int argc, char **argv) Line 68  int ln_main(int argc, char **argv)
68   }   }
69   }   }
70    
71   if (flag & LN_BACKUP) {   if (opts & LN_BACKUP) {
72   char *backup;   char *backup;
73   backup = xasprintf("%s%s", src, suffix);   backup = xasprintf("%s%s", src, suffix);
74   if (rename(src, backup) < 0 && errno != ENOENT) {   if (rename(src, backup) < 0 && errno != ENOENT) {
# Line 87  int ln_main(int argc, char **argv) Line 84  int ln_main(int argc, char **argv)
84   * Therefore, always unlink().   * Therefore, always unlink().
85   */   */
86   unlink(src);   unlink(src);
87   } else if (flag & LN_FORCE) {   } else if (opts & LN_FORCE) {
88   unlink(src);   unlink(src);
89   }   }
90    
91   link_func = link;   link_func = link;
92   if (flag & LN_SYMLINK) {   if (opts & LN_SYMLINK) {
93   link_func = symlink;   link_func = symlink;
94   }   }
95    

Legend:
Removed from v.983  
changed lines
  Added in v.984