* src/touch.c (touch): Do not use open_errno == EEXIST for diagnostic
if file was a directory as macOS 26 sets it for open("/", O_CREAT, ...).
---
 src/touch.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Fixes:

    FAIL tests/touch/not-owner.sh

    + diff -u exp out
    --- exp 2025-09-18 16:28:32.548385670 -0400
    +++ out 2025-09-18 16:28:32.527841543 -0400
    @@ -1 +1 @@
    -touch: setting times of '/': Read-only file system
    +touch: cannot touch '/': File exists

diff --git a/src/touch.c b/src/touch.c
index bc6b23840..cbe0cba38 100644
--- a/src/touch.c
+++ b/src/touch.c
@@ -180,11 +180,12 @@ touch (char const *file)
          would give a bogus diagnostic for e.g., 'touch /' (assuming we
          don't own / or have write access).  On Solaris 10 and probably
          other systems, opening a directory like "." fails with EINVAL.
-         (On SunOS 4 it was EPERM but that's obsolete.)  */
+         (On SunOS 4 it was EPERM but that's obsolete.)  On macOS 26
+         opening "/" fails with EEXIST. */
       struct stat st;
       if (open_errno
           && ! (open_errno == EISDIR
-                || (open_errno == EINVAL
+                || ((open_errno == EINVAL || open_errno == EEXIST)
                     && stat (file, &st) == 0 && S_ISDIR (st.st_mode))))
         {
           /* The wording of this diagnostic should cover at least two cases:
-- 
2.51.0


Reply via email to