Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Jun 1998 08:32:56 +0800
From:      Peter Wemm <peter@netplex.com.au>
To:        Terry Lambert <tlambert@primenet.com>
Cc:        current@FreeBSD.ORG
Subject:   Re: Bogus errno twiddling by lstat... 
Message-ID:  <199806170032.IAA06067@spinner.netplex.com.au>
In-Reply-To: Your message of "Tue, 16 Jun 1998 23:55:32 GMT." <199806162355.QAA06852@usr02.primenet.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
Terry Lambert wrote:
> Try the following program:
> 
> 	#include <sys/types.h>
> 	#include <sys/stat.h>
> 	#include <errno.h>
> 
> 
> 	main()
> 	{
> 		struct stat     sb;
> 
> 		errno = 0;
> 		printf( "lstat(fred) = %d\n", lstat( "fred", &sb));
> 		perror( "lstat");
> 	}
> 
> If "fred" exists in the current directory, you would expect that errno
> would not have been modified, and the output will be:
> 
> 	lstat(fred) = 0
> 	lstat: Undefined error: 0
> 
> However, what comes out instead is:
> 
> 	lstat(fred) = 0
> 	lstat: No such file or directory
> 
> Indicating that lstat is diddling errno when it shouldn't be.

1: This is a classic programming error.. You're not really supposed to be 
looking at the value of errno except right after a -1 return from 
something.

2: the no such file or directory is actually stdio calling malloc, which 
is doing a readlink on /etc/malloc.conf, which probably doesn't exist.

3: You're calling stdio (ie: printf) *after* lstat() so you've gotten 
what's coming to you. :-)  You're initializing the entire stdio system 
after calling lseek().  It's stdio that's leaking the errno.

Cheers,
-Peter



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



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