X-Git-Url: https://git.saurik.com/apple/file_cmds.git/blobdiff_plain/4d0bb65183fe440451aacdcc675bede1ef4a4343..39aaa94bf0a1c68b3fe15e3622c96766f0f22ff2:/rm/rm.c?ds=sidebyside diff --git a/rm/rm.c b/rm/rm.c index e215ec8..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 */ @@ -529,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");