msvcrt: set mode bits in _fstati64

Dmitry Timoshkov dmitry at baikal.ru
Sun Dec 5 03:59:57 CST 2004


"Juan Lang" <juan_lang at yahoo.com> wrote:

> Got it.  How's this?

> +  dw = GetFileType(hand);
> +  buf->st_mode = S_IREAD;
> +  if (!(hfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
> +    buf->st_mode |= S_IWRITE;
> +  if (hfi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
> +    buf->st_mode |= S_IFDIR;
> +  else if (dw == FILE_TYPE_CHAR)
> +    buf->st_mode |= S_IFCHR;
> +  else
> +    buf->st_mode |= S_IFREG;
> +  TRACE(":dwFileAttributes = 0x%lx, mode set to 0x%x\n",hfi.dwFileAttributes,
> +   buf->st_mode);

Looks better, except that according to MSDN "_S_IFREG bit is set if path specifies
an ordinary file or a device", so you need to add a check for FILE_TYPE_DISK. And
FILE_TYPE_PIPE perhaps should have _S_IFIFO set. Not sure if it's worth to write
a test case for it.

-- 
Dmitry.




More information about the wine-devel mailing list