*
* Copyright (C) 1998 Andrew Tridgell
* Copyright (C) 2002 Martin Pool
- * Copyright (C) 2003-2007 Wayne Davison
+ * Copyright (C) 2003-2009 Wayne Davison
*
* 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
extern int read_only;
extern int list_only;
extern int preserve_perms;
+extern int preserve_executability;
#define RETURN_ERROR_IF(x,e) \
do { \
return unlink(fname);
}
-int do_symlink(const char *fname1, const char *fname2)
+#ifdef SUPPORT_LINKS
+int do_symlink(const char *lnk, const char *fname)
{
if (dry_run) return 0;
RETURN_ERROR_IF_RO_OR_LO;
- return symlink(fname1, fname2);
+ return symlink(lnk, fname);
}
+#endif
#ifdef HAVE_LINK
int do_link(const char *fname1, const char *fname2)
code = 1;
#endif
} else
- code = chmod(path, mode & CHMOD_BITS);
- if (code != 0 && preserve_perms)
- return code;
+ code = chmod(path, mode & CHMOD_BITS); /* DISCOURAGED FUNCTION */
+ if (code != 0 && (preserve_perms || preserve_executability))
+ return code;
return 0;
}
#endif
{
RETURN_ERROR_IF(dry_run, 0);
RETURN_ERROR_IF(read_only, EROFS);
+ perms |= S_IWUSR;
#if defined HAVE_SECURE_MKSTEMP && defined HAVE_FCHMOD && (!defined HAVE_OPEN64 || defined HAVE_MKSTEMP64)
{
return lseek(fd, offset, whence);
#endif
}
-
-char *d_name(struct dirent *di)
-{
-#ifdef HAVE_BROKEN_READDIR
- return (di->d_name - 2);
-#else
- return di->d_name;
-#endif
-}