Opened 2 months ago

Last modified 2 months ago

#18809 new enhancement

Change `FD_CWD` to a different value

Reported by: sunfishcode Owned by: nobody
Priority: low Milestone: Unscheduled
Component: System/Kernel Version:
Keywords: Cc:
Blocked By: Blocking:
Platform: All

Description

Currently in Haiku the constant FD_CWD is defined to be -1:

https://github.com/haiku/haiku/blob/2a2e7ad562841be14b2d1f8ad870780f32be2b1f/headers/posix/fcntl.h#L62

Would it be possible to change this to -2, or any other negative number?

I maintain some code that uses -1 as a sentinel fd value, on the assumption that -1 is never a valid FD, because it's the error return value for open. This code can hold the value of FD_CWD on all platforms I can find, except for Haiku. Only Haiku defines FD_CWD as -1.

I'm aware of the possibility that this value is not feasible to change; if that's the case, feel free to close this.

Change History (3)

comment:1 by waddlesplash, 2 months ago

Component: - GeneralSystem/Kernel

Reading the source code, it looks like we don't even check for this value in the kernel, we just check for fd < 0. So you could already specify -2. But that means that passing -1 as an "invalid" FD would actually work in at least this one instance...

I don't know if that's a problem or not?

comment:2 by sunfishcode, 2 months ago

If Haiku doesn't check for this value in the kernel, then perhaps AT_FDCWD can indeed be changed. I've now submitted a patch implementing this:

https://review.haiku-os.org/c/haiku/+/7423

It may also be worth considering having Haiku reject -1 when passed as the fd to openat etc., to help catch code that forgets to check for errors, however that's a separate change.

comment:3 by waddlesplash, 2 months ago

Change merged in hrev57593. However, I am going to leave this open, as we should indeed reject -1; but not until we've rebuilt a lot of applications to use the new value.

Note: See TracTickets for help on using tickets.