Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Nov 2002 21:12:30 +0900 (JST)
From:      AIDA Shinra <aida-s@jcom.home.ne.jp>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   bin/45749: [PATCH] rm -f in MS-DOS directory
Message-ID:  <200211261212.gAQCCUqp002592@61-27-47-65.home.ne.jp>

next in thread | raw e-mail | index | archive | help

>Number:         45749
>Category:       bin
>Synopsis:       [PATCH] rm -f in MS-DOS directory
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Nov 26 04:20:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     AIDA Shinra
>Release:        FreeBSD 4.7-STABLE i386
>Organization:
>Environment:
System: FreeBSD e-note 4.7-STABLE FreeBSD 4.7-STABLE #2: Thu Nov 21 16:44:44 JST 2002 shinra@e-note:/usr/obj/usr/freebsd/src/sys/LOCAL i386


	
>Description:
For stat(), unlink() and others with an invalid filename fails with EINVAL on
msdosfs, rm(1) can't ignore such an argument even if -f is specified.
This means many usual commands such as "rm -f *.c" in empty directory fails in
"Invalid argument".

>How-To-Repeat:
	
>Fix:
Ignore EINVAL in addition to ENOENT.

diff -u -r1.1.1.2 -r1.3
--- rm.c	20 Jul 2002 11:31:00 -0000	1.1.1.2
+++ rm.c	26 Nov 2002 11:30:19 -0000	1.3
@@ -202,7 +202,8 @@
 			 */
 			if (!needstat)
 				break;
-			if (!fflag || p->fts_errno != ENOENT) {
+			if (!fflag || (p->fts_errno != ENOENT
+					&& p->fts_errno != EINVAL)) {
 				warnx("%s: %s",
 				    p->fts_path, strerror(p->fts_errno));
 				eval = 1;
@@ -271,7 +272,9 @@
 				if (Pflag)
 					rm_overwrite(p->fts_accpath, NULL);
 				rval = unlink(p->fts_accpath);
-				if (rval == 0 || (fflag && errno == ENOENT)) {
+				if (rval == 0 ||
+					(fflag && (errno == ENOENT
+						 || errno == EINVAL))) {
 					if (rval == 0 && vflag)
 						(void)printf("%s\n",
 						    p->fts_path);
@@ -304,7 +307,8 @@
 			if (Wflag) {
 				sb.st_mode = S_IFWHT|S_IWUSR|S_IRUSR;
 			} else {
-				if (!fflag || errno != ENOENT) {
+				if (!fflag || (errno != ENOENT
+						&& errno != EINVAL)) {
 					warn("%s", f);
 					eval = 1;
 				}

>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200211261212.gAQCCUqp002592>