[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
coreutils rm fix for Solaris -- please review this one....
From: |
Paul Eggert |
Subject: |
coreutils rm fix for Solaris -- please review this one.... |
Date: |
Wed, 28 Jul 2004 08:00:16 -0700 |
User-agent: |
Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) |
CVS coreutils rm failed "make check" due to the following scenario
in tests/rm/inaccessible:
can't get the working directory initially;
...
chdir ("/foo/bar/abs1");
... opendir, readdir, remove all entries here; then: ...
chdir ("."); // because we couldn't get the working directory initially
rmdir ("/foo/bar/abs1");
...
Solaris doesn't let you remove the working directory, so rmdir fails.
The fix is to replace that chdir (".") with a chdir ("/"), so I
installed the following patch. However, I'd like other pairs of eyes
to verify this one, as I'm a bit leery of executing chdir ("/") in a
program that is removing everything in sight!
I thought of using chdir ("..") instead but worried it might fail too,
e.g., if two rm processes are running simultaneously -- perhaps I was
worrying too much?
2004-07-28 Paul Eggert <address@hidden>
* src/remove.c (remove_dir): If we can't save the state of the
working directory, pretend we started from "/", not ".".
This avoids a bug on hosts like Solaris that don't let you
remove the working directory.
Index: src/remove.c
===================================================================
RCS file: /home/eggert/coreutils/cu/src/remove.c,v
retrieving revision 1.113
retrieving revision 1.114
diff -p -u -r1.113 -r1.114
--- src/remove.c 20 Jun 2004 13:44:12 -0000 1.113
+++ src/remove.c 28 Jul 2004 14:50:06 -0000 1.114
@@ -1008,9 +1008,12 @@ remove_dir (Dirstack_state *ds, char con
(*cwd_state)->saved_errno = errno;
assert (errno != 0);
- /* Pretend we started from ".". That is fine as long as there
- is no requirement to return to the original working directory. */
- (*cwd_state)->saved_cwd.name = xstrdup (".");
+ /* Pretend we started from "/". That is fine as long as there
+ is no requirement to return to the original working directory.
+ Use "/", not ".", so that we chdir out of a non-root target
+ directory before attempting to remove it: some hosts don't let
+ you remove a working directory. */
+ (*cwd_state)->saved_cwd.name = xstrdup ("/");
}
else
(*cwd_state)->saved_errno = 0;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- coreutils rm fix for Solaris -- please review this one....,
Paul Eggert <=