aboutsummaryrefslogtreecommitdiff
path: root/gnu/libexec/uucp/libunix/rename.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/libexec/uucp/libunix/rename.c')
-rw-r--r--gnu/libexec/uucp/libunix/rename.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/gnu/libexec/uucp/libunix/rename.c b/gnu/libexec/uucp/libunix/rename.c
new file mode 100644
index 000000000000..0947ef5cfaeb
--- /dev/null
+++ b/gnu/libexec/uucp/libunix/rename.c
@@ -0,0 +1,27 @@
+/* rename.c
+ Rename a file to a new name (Unix specific implementation). */
+
+#include "uucp.h"
+
+#include "sysdep.h"
+
+#include <errno.h>
+
+/* This implementation will not work on directories, but fortunately
+ we never want to rename directories. */
+
+int
+rename (zfrom, zto)
+ const char *zfrom;
+ const char *zto;
+{
+ if (link (zfrom, zto) < 0)
+ {
+ if (errno != EEXIST)
+ return -1;
+ if (unlink (zto) < 0
+ || link (zfrom, zto) < 0)
+ return -1;
+ }
+ return unlink (zfrom);
+}