Package: manpages-dev
Version: 6.03-2

Dear Maintainer,

'man 2 open' lists 3 cases in which ENOENT can be returned:
   ENOENT O_CREAT is not set and the named file does not exist.
   ENOENT A directory component in pathname does not exist or is a
          dangling symbolic link.
   ENOENT pathname refers to a nonexistent directory, O_TMPFILE and one
          of O_WRONLY or O_RDWR were specified in flags, but this kernel
          version does not provide the O_TMPFILE functionality.

I suggest another be listed:
   ENOENT The directory in which the file is to be created no longer
          exists.
(Or the second case could be re-worded to cover that.)

A simple test shows it can happen:
   $ mkdir foo
   $ cd foo
   $ rmdir ../foo
   $ touch bar
   touch: cannot touch 'bar': No such file or directory
   $ 

strace shows:
   openat(AT_FDCWD, "bar", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666)
    = -1 ENOENT (No such file or directory)
And POSIX requires openat(AT_FDCWD, ...) to be identical to open(...).

O_CREAT was set, pathname included no directory component, and O_TMPFILE
was not used--so ENOENT did not correspond to anything listed.  The same
result occurs if AT_FDCWD is replaced by a file descriptor for "foo"; in
both cases, though, pathnames such as "../bar" still work.

- Michael


-- System Information:
Debian Release: trixie/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 6.5.0-4-amd64 (SMP w/32 CPU threads; PREEMPT)
Locale: LANG=en_CA.UTF-8, LC_CTYPE=en_CA.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_CA:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages manpages-dev depends on:
ii  manpages  6.03-2

manpages-dev recommends no packages.

Versions of packages manpages-dev suggests:
ii  man-db [man-browser]  2.12.0-1

-- no debconf information

Attachment: signature.asc
Description: PGP signature

Reply via email to