correction: hard links are not allowed on directory's, ...
that being said, comparing inodes seems the best solution
only, don't give an error but copy once
maybe if I have time this weekend I'll try code that behaviour
Anyway, it has worked like that since years, and I guess nobody has had
a problem with it before. I don't think it should be changed just
because some bored guy playing with it noticed strange output ;-p
Regards,
Tom
Richard Toohey wrote:
On 19/10/2007, at 8:12 PM, Raimo Niskanen wrote:
On Thu, Oct 18, 2007 at 10:06:42PM +1300, Richard Toohey wrote:
JUST FOR FUN I have tried to "fix" this. What I know about C code
can be written on the back of a postage stamp
Did I mention the SIZE of the postage stamp? It's rather small ... 8-)
I am afraid solving the general case is harder.
The path length limit actually works as a crude, cheep and effective
cycle detection.
While Windows Finder solves the simple case of copying into
yourself, I do not think it has solved the general case.
Anyone curious to try?
Runs screaming into the night ... A lot more man reading for me, first!
--
/ Raimo Niskanen, Erlang/OTP, Ericsson AB
I might try a Linux install (got some Slackware 12.0 CDs) and look at
what it does (and its source code) - sure someone will beat me to it.
Looks like OpenBSD, FreeBSD, and Mac OS X BSD bits have the same
sort of outcome.
I got this from Tom Van Looy (thanks, Tom):
Copy foo to foo only once and quit, I think that's the correct
behaviour. I even think that posix more or less describes that.
$ mkdir foo
$ cp -R foo foo
$ ls -R foo
foo/:
foo
foo/foo:
That's what it should be doing I guess. But it's tricky, if you start
doing symlinks etc, you'll end up looping sooner or later. What if the
directoy's are not named the same (eg: hard links)?
(please reply cc to the list)
And another email from Tom Van Looy:
Oh and yes, it doesn't go boom, the copy just stops when the max
filename length is reached (logically). And "<blablabla> name too long
(not copied)" is an error, you can just redirect it to dev null, cp -R
foo foo 2>/dev/null, if you don't like it on your screen.
Try fixing it so that it doesn't copy a directory into itself when it is
allready copied (so allow it only once). GNU cp does something like that:
$ mkdir foo
$ cp -R foo foo
cp: cannot copy a directory, `foo', into itself, `foo/foo'
$ ls -R foo
foo:
foo
foo/foo:
Only, I think the warning is not needed (and I didn't further test it,
so it's possibly doing something else after all).