git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/4] mingw: move common functionality to win32.h

From
Dmitry Potapov <dpotapov@gmail.com>
Date
Sep 27, 2008, 21:51 UTC
Message-ID
<20080927215102.GF21650@dpotapov.dyndns.org>
In-Reply-To
<200809272034.04931.johannes.sixt@telecom.at>
On Sat, Sep 27, 2008 at 08:34:04PM +0200, Johannes Sixt wrote:
Show 29 quoted lines
> On Samstag, 27. September 2008, Dmitry Potapov wrote:
> > +static inline int get_file_attr(const char *fname,
> > WIN32_FILE_ATTRIBUTE_DATA *fdata) +{
> > +	if (GetFileAttributesExA(fname, GetFileExInfoStandard, fdata))
> > +		return 0;
> > +
> > +	switch (GetLastError()) {
> > +	case ERROR_ACCESS_DENIED:
> > +	case ERROR_SHARING_VIOLATION:
> > +	case ERROR_LOCK_VIOLATION:
> > +	case ERROR_SHARING_BUFFER_EXCEEDED:
> > +		return EACCES;
> > +	case ERROR_BUFFER_OVERFLOW:
> > +		return ENAMETOOLONG;
> > +	case ERROR_NOT_ENOUGH_MEMORY:
> > +		return ENOMEM;
> > +	default:
> > +		return ENOENT;
> > +	}
> > +}
> 
> I've long wished for a function that translates Win32 error codes to errno 
> codes. It would be useful in a number of other places, too.
> 
> Here you introduce a new function get_file_attr() that is nothing but 
> GetFileAttributesExA() followed by such an error code translation.
> 
> I suggest that we leave the original call to GetFileAttributesExA() alone and 
> have a function win32_to_errno(void) that is just the switch statement above.

win32_to_errno was the first thing that implemented but then released that translation of Win32 errors to errno cannot be in general case. For instance, ERROR_BUFFER_OVERFLOW means ENAMETOOLONG here, but it can be translated to ETOOSMALL in other cases. How do you propose to deal with that?

So I have not found a better solution than to add get_file_attr(), which calls GetFileAttributesExA() and translates Win32 error.

Dmitry
Previous: Johannes SixtNext: Johannes Sixt
Message 3 of 5 in “mingw: move common functionality to win32.h”
  1. 3/4 mingw: move common functionality to win32.hDmitry Potapov, Sep 27, 2008
  2. Johannes SixtSep 27, 2008
  3. Dmitry PotapovSep 27, 2008
  4. Johannes SixtSep 28, 2008
  5. Dmitry PotapovSep 29, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.