AT_EMPTY_PATH works with empty strings (""), but not with NULL
(or at least it's not obvious).
The relevant kernel code is the following:
linux$ sed -n 189,198p fs/namei.c
result->refcnt = 1;
/* The empty path is special. */
if (unlikely(!len)) {
if (empty)
*empty = 1;
if (!(flags & LOOKUP_EMPTY)) {
putname(result);
return ERR_PTR(-ENOENT);
}
}
Reported-by: Walter Harms <redacted>
Cc: Theodore Ts'o <tytso@mit.edu>
Cc: Adam Borowski <redacted>
Signed-off-by: Alejandro Colomar <redacted>
---
man2/open.2 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/man2/open.2 b/man2/open.2
index 03fff1b65..267e79656 100644
--- a/man2/open.2
+++ b/man2/open.2
@@ -823,7 +823,7 @@ fd = open("/path/to/dir", O_TMPFILE | O_RDWR,
/* File I/O on \(aqfd\(aq... */
-linkat(fd, NULL, AT_FDCWD, "/path/for/file", AT_EMPTY_PATH);
+linkat(fd, "", AT_FDCWD, "/path/for/file", AT_EMPTY_PATH);
/* If the caller doesn\(aqt have the CAP_DAC_READ_SEARCH
capability (needed to use AT_EMPTY_PATH with linkat(2)),--
2.30.1.721.g45526154a5