X-Git-Url: https://git.saurik.com/apple/file_cmds.git/blobdiff_plain/40bf83fed3260cbe00f8bd41f2f5a5f622d625be..39aaa94bf0a1c68b3fe15e3622c96766f0f22ff2:/rm/rm.c diff --git a/rm/rm.c b/rm/rm.c index 1c5c198..ec13b2a 100644 --- a/rm/rm.c +++ b/rm/rm.c @@ -31,8 +31,9 @@ * SUCH DAMAGE. */ +#include #ifndef lint -static const char copyright[] = +__used static const char copyright[] = "@(#) Copyright (c) 1990, 1993, 1994\n\ The Regents of the University of California. All rights reserved.\n"; #endif /* not lint */ @@ -41,7 +42,7 @@ static const char copyright[] = #if 0 static char sccsid[] = "@(#)rm.c 8.5 (Berkeley) 4/18/94"; #else -static const char rcsid[] = +__used static const char rcsid[] = "$FreeBSD: src/bin/rm/rm.c,v 1.33 2001/06/13 15:01:25 ru Exp $"; #endif #endif /* not lint */ @@ -419,7 +420,6 @@ rm_overwrite(file, sbp) int bsize, fd, wlen; char *buf = NULL; - fd = -1; if (sbp == NULL) { if (lstat(file, &sb)) goto err; @@ -438,7 +438,7 @@ rm_overwrite(file, sbp) #define PASS(byte) { \ memset(buf, byte, bsize); \ for (len = sbp->st_size; len > 0; len -= wlen) { \ - wlen = len < bsize ? len : bsize; \ + wlen = len < bsize ? (int)len : bsize; \ if (write(fd, buf, wlen) != wlen) \ goto err; \ } \ @@ -530,10 +530,24 @@ checkdot(argv) complained = 0; for (t = argv; *t;) { - if ((p = strrchr(*t, '/')) != NULL) - ++p; - else + size_t len = strlen(*t); + char truncated[len]; + + if ((p = strrchr(*t, '/')) != NULL) { + if (p[1] == '\0') { // trailing / -- treat as if not present + strlcpy(truncated, *t, len); + p = strrchr(truncated, '/'); + if (p) { + ++p; + } else { + p = truncated; + } + } else { + ++p; + } + } else { p = *t; + } if (ISDOT(p)) { if (!complained++) warnx("\".\" and \"..\" may not be removed");