From: Martin Stromberg Message-Id: <199803201348.OAA23352@propus.lu.erisoft.se> Subject: Re: mkdir and errno To: dj AT delorie DOT com (DJ Delorie) Date: Fri, 20 Mar 1998 14:48:30 +0100 (MET) Cc: djgpp-workers AT delorie DOT com (DJGPP-WORKERS) In-Reply-To: <199803200131.UAA10178@delorie.com> from "DJ Delorie" at Mar 19, 98 08:31:43 pm MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Precedence: bulk > > I didn't get any feedback on whether it is bug or feature that the call > > to access() clobbers errno. So is it a bug or feature? > > Any library function may change errno at any time for any reason. > This is not a bug or a feature, but a rule. Of course! But I think you misunderstood me. This is an excerp from libc's mkdir.c: if (r.x.flags & 1) { errno = __doserr_to_errno(r.x.ax); (1) if (errno == EACCES) { /* see if the directory existed, in which case we should return EEXIST - DJ */ if (access(dirname, D_OK) == 0) (2) errno = EEXIST; } return -1; } Suppose errno get set to EACCES at (1). access() is called at (2), which perhaps modifies errno, and returns zero or non-zero. If zero is returned all is fine. But if non-zero is returned, what is returned from mkdir() is access()'s settting of errno, not EACCES. Again this might be a feature, but it sure looks like a bug to me. Right, MartinS