This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
Re: [PATCH] Cygwin: rmdir: fail if last component is a symlink, as on Linux
- From: Ken Brown <kbrown at cornell dot edu>
- To: "cygwin-patches at cygwin dot com" <cygwin-patches at cygwin dot com>
- Cc: "eblake at redhat dot com" <eblake at redhat dot com>
- Date: Tue, 24 Sep 2019 17:42:41 +0000
- Subject: Re: [PATCH] Cygwin: rmdir: fail if last component is a symlink, as on Linux
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cornell.edu; dmarc=pass action=none header.from=cornell.edu; dkim=pass header.d=cornell.edu; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cheOb1Cz3ADpp+FqYVI/Z4IqJmuWQeLQ0Q0mvL7nSwo=; b=RxclkFb8YB/WtkrmfL4QjEiBhikuBO5jpAb/R7LIMKE3WtC2BSdLDEqsoezHPN6r9XMN7GZAbar/tIhdK8RsvYOUxAgs6GtCXzYtApIzPRb1I3/TFKACKfRAdouKYPCCBGdS3ylgRa7RS4cK2rZnZbCVCuWgU0bKvuHcf332aRkEkFA9i7JbpB/X7rOXv8o+tOTrIJFT1Cbn9aYOHK/e1m2arS1Ztbwn2VPFW8VBLt37V/T9u3e/zRyyIvUZHw6xsdHYN9GGPYPgKBUBIhs2QzAvpwmEZkqsodWs0AgnueRPnRz+PdLCce5/uYrI7AUgzedSWXVpTMvYx3QbGrRWZA==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eggKjRlOz7+dzo+12QnDEpeSvxP95cpcJQiQqKllMNCKc6Do9D7D8GmwDx2AAcdONyHwNfM4uhjRCMwG70qM5GPc8nrLIqP9U9GYYpBSdEIwF5svdhrYJoX8ZqSWzXJLmwSD484WZTkm0QthHNBJMeaszbihT+ZaE6qGOZjMb+40P82zvqHSTduSqHxndjksslfs1XG4saRx6hWAlXt41y2ltW6vN049OlYnaAbDF5SkS2BKDUFDUrUT/UP6l0gYGLo+TxRbPy5FLgUT3Mu1klTNUknXx9I9WrB0R/jqgnV0X56L3xwIA2GeLK9Ua70gU2HiGMrSi9LIgnhm7+1OLg==
- References: <20190922171823.3134-1-kbrown@cornell.edu>
On 9/22/2019 1:18 PM, Ken Brown wrote:
[...]
> @@ -354,6 +353,25 @@ rmdir (const char *dir)
>
> __try
> {
> + if (!*dir)
> + {
> + set_errno (ENOENT);
> + __leave;
> + }
> +
> + /* Following Linux, do not resolve the last component of DIR if
> + it is a symlink, even if DIR has a trailing slash. Achieve
> + this by stripping trailing slashes or backslashes. */
> + if (isdirsep (dir[strlen (dir) - 1]))
> + {
> + /* This converts // to /, but since both give ENOTEMPTY,
> + we're okay. */
> + char *buf;
> + char *p = stpcpy (buf = tp.c_get (), dir) - 1;
I forgot to declare tp. v2 is on the way.
Ken