Hello,

Roland McGrath, le Tue 06 Oct 2009 20:06:27 -0700, a écrit :
> fdopendir uses __file_name_lookup_under (port, "/", O_DIRECTORY | O_NOTRANS, 
> 0)
> which I think is exactly right.

Mmm, I'd say "almost".  That line means starting from directory one
should look at directory /, and what __hurd_file_name_lookup does is

startport = (file_name[0] == '/') ? INIT_PORT_CRDIR : INIT_PORT_CWDIR;

so that __file_name_lookup_under's use_init_port function receives
INIT_PORT_CRDIR as `which' parameter, not INIT_PORT_CWDIR, and thus
doesn't use `startdir' and just resolves "/", which indeed is a
directory :). This can be seen in rpctrace:

119->dir_lookup ("test" 1 0) = 0 1 ""  136
136->term_getctty () = 0xfffffed1 ((ipc/mig) bad request message ID) 
120->dir_lookup ("/" 2097280 0) = 0 1 ""  138

(119 is CRDIR and 120 is CWDIR).

Shouldn't __file_name_lookup_under (port, ".", O_DIRECTORY | O_NOTRANS,
0) be more exactly right?  At least it seems to be working:

118->dir_lookup ("test" 1 0) = 0 1 ""  135
135->term_getctty () = 0xfffffed1 ((ipc/mig) bad request message ID) 
135->dir_lookup ("./" 2097280 0) = 0x40000014 (Not a directory) 

Samuel


Reply via email to