Permalink
Browse files

[MonoPosixHelper] Allow MmapFlags.MAP_ANON use on OS X.

Fixes: https://bugzilla.xamarin.com/show_bug.cgi?id=3419

The problem is that OS X defines MAP_ANON but not MAP_ANONYMOUS, AND
MAP_ANON and MAP_ANONYMOUS have the same value. Furthermore,
create-native-map doesn't have any special support for constants with
the same value, so it emits the validation independently.

The result is that the following fails on OS X:

	$ csharp -r:Mono.Posix.dll
	csharp> int r;
	csharp> using Mono.Unix.Native;
	csharp> NativeConvert.TryFromMmapFlags(MmapFlags.MAP_ANONYMOUS, out r);
	false
	csharp> r;

The (hackish) fix is to provide MAP_ANONYMOUS on OS X, thus allowing
the existing validation logic to work as expected.
  • Loading branch information...
1 parent 1fd5f9a commit 163f9061e1d322417eac3bdb66568ce6f9151b09 @jonpryor jonpryor committed Feb 27, 2012
Showing with 10 additions and 0 deletions.
  1. +10 −0 support/mph.h
View
@@ -75,6 +75,16 @@
#endif /* ndef L_XTND */
/*
+ * OS X doesn't define MAP_ANONYMOUS, but it does define MAP_ANON.
+ * Alias them to fix: https://bugzilla.xamarin.com/show_bug.cgi?id=3419
+ */
+#ifdef PLATFORM_MACOSX
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif /* ndef MAP_ANONYMOUS */
+#endif /* ndef PLATFORM_MACOSX */
+
+/*
* XATTR_AUTO is a synonym for 0 within XattrFlags, but most systems don't
* define it. map.c doesn't know that, though, so we ensure that it's defined
* so that the value 0 round-trips through MonoPosixHelper.

0 comments on commit 163f906

Please sign in to comment.