qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 08/11] bsd-user: Implement rmdir and undocumented -_getcwd


From: Warner Losh
Subject: Re: [PATCH 08/11] bsd-user: Implement rmdir and undocumented -_getcwd
Date: Mon, 13 Jun 2022 17:45:45 -0600



On Mon, Jun 13, 2022 at 1:52 PM Richard Henderson <richard.henderson@linaro.org> wrote:
On 6/12/22 13:48, Warner Losh wrote:
> Implemenet rmdir and __getcwd. Declare __getcwd as extern because
> there's no installed FreeBSD header that has it. It's used internally by
> libc, which doesn't provide an external declaration, but does export the
> symbol.

Typo in subject: s/-/_/.

Indeed.
 
> @@ -55,6 +55,7 @@ extern struct iovec *lock_iovec(int type, abi_ulong target_addr, int count,
>           int copy);
>   extern void unlock_iovec(struct iovec *vec, abi_ulong target_addr, int count,
>           int copy);
> +extern int __getcwd(char *path, size_t len);

Do you really want to rely on this export?
Unless it does something special, I'd just declare a local version of the syscall as you
do with safe_*.

Indeed not. I was just copying what we've been running, but I see now that was unwise.
I'll do a safe_syscall directly here since we don't need to call it anywhere else. I'll do a
sanity check on our upstream and make sure I can still run my favorite shells, which
I believe use this call.
 
> +/* undocumented __getcwd(char *buf, size_t len)  system call */

Surely the syscall itself is documented?

One would think it was documented, but there's no man page for it and the getcwd()
call has some extensions that it implements, plus there's some weird special cases
that __getcwd() can sometimes return that getcwd() knows how to unwind (the
oddest being that sometimes paths are returned backwards). All these quirks are not,
alas, documented in any place except the code. Hence the characterization that this
is undocumented :)... I was rather surprised by this when I went looking.

Warner

reply via email to

[Prev in Thread] Current Thread [Next in Thread]