diff options
author | delphij <delphij@FreeBSD.org> | 2006-10-30 03:32:09 +0000 |
---|---|---|
committer | delphij <delphij@FreeBSD.org> | 2006-10-30 03:32:09 +0000 |
commit | 633d73890b16ca2113738bb6f755476277ac715f (patch) | |
tree | 5b962860bd6b7ab3494f4613fa7f381c04343f7f /bin/rm/rm.c | |
parent | 1846f706271597ff5a62140c6017835694e5535b (diff) | |
download | FreeBSD-src-633d73890b16ca2113738bb6f755476277ac715f.zip FreeBSD-src-633d73890b16ca2113738bb6f755476277ac715f.tar.gz |
Be more reasonable when overwrite mode is specified while there
is hard links. Overwritting when links > 1 would cause data
loss, which is usually undesired.
Inspired by: discussion on -hackers@
Suggested by: elessar at bsdforen de
Obtained from: OpenBSD
Diffstat (limited to 'bin/rm/rm.c')
-rw-r--r-- | bin/rm/rm.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/bin/rm/rm.c b/bin/rm/rm.c index 614479d..c311b6e 100644 --- a/bin/rm/rm.c +++ b/bin/rm/rm.c @@ -400,6 +400,11 @@ rm_overwrite(char *file, struct stat *sbp) } if (!S_ISREG(sbp->st_mode)) return (1); + if (sbp->st_nlink > 1) { + warnx("%s (inode %u): not overwritten due to multiple links", + file, sbp->st_ino); + return (1); + } if ((fd = open(file, O_WRONLY, 0)) == -1) goto err; if (fstatfs(fd, &fsb) == -1) |