| Summary: | getcwd under Linux emulation fails after a rmdir | ||
|---|---|---|---|
| Product: | Base System | Reporter: | markush <markush> |
| Component: | kern | Assignee: | freebsd-bugs (Nobody) <bugs> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | ||
| Priority: | Normal | ||
| Version: | 4.2-STABLE | ||
| Hardware: | Any | ||
| OS: | Any | ||
I'm just bouncing this message into the audit trail for the PR. David. ----- Forwarded message from David Malone <dwmalone@maths.tcd.ie> ----- Delivered-To: freebsd-hackers@freebsd.org Date: Wed, 23 May 2001 12:38:21 +0100 From: David Malone <dwmalone@maths.tcd.ie> To: "Koster, K.J." <K.J.Koster@kpn.com> Cc: 'Alfred Perlstein' <bright@rush.net>, 'FreeBSD Hackers mailing list' <freebsd-hackers@freebsd.org> Subject: Re: Linux getcwd problems In-Reply-To: <59063B5B4D98D311BC0D0001FA7E452205FD9C04@l04.research.kpn.com>; from K.J.Koster@kpn.com on Wed, May 23, 2001 at 01:02:01PM +0100 List-Archive: <http://docs.freebsd.org/mail/> (Web Archive) X-Loop: FreeBSD.ORG On Wed, May 23, 2001 at 01:02:01PM +0100, Koster, K.J. wrote: The problem seems to be that FreeBSD's getcwd library call will impliment the getcwd userland if the syscall fails or is unimplimented. There are times when the syscall fails in normal operation and you don't see this with the BSD stuff 'cos it is covered up by the userland implimentation. You can check this by kdumping a FreeBSD version of your cwd program and searching for the return value of the __getcwd syscall. The Linux emulation stuff just calls the FreeBSD syscall, but I guess the Linux libraries don't expect getcwd to fail, so they can't do the userland magic. I haven't had a chance to look at how hard it would be to fix the FreeBSD getcwd call to always work, or to fake the Linux stuff so that it somehow did the equivelent of the userland thing. David. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message ----- End forwarded message ----- Fixed in 5.0-CURRENT: modules/linux/Makefile (Revision 1.52) conf/files.i386 (Revision 1.370) compat/linux/linux_file.c (Revision 1.54) compat/linux/linux_getcwd.c (Revision 1.1) Andrew Gallatin's commit message: "Fix linux_getcwd() so that if the cwd isn't cached (__getcwd() fails), the cwd is looked up inside the kernel. The native getcwd() in libc handles this in userland if __getcwd() fails." State Changed From-To: open->closed Fixed in -current and (finally) in -stable |
After doing a rmdir(2) on a directory (in FreeBSD "mode", in a shell for example), a program executing under Linux emulation will fail the call to getcwd with the error "Not a directory". Fix: Not known. How-To-Repeat: $ cd /tmp $ ./cwd /tmp $ mkdir foo $ rmdir foo $ ./cwd getcwd: Not a directory # to "fix" the problem, do a "cd ." $ cd . $ ./cwd /tmp cwd.c: ------------------------------------------------------ #include <unistd.h> #include <stdio.h> int main(int argc, char *argv[]) { char *buf; if ((buf = getcwd(NULL, 0)) == NULL) { perror("getcwd"); return 1; } printf("%s\n", buf); return 0; } ------------------------------------------------------