Opened 3 months ago
Closed 3 months ago
#19058 closed bug (duplicate)
renameat() does not fail with EBADF when it should
Reported by: | bhaible | Owned by: | nobody |
---|---|---|---|
Priority: | normal | Milestone: | Unscheduled |
Component: | System/POSIX | Version: | R1/beta5 |
Keywords: | Cc: | ||
Blocked By: | #19048 | Blocking: | |
Platform: | All |
Description (last modified by )
POSIX https://pubs.opengroup.org/onlinepubs/9799919799/functions/rename.html specifies that the renameat() function "shall fail" with error code EBADF if "The old argument does not specify an absolute path and the oldfd argument is neither AT_FDCWD nor a valid file descriptor open for reading or searching, or the new argument does not specify an absolute path and the newfd argument is neither AT_FDCWD nor a valid file descriptor open for reading or searching."
This does not work in Haiku hrev57823 (from 2024-07-15): in one case, it behaves as if AT_FDCWD had been specified; in the other case, it fails with error code ENOENT instead.
How to reproduce: Compile and run the attached test program.
gcc -Wall foo.c ./a.out
Expected output:
ret = -1, errno == EBADF ret = -1, errno == EBADF OK
Actual output if a file 'foo' does not exist in the current directory:
ret = -1, errno == No such file or directory ret = -1, errno == No such file or directory a.out: foo.c:41:main: !fail Kill Thread
Actual output if a file 'foo' does exist in the current directory:
ret = 0 ret = -1, errno == No such file or directory a.out: foo.c:41:main: !fail Kill Thread
Attachments (1)
Change History (3)
by , 3 months ago
comment:1 by , 3 months ago
Description: | modified (diff) |
---|
comment:2 by , 3 months ago
Blocked By: | 19048 added |
---|---|
Resolution: | → duplicate |
Status: | new → closed |
test case foo.c