On Thu, May 31, 2018 at 7:06 PM, Keno Fischer <k...@juliacomputing.com> wrote: > On Thu, May 31, 2018 at 6:56 PM, Keno Fischer <k...@juliacomputing.com> wrote: >>>> My concern was that allowing this would cause unexpected >>>> behavior, since the device numbers will differ between OS X >>>> and Linux. Though maybe this isn't the place to worry about >>>> that. >>> >>> The numbers may differ indeed but we don't really care since the >>> server never opens device files. This is just a directory entry. >> >> Ok, let me try to implement it. However, I don't think it is possible >> to implement mknodat (or at least I can't think of how) on Darwin >> directly. I could use regular mknod, but presumably, this is used >> to avoid a race condition between creating the device and setting >> the permissions. Can you think of a good way to resolve that? > > Would it work to fchdir in to the directory and use a cwd-relative > mknod, then fchdir back? Or do we need to maintain the cwd > while in this code?
Sorry for the triple-self-post here, but I took a look at the Darwin kernel source and there's an unexposed (from the Darwin C library) syscall that only changes the current thread's cwd. That seems like it should be safe, so I'll go ahead and use that to implement mknodat. I'll also submit a feature request to apple to implement mknodat.