Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Mar 2000 08:30:02 -0800 (PST)
From:      Mikhail Teterin <mi@aldan.algebra.com>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/7063: mount fails if $PWD does not exist
Message-ID:  <200003281630.IAA25713@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/7063; it has been noted by GNATS.

From: Mikhail Teterin <mi@aldan.algebra.com>
To: freebsd-gnats-submit@FreeBSD.org
Cc:  
Subject: Re: bin/7063: mount fails if $PWD does not exist
Date: Tue, 28 Mar 2000 11:21:33 -0500

 This is a multi-part message in MIME format.
 --------------94B7256161EBABF294F5ABEB
 Content-Type: text/plain; charset=us-ascii
 Content-Transfer-Encoding: 7bit
 
 An almost identical problem still exists :(
 
 If the directory was just plain removed after one cd-ed
 into it, mount will work. But if the entire file-system
 was unmounted, mount will fail:
 
 root@rtfm:src/sys/compile (123) mount /cdrom0
 mount: .: Not a directory
 
 even though none of its parameteres involve current directory
 or the unmounted file-system.
 
 It appears, the problem is with realpath(3), which mount
 invokes. realpath() insists on . being openable.
 
 May be, something like the attached is needed (damn the goto)?
 
 In any case, an entry in the CAVEATS section of realpath(3)
 is in order explaining its behavior in case `.' does not
 exist.
 
 	-mi
 --------------94B7256161EBABF294F5ABEB
 Content-Type: text/plain; charset=us-ascii;
  name="p"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline;
  filename="p"
 
 --- lib/libc/stdlib/realpath.c	Thu Jan 27 18:06:50 2000
 +++ lib/libc/stdlib/realpath.c	Tue Mar 28 11:11:03 2000
 @@ -68,7 +68,4 @@
  
 -	/* Save the starting point. */
 -	if ((fd = _open(".", O_RDONLY)) < 0) {
 -		(void)strcpy(resolved, ".");
 -		return (NULL);
 -	}
 +	/* Save the starting point, if possible */
 +	fd = _open(".", O_RDONLY);
  
 @@ -149,4 +146,4 @@
  
 -	/* Go back to where we came from. */
 -	if (fchdir(fd) < 0) {
 +	/* Go back to where we came from. If we know where, that is */
 +	if (fd >= 0 && fchdir(fd) < 0) {
  		serrno = errno;
 @@ -160,4 +157,4 @@
  err1:	serrno = errno;
 -	(void)fchdir(fd);
 -err2:	(void)_close(fd);
 +	if (fd >=0) (void)fchdir(fd);
 +err2:	if (fd >=0) (void)_close(fd);
  	errno = serrno;
 
 --------------94B7256161EBABF294F5ABEB--
 
 


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200003281630.IAA25713>