On Feb 2, 2011, at 5:54 AM, Steve Lessard wrote:
> ...
> This tool basically checks a file's permissions to see if the file is 
> executable by any or all of user, group, other.
> Windows is supposed to have a Posix compliant layer. Does Mono.Posix assembly 
> work on Windows's Posix layer? 

Mono.Posix.dll only partially works on Windows:

  - Mono.Unix.Convert works (requires INTL.DLL)
  - Mono.Unix.Native.Stdlib works (uses MSVCRT.DLL)
  - Mono.Unix.StdioFileStream works (uses Mono.Unix.Native.Stdlib)

Beyond that, forgetaboutit.  Everything else depends on calls into 
MonoPosixHelper.dll which aren't compiled on Windows (e.g. Syscall.setxattr), 
or are calls into libc directly (which is remapped to MSVCRT.DLL under Mono, 
but those functions won't exist).

For example, Syscall.access() P/Invokes "libc".  If you use Mono.Posix.dll 
under .NET, this will fail (no such library).  Under Mono, it should get 
remapped to MSVCRT.DLL, but MSVCRT.DLL doesn't have an "access" export (it 
instead has "_access"), so the attempt to find the method will fail.

Furthermore, using Syscall.access() to check the executable bit doesn't make 
lots of sense on Windows.  Even when it did have a POSIX layer, very little 
software actually used it, so the important bit is NTFS ACLs, which access() 
likely won't know about.

 - Jon

_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to