Date: Sun, 17 May 1998 10:00:01 -0700 (PDT) From: Ian Dowse <iedowse@maths.tcd.ie> To: freebsd-bugs@FreeBSD.ORG Subject: Re: bin/6658: -stable getcwd(3) performs unnecessary lstats Message-ID: <199805171700.KAA16811@freefall.freebsd.org>
index | next in thread | raw e-mail
The following reply was made to PR bin/6658; it has been noted by GNATS.
From: Ian Dowse <iedowse@maths.tcd.ie>
To: freebsd-gnats-submit@freebsd.org
Cc: Subject: Re: bin/6658: -stable getcwd(3) performs unnecessary lstats
Date: Sun, 17 May 1998 18:03:16 +0100
In message <9805170338.aa14317@walton.maths.tcd.ie>, iedowse writes:
>
>!
>! if (!statfs(".", &sfs) &&
Whoops... That of course will only work for the first mount point. The
corrected patch is below.
Ian
*** /usr/src/lib/libc/gen/getcwd.c Thu Mar 26 09:22:48 1998
--- getcwd.c Sun May 17 17:40:25 1998
***************
*** 36,41 ****
--- 36,42 ----
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
+ #include <sys/mount.h>
#include <sys/stat.h>
#include <errno.h>
***************
*** 169,175 ****
if (dp->d_fileno == ino)
break;
}
! } else
for (;;) {
if (!(dp = readdir(dir)))
goto notfound;
--- 170,197 ----
if (dp->d_fileno == ino)
break;
}
! } else {
! struct statfs sfs;
! char *dirname;
!
! /*
! * Try to get the directory name by using statfs on
! * the mount point.
! */
! if (!statfs(up[3] ? up + 3 : ".", &sfs) &&
! (dirname = rindex(sfs.f_mntonname, '/')))
! while((dp = readdir(dir))) {
! if (ISDOT(dp))
! continue;
! bcopy(dp->d_name, bup, dp->d_namlen+1);
! if (!strcmp(dirname + 1, dp->d_name) &&
! !lstat(up, &s) &&
! s.st_dev == dev &&
! s.st_ino == ino)
! goto found;
! }
! rewinddir(dir);
!
for (;;) {
if (!(dp = readdir(dir)))
goto notfound;
***************
*** 187,193 ****
--- 209,217 ----
if (s.st_dev == dev && s.st_ino == ino)
break;
}
+ }
+ found:
/*
* Check for length of the current name, preceding slash,
* leading slash.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199805171700.KAA16811>
