char *rcurdir;
char *curdir;
+int force=0;
+
void
quit (
#if NeedVarargsPrototypes
}
if (symlen >= 0) {
- /* Link exists in new tree. Print message if it doesn't match. */
- if (!equivalent (basesymlen>=0 ? basesym : buf, symbuf))
- msg ("%s: %s", dp->d_name, symbuf);
- } else {
- if (symlink (basesymlen>=0 ? basesym : buf, dp->d_name) < 0)
+ if (!equivalent (basesymlen>=0 ? basesym : buf, symbuf)) {
+ if (force) {
+ unlink(dp->d_name);
+ if (symlink (basesymlen>=0 ? basesym : buf, dp->d_name) < 0)
mperror (dp->d_name);
+ } else {
+ /* Link exists in new tree. Print message if it doesn't match. */
+ msg ("%s: %s", dp->d_name, symbuf);
+ }
+ }
+ } else {
+ if (symlink (basesymlen>=0 ? basesym : buf, dp->d_name) < 0)
+ mperror (dp->d_name);
}
}
-
+
closedir (df);
return 0;
}
while (++av, --ac) {
if (strcmp(*av, "-silent") == 0)
silent = 1;
+ if (strcmp(*av, "-f") == 0)
+ force = 1;
else if (strcmp(*av, "-ignorelinks") == 0)
ignore_links = 1;
else if (strcmp(*av, "--") == 0) {
}
if (ac < 1 || ac > 2)
- quit (1, "usage: %s [-silent] [-ignorelinks] fromdir [todir]",
+ quit (1, "usage: %s [-f] [-silent] [-ignorelinks] fromdir [todir]",
prog_name);
fn = av[0];
tn = ".";
/* to directory */
- if (stat (tn, &ts) < 0)
+ if (stat (tn, &ts) < 0) {
+ if (force && (tn[0] != '.' || tn[1] != '\0') ) {
+ mkdir(tn, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );
+ }
+ else {
quiterr (1, tn);
#ifdef S_ISDIR
- if (!(S_ISDIR(ts.st_mode)))
+ if (!(S_ISDIR(ts.st_mode)))
#else
- if (!(ts.st_mode & S_IFDIR))
+ if (!(ts.st_mode & S_IFDIR))
#endif
- quit (2, "%s: Not a directory", tn);
+ quit (2, "%s: Not a directory", tn);
+ }
+ }
if (chdir (tn) < 0)
quiterr (1, tn);