aboutsummaryrefslogtreecommitdiffstats
path: root/guts/rename.c
diff options
context:
space:
mode:
Diffstat (limited to 'guts/rename.c')
-rw-r--r--guts/rename.c96
1 files changed, 0 insertions, 96 deletions
diff --git a/guts/rename.c b/guts/rename.c
deleted file mode 100644
index 8d4106b..0000000
--- a/guts/rename.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2008-2010 Wind River Systems; see
- * guts/COPYRIGHT for information.
- *
- * static int
- * wrap_rename(const char *oldpath, const char *newpath) {
- * int rc = -1;
- */
- pseudo_msg_t *msg;
- struct stat64 oldbuf, newbuf;
- int oldrc, newrc;
- int save_errno;
- int old_db_entry = 0;
-
- pseudo_debug(2, "rename: %s->%s\n",
- oldpath ? oldpath : "<nil>",
- newpath ? newpath : "<nil>");
-
- if (!oldpath || !newpath) {
- errno = EFAULT;
- return -1;
- }
-
- save_errno = errno;
-
- newrc = real___lxstat64(_STAT_VER, newpath, &newbuf);
- oldrc = real___lxstat64(_STAT_VER, oldpath, &oldbuf);
-
- errno = save_errno;
-
- /* newpath must be removed. */
- /* as with unlink, we have to mark that the file may get deleted */
- msg = pseudo_client_op(OP_MAY_UNLINK, 0, -1, -1, newpath, newrc ? NULL : &newbuf);
- if (msg && msg->result == RESULT_SUCCEED)
- old_db_entry = 1;
- rc = real_rename(oldpath, newpath);
- save_errno = errno;
- if (old_db_entry) {
- if (rc == -1) {
- /* since we failed, that wasn't really unlinked -- put
- * it back.
- */
- pseudo_client_op(OP_CANCEL_UNLINK, 0, -1, -1, newpath, &newbuf);
- } else {
- /* confirm that the file was removed */
- pseudo_client_op(OP_DID_UNLINK, 0, -1, -1, newpath, &newbuf);
- }
- }
- if (rc == -1) {
- /* and we're done. */
- errno = save_errno;
- return rc;
- }
- save_errno = errno;
- /* nothing to do for a "rename" of a link to itself */
- if (newrc != -1 && oldrc != -1 &&
- newbuf.st_dev == oldbuf.st_dev &&
- newbuf.st_ino == oldbuf.st_ino) {
- return rc;
- }
-
- /* rename(3) is not mv(1). rename(file, dir) fails; you must provide
- * the corrected path yourself. You can rename over a directory only
- * if the source is a directory. Symlinks are simply removed.
- *
- * If we got here, the real rename call succeeded. That means newpath
- * has been unlinked and oldpath has been linked to it.
- *
- * There are a ton of special cases to error check. I don't check
- * for any of them, because in every such case, the underlying rename
- * failed, and there is nothing to do.
- * The only tricky part is that, because we used to ignore symlinks,
- * we may have to rename or remove directory trees even though in
- * theory rename can never destroy a directory tree.
- */
- if (!old_db_entry) {
- /* create an entry under the old name, which will then be
- * renamed; this way, children would get renamed too, if there
- * were any.
- */
- if (newrc == 0) {
- if (newbuf.st_dev != oldbuf.st_dev) {
- oldbuf.st_dev = newbuf.st_dev;
- oldbuf.st_ino = newbuf.st_ino;
- }
- }
- pseudo_debug(1, "creating new '%s' [%llu] to rename\n",
- oldpath, (unsigned long long) oldbuf.st_ino);
- pseudo_client_op(OP_LINK, 0, -1, -1, oldpath, &oldbuf);
- }
- pseudo_client_op(OP_RENAME, 0, -1, -1, newpath, &oldbuf, oldpath);
-
- errno = save_errno;
-/* return rc;
- * }
- */