Problems in Linux readdir_r() affecting libwww...

Hi all,

I've recently found a problem using the libwww library under linux (RedHat
6.2 and 7.2). The usage of the readdir_r() in the files HTFile.c and
HTMulti.c are correct in most of the systems but cause a core dump under
Linux. The reason is that the glibc implementation of that call does return
0 at the end-of-directory and sets the "dirbuf" pointer to NULL (

This is consistent with the GNU documentation

http://www.gnu.org/manual/glibc-2.2.3/html_node/libc_262.html

but not consistent with the POSIX documentation that says it should return
an error.

This causes a core dump because the 

	while (readdir_r(dp, &result, &dirbuf) == 0)
	{
	   if (!dirbuf->d_ino ......
	}

loop does not end at the end of directory.

I just did a fix  by 

	while (readdir_r(dp, &result, &dirbuf) == 0)
	{
	   if (dirbuf == (struct direct *)NULL) break;
	   if (!dirbuf->d_ino ......
	}

which covers all the different Unix versions HPUX, Linux and Solaries I've
been able to test  so far. But still I don't know how you want to address
this issue in the future because the same issue seems to re-appear for each
Linux versions. 

Thanks a lot in advance and let me know what you think.

Josep Giralt
Software Architect.
Hewlett-Packard InkJet Commercial Division. Barcelona. Spain.




  

Received on Wednesday, 6 February 2002 08:20:38 UTC