Date: Tue, 6 Jun 2006 02:35:20 +0100 From: "mal content" <artifact.one@googlemail.com> To: "Pieter de Goeje" <pieter@degoeje.nl> Cc: freebsd-hackers@freebsd.org Subject: Re: Strange behaviour from mkdir()? Message-ID: <8e96a0b90606051835j363547e0q4d8a549837c27b74@mail.gmail.com> In-Reply-To: <200606060208.28838.pieter@degoeje.nl> References: <8e96a0b90606041148g5674ca31r74be2e1f9c79b640@mail.gmail.com> <200606060208.28838.pieter@degoeje.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
On 06/06/06, Pieter de Goeje <pieter@degoeje.nl> wrote: > Hi MC, > > On Sunday 04 June 2006 20:48, mal content wrote: > > Is this expected behaviour (I'm using the mkdir utility > > for the example, but the problem occurs using the system > > call directly): > > > > # mkdir . > > mkdir: .: File exists > > # mkdir .. > > mkdir: ..: File exists > > > > Now, the unusual one: > > > > # mkdir / > > mkdir: /: Is a directory > > > > Shouldn't it say 'file exists'? > In fact, the _only_ directory that I could find that shows this behaviour > is /. (I am using 6-stable) > > > > > The mkdir() man page doesn't say that the function can set > > errno to EISDIR and yet that's what's happening here. > > > > I did some research on it, and it seems the mkdir utility is aware of the > EISDIR error. Kinda weird if you ask me, since it isn't documented. I followed the kern_mkdir() function and ended up in /src/sys/kern/vfs_lookup.c where this bit of code appears: 785: /* 786: * Check for degenerate name (e.g. / or "") 787: * which is a way of talking about a directory, 788: * e.g. like "/." or ".". 789: */ 790: if (cnp->cn_nameptr[0] == '\0') { 791: if (cnp->cn_nameiop != LOOKUP || wantparent) { 792: error = EISDIR; 793: goto bad; 794: } 795: if (dp->v_type != VDIR) { 796: error = ENOTDIR; 797: goto bad; 798: } Not sure if that code is completely correct, but what do I know... MC
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8e96a0b90606051835j363547e0q4d8a549837c27b74>