Skip to content

Commit 8bb7b86

Browse files
steffen-kiessakoeplinger
authored andcommitted
Clean up map.c /map.h (mono#16746)
* [Mono.Posix] Move Mono_Posix_{From,To}MremapFlags() to support/sys-mman.c Since b522eab Mono_Posix_FromMremapFlags() and Mono_Posix_ToMremapFlags() contain manual changes for NetBSD. Move the functions from support/map.c to support/sys-mman.c so that they won't be overwritten when create-native-map is rerun. * [Mono.Posix] Fix prototypes in support/stdio.c In ed892cc wrapper functions for several stdio functions were added, but the prototypes in map.h were manually written, not using create-native-map. This commit changes the prototypes so that they match the output of create-native-map. * [Mono.Posix] Undefine HAVE_STRUCT_SOCKADDR_IN6 in support/map.c on MSVC In 22b6b95 a manual change to support/map.c was added to prevent Mono_Posix_FromSockaddrIn6() and Mono_Posix_ToSockaddrIn6() from being built for windows even if HAVE_STRUCT_SOCKADDR_IN6 is defined. Instead undefine it in a header file to avoid manual changes to map.c. With this commit map.c, map.h and NativeConvert.generated.cs contain no manual changes anymore.
1 parent ad2132e commit 8bb7b86

File tree

10 files changed

+110
-101
lines changed

10 files changed

+110
-101
lines changed

mcs/class/Mono.Posix/Mono.Unix.Native/NativeConvert.cs

+32
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,38 @@ public static string ToFopenMode (FileMode mode, FileAccess access)
341341
return fopen_mode;
342342
}
343343

344+
[DllImport (LIB, EntryPoint="Mono_Posix_FromMremapFlags")]
345+
private static extern int FromMremapFlags (MremapFlags value, out UInt64 rval);
346+
347+
public static bool TryFromMremapFlags (MremapFlags value, out UInt64 rval)
348+
{
349+
return FromMremapFlags (value, out rval) == 0;
350+
}
351+
352+
public static UInt64 FromMremapFlags (MremapFlags value)
353+
{
354+
UInt64 rval;
355+
if (FromMremapFlags (value, out rval) == -1)
356+
ThrowArgumentException (value);
357+
return rval;
358+
}
359+
360+
[DllImport (LIB, EntryPoint="Mono_Posix_ToMremapFlags")]
361+
private static extern int ToMremapFlags (UInt64 value, out MremapFlags rval);
362+
363+
public static bool TryToMremapFlags (UInt64 value, out MremapFlags rval)
364+
{
365+
return ToMremapFlags (value, out rval) == 0;
366+
}
367+
368+
public static MremapFlags ToMremapFlags (UInt64 value)
369+
{
370+
MremapFlags rval;
371+
if (ToMremapFlags (value, out rval) == -1)
372+
ThrowArgumentException (value);
373+
return rval;
374+
}
375+
344376
[DllImport (LIB, EntryPoint="Mono_Posix_FromStat")]
345377
private static extern int FromStat (ref Stat source, IntPtr destination);
346378

mcs/class/Mono.Posix/Mono.Unix.Native/NativeConvert.generated.cs

+1-33
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* This file was automatically generated by create-native-map from ./../../class/lib/net_4_x/Mono.Posix.dll.
2+
* This file was automatically generated by create-native-map from ./../../class/lib/net_4_x-linux/Mono.Posix.dll.
33
*
44
* DO NOT MODIFY.
55
*/
@@ -598,38 +598,6 @@ public static MountFlags ToMountFlags (UInt64 value)
598598
return rval;
599599
}
600600

601-
[DllImport (LIB, EntryPoint="Mono_Posix_FromMremapFlags")]
602-
private static extern int FromMremapFlags (MremapFlags value, out UInt64 rval);
603-
604-
public static bool TryFromMremapFlags (MremapFlags value, out UInt64 rval)
605-
{
606-
return FromMremapFlags (value, out rval) == 0;
607-
}
608-
609-
public static UInt64 FromMremapFlags (MremapFlags value)
610-
{
611-
UInt64 rval;
612-
if (FromMremapFlags (value, out rval) == -1)
613-
ThrowArgumentException (value);
614-
return rval;
615-
}
616-
617-
[DllImport (LIB, EntryPoint="Mono_Posix_ToMremapFlags")]
618-
private static extern int ToMremapFlags (UInt64 value, out MremapFlags rval);
619-
620-
public static bool TryToMremapFlags (UInt64 value, out MremapFlags rval)
621-
{
622-
return ToMremapFlags (value, out rval) == 0;
623-
}
624-
625-
public static MremapFlags ToMremapFlags (UInt64 value)
626-
{
627-
MremapFlags rval;
628-
if (ToMremapFlags (value, out rval) == -1)
629-
ThrowArgumentException (value);
630-
return rval;
631-
}
632-
633601
[DllImport (LIB, EntryPoint="Mono_Posix_FromMsyncFlags")]
634602
private static extern int FromMsyncFlags (MsyncFlags value, out Int32 rval);
635603

mcs/class/Mono.Posix/Mono.Unix.Native/Syscall.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,9 @@ public enum MlockallFlags : int {
725725
MCL_FUTURE = 0x2, // Lock all additions to address
726726
}
727727

728-
[Map][Flags]
728+
// Use manually written To/From methods because NetBSD needs special treatment for MREMAP_MAYMOVE
729+
// This has to be kept in sync with sys-mman.c
730+
[Flags]
729731
[CLSCompliant (false)]
730732
public enum MremapFlags : ulong {
731733
MREMAP_MAYMOVE = 0x1,

msvc/monoposixhelper.def

-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ Mono_Posix_FromMlockallFlags
1212
Mono_Posix_FromMmapFlags
1313
Mono_Posix_FromMmapProts
1414
Mono_Posix_FromMountFlags
15-
Mono_Posix_FromMremapFlags
1615
Mono_Posix_FromMsyncFlags
1716
Mono_Posix_FromOpenFlags
1817
Mono_Posix_FromPathconfName
@@ -97,7 +96,6 @@ Mono_Posix_ToMlockallFlags
9796
Mono_Posix_ToMmapFlags
9897
Mono_Posix_ToMmapProts
9998
Mono_Posix_ToMountFlags
100-
Mono_Posix_ToMremapFlags
10199
Mono_Posix_ToMsyncFlags
102100
Mono_Posix_ToOpenFlags
103101
Mono_Posix_ToPathconfName

support/Makefile.am

+1
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ refresh:
174174
--autoconf-header="<utime.h>" \
175175
--impl-header="<time.h>" \
176176
--impl-header="\"mph.h\"" \
177+
--impl-header="\"map-impl.h\"" \
177178
--rename-member=st_atime=st_atime_ \
178179
--rename-member=st_ctime=st_ctime_ \
179180
--rename-member=st_mtime=st_mtime_ \

support/map-impl.h

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// This file is included by the auto-generated map.c
2+
3+
// For building on windows: Undefine the HAVE_STRUCT_SOCKADDR_IN6 defined by winconfig.h to prevent map.c from building Mono_Posix_FromSockaddrIn6() and Mono_Posix_ToSockaddrIn6().
4+
#ifdef HOST_WIN32
5+
#undef HAVE_STRUCT_SOCKADDR_IN6
6+
#endif

support/map.c

+3-38
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
#endif /* ndef HAVE_UTIME_H */
7878
#include <time.h>
7979
#include "mph.h"
80+
#include "map-impl.h"
8081

8182
#include "map.h"
8283

@@ -3949,42 +3950,6 @@ int Mono_Posix_ToMountFlags (guint64 x, guint64 *r)
39493950
return 0;
39503951
}
39513952

3952-
int Mono_Posix_FromMremapFlags (guint64 x, guint64 *r)
3953-
{
3954-
*r = 0;
3955-
#ifndef __NetBSD__
3956-
if ((x & Mono_Posix_MremapFlags_MREMAP_MAYMOVE) == Mono_Posix_MremapFlags_MREMAP_MAYMOVE)
3957-
#ifdef MREMAP_MAYMOVE
3958-
*r |= MREMAP_MAYMOVE;
3959-
#else /* def MREMAP_MAYMOVE */
3960-
{errno = EINVAL; return -1;}
3961-
#endif /* ndef MREMAP_MAYMOVE */
3962-
#else /* def __NetBSD__ */
3963-
if ((x & Mono_Posix_MremapFlags_MREMAP_MAYMOVE) != Mono_Posix_MremapFlags_MREMAP_MAYMOVE)
3964-
*r = MAP_FIXED;
3965-
#endif /* def __NetBSD__ */
3966-
if (x == 0)
3967-
return 0;
3968-
return 0;
3969-
}
3970-
3971-
int Mono_Posix_ToMremapFlags (guint64 x, guint64 *r)
3972-
{
3973-
*r = 0;
3974-
#ifndef __NetBSD__
3975-
if (x == 0)
3976-
return 0;
3977-
#ifdef MREMAP_MAYMOVE
3978-
if ((x & MREMAP_MAYMOVE) == MREMAP_MAYMOVE)
3979-
*r |= Mono_Posix_MremapFlags_MREMAP_MAYMOVE;
3980-
#endif /* ndef MREMAP_MAYMOVE */
3981-
#else /* def __NetBSD__ */
3982-
if ((x & MAP_FIXED) != MAP_FIXED)
3983-
*r |= Mono_Posix_MremapFlags_MREMAP_MAYMOVE;
3984-
#endif
3985-
return 0;
3986-
}
3987-
39883953
int Mono_Posix_FromMsyncFlags (int x, int *r)
39893954
{
39903955
*r = 0;
@@ -5277,7 +5242,7 @@ Mono_Posix_ToSockaddrIn (struct sockaddr_in *from, struct Mono_Posix_SockaddrIn
52775242
#endif /* ndef HAVE_STRUCT_SOCKADDR_IN */
52785243

52795244

5280-
#if defined(HAVE_STRUCT_SOCKADDR_IN6) && !defined(HOST_WIN32)
5245+
#ifdef HAVE_STRUCT_SOCKADDR_IN6
52815246
int
52825247
Mono_Posix_FromSockaddrIn6 (struct Mono_Posix_SockaddrIn6 *from, struct sockaddr_in6 *to)
52835248
{
@@ -5299,7 +5264,7 @@ Mono_Posix_FromSockaddrIn6 (struct Mono_Posix_SockaddrIn6 *from, struct sockaddr
52995264
#endif /* ndef HAVE_STRUCT_SOCKADDR_IN6 */
53005265

53015266

5302-
#if defined(HAVE_STRUCT_SOCKADDR_IN6) && !defined(HOST_WIN32)
5267+
#ifdef HAVE_STRUCT_SOCKADDR_IN6
53035268
int
53045269
Mono_Posix_ToSockaddrIn6 (struct sockaddr_in6 *from, struct Mono_Posix_SockaddrIn6 *to)
53055270
{

support/map.h

+17-22
Original file line numberDiff line numberDiff line change
@@ -760,13 +760,6 @@ enum Mono_Posix_MountFlags {
760760
int Mono_Posix_FromMountFlags (guint64 x, guint64 *r);
761761
int Mono_Posix_ToMountFlags (guint64 x, guint64 *r);
762762

763-
enum Mono_Posix_MremapFlags {
764-
Mono_Posix_MremapFlags_MREMAP_MAYMOVE = 0x0000000000000001,
765-
#define Mono_Posix_MremapFlags_MREMAP_MAYMOVE Mono_Posix_MremapFlags_MREMAP_MAYMOVE
766-
};
767-
int Mono_Posix_FromMremapFlags (guint64 x, guint64 *r);
768-
int Mono_Posix_ToMremapFlags (guint64 x, guint64 *r);
769-
770763
enum Mono_Posix_MsyncFlags {
771764
Mono_Posix_MsyncFlags_MS_ASYNC = 0x00000001,
772765
#define Mono_Posix_MsyncFlags_MS_ASYNC Mono_Posix_MsyncFlags_MS_ASYNC
@@ -2157,6 +2150,7 @@ int map_Mono_Posix_WaitOptions (int wait_options);
21572150
int Mono_Posix_Cmsghdr_getsize (void);
21582151
int Mono_Posix_FromIn6Addr (struct Mono_Posix_In6Addr* source, void* destination);
21592152
int Mono_Posix_FromInAddr (struct Mono_Posix_InAddr* source, void* destination);
2153+
int Mono_Posix_FromMremapFlags (guint64 value, guint64* rval);
21602154
int Mono_Posix_FromRealTimeSignum (int offset, int* rval);
21612155
int Mono_Posix_FromSockaddr (struct Mono_Posix__SockaddrHeader* source, void* destination);
21622156
int Mono_Posix_FromStat (struct Mono_Posix_Stat* source, void* destination);
@@ -2174,48 +2168,48 @@ int Mono_Posix_Stdlib_DumpFilePosition (char* buf, void* handle, int len);
21742168
int Mono_Posix_Stdlib_EOF (void);
21752169
int Mono_Posix_Stdlib_EXIT_FAILURE (void);
21762170
int Mono_Posix_Stdlib_EXIT_SUCCESS (void);
2171+
int Mono_Posix_Stdlib_fclose (void* stream);
2172+
int Mono_Posix_Stdlib_feof (void* stream);
2173+
int Mono_Posix_Stdlib_ferror (void* stream);
2174+
int Mono_Posix_Stdlib_fflush (void* stream);
2175+
int Mono_Posix_Stdlib_fgetc (void* stream);
21772176
int Mono_Posix_Stdlib_fgetpos (void* stream, void* pos);
2177+
void* Mono_Posix_Stdlib_fgets (char* sb, int size, void* stream);
21782178
int Mono_Posix_Stdlib_FILENAME_MAX (void);
2179+
void* Mono_Posix_Stdlib_fopen (const char* path, const char* mode);
21792180
int Mono_Posix_Stdlib_FOPEN_MAX (void);
2181+
int Mono_Posix_Stdlib_fprintf (void* stream, const char* format, const char* message);
2182+
int Mono_Posix_Stdlib_fputc (int c, void* stream);
2183+
int Mono_Posix_Stdlib_fputs (const char* s, void* stream);
21802184
guint64 Mono_Posix_Stdlib_fread (unsigned char* ptr, guint64 size, guint64 nmemb, void* stream);
2185+
void Mono_Posix_Stdlib_free (void* ptr);
2186+
void* Mono_Posix_Stdlib_freopen (const char* path, const char* mode, void* stream);
21812187
int Mono_Posix_Stdlib_fseek (void* stream, gint64 offset, int origin);
21822188
int Mono_Posix_Stdlib_fsetpos (void* stream, void* pos);
21832189
gint64 Mono_Posix_Stdlib_ftell (void* stream);
21842190
guint64 Mono_Posix_Stdlib_fwrite (unsigned char* ptr, guint64 size, guint64 nmemb, void* stream);
2191+
int Mono_Posix_Stdlib_GetLastError (void);
21852192
void Mono_Posix_Stdlib_InvokeSignalHandler (int signum, void* handler);
21862193
int Mono_Posix_Stdlib_L_tmpnam (void);
21872194
void* Mono_Posix_Stdlib_malloc (guint64 size);
21882195
int Mono_Posix_Stdlib_MB_CUR_MAX (void);
21892196
int Mono_Posix_Stdlib_perror (const char* s, int err);
21902197
int Mono_Posix_Stdlib_RAND_MAX (void);
21912198
void* Mono_Posix_Stdlib_realloc (void* ptr, guint64 size);
2192-
void Mono_Posix_Stdlib_free (void* p);
21932199
int Mono_Posix_Stdlib_rewind (void* stream);
21942200
int Mono_Posix_Stdlib_setbuf (void* stream, void* buf);
2195-
int Mono_Posix_Stdlib_GetLastError (void);
21962201
void Mono_Posix_Stdlib_SetLastError (int error);
21972202
int Mono_Posix_Stdlib_setvbuf (void* stream, void* buf, int mode, guint64 size);
2198-
void* Mono_Posix_Stdlib_fopen (char* path, char* mode);
2199-
void* Mono_Posix_Stdlib_freopen (char* path, char* mode, void *stream);
2200-
gint32 Mono_Posix_Stdlib_fprintf (void* stream, char* format, char *message);
2201-
gint32 Mono_Posix_Stdlib_fgetc (void* stream);
2202-
char* Mono_Posix_Stdlib_fgets (char* str, gint32 size, void* stream);
2203-
gint32 Mono_Posix_Stdlib_fputc (gint32 c, void* stream);
2204-
gint32 Mono_Posix_Stdlib_fputs (char* s, void* stream);
2205-
gint32 Mono_Posix_Stdlib_fclose (void* stream);
2206-
gint32 Mono_Posix_Stdlib_fflush (void* stream);
2207-
void* Mono_Posix_Stdlib_tmpfile (void);
2208-
gint32 Mono_Posix_Stdlib_ungetc (gint32 c, void* stream);
2209-
gint32 Mono_Posix_Stdlib_feof (void* stream);
2210-
gint32 Mono_Posix_Stdlib_ferror (void* stream);
22112203
void* Mono_Posix_Stdlib_SIG_DFL (void);
22122204
void* Mono_Posix_Stdlib_SIG_ERR (void);
22132205
void* Mono_Posix_Stdlib_SIG_IGN (void);
22142206
void* Mono_Posix_Stdlib_stderr (void);
22152207
void* Mono_Posix_Stdlib_stdin (void);
22162208
void* Mono_Posix_Stdlib_stdout (void);
22172209
guint64 Mono_Posix_Stdlib_strlen (void* s);
2210+
void* Mono_Posix_Stdlib_tmpfile (void);
22182211
int Mono_Posix_Stdlib_TMP_MAX (void);
2212+
int Mono_Posix_Stdlib_ungetc (int c, void* stream);
22192213
int Mono_Posix_Stdlib__IOFBF (void);
22202214
int Mono_Posix_Stdlib__IOLBF (void);
22212215
int Mono_Posix_Stdlib__IONBF (void);
@@ -2374,6 +2368,7 @@ int Mono_Posix_Syscall_WSTOPSIG (int status);
23742368
int Mono_Posix_Syscall_WTERMSIG (int status);
23752369
int Mono_Posix_ToIn6Addr (void* source, struct Mono_Posix_In6Addr* destination);
23762370
int Mono_Posix_ToInAddr (void* source, struct Mono_Posix_InAddr* destination);
2371+
int Mono_Posix_ToMremapFlags (guint64 value, guint64* rval);
23772372
int Mono_Posix_ToSockaddr (void* source, gint64 size, struct Mono_Posix__SockaddrHeader* destination);
23782373
int Mono_Posix_ToStat (void* source, struct Mono_Posix_Stat* destination);
23792374
int Mono_Posix_ToStatvfs (void* source, struct Mono_Posix_Statvfs* destination);

support/stdio.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -179,19 +179,19 @@ Mono_Posix_Stdlib_setbuf (void* stream, void* buf)
179179
}
180180

181181
void*
182-
Mono_Posix_Stdlib_fopen (char* path, char* mode)
182+
Mono_Posix_Stdlib_fopen (const char* path, const char* mode)
183183
{
184184
return fopen (path, mode);
185185
}
186186

187187
void*
188-
Mono_Posix_Stdlib_freopen (char* path, char* mode, void *stream)
188+
Mono_Posix_Stdlib_freopen (const char* path, const char* mode, void *stream)
189189
{
190190
return freopen (path, mode, stream);
191191
}
192192

193193
gint32
194-
Mono_Posix_Stdlib_fprintf (void* stream, char* format, char *message)
194+
Mono_Posix_Stdlib_fprintf (void* stream, const char* format, const char* message)
195195
{
196196
return fprintf (stream, format, message);
197197
}
@@ -202,7 +202,7 @@ Mono_Posix_Stdlib_fgetc (void* stream)
202202
return fgetc (stream);
203203
}
204204

205-
char*
205+
void*
206206
Mono_Posix_Stdlib_fgets (char* str, gint32 size, void* stream)
207207
{
208208
return fgets (str, size, stream);
@@ -215,7 +215,7 @@ Mono_Posix_Stdlib_fputc (gint32 c, void* stream)
215215
}
216216

217217
gint32
218-
Mono_Posix_Stdlib_fputs (char* s, void* stream)
218+
Mono_Posix_Stdlib_fputs (const char* s, void* stream)
219219
{
220220
return fputs (s, stream);
221221
}

support/sys-mman.c

+42
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,48 @@ Mono_Posix_Syscall_remap_file_pages (void *start, mph_size_t size,
184184
}
185185
#endif /* def HAVE_REMAP_FILE_PAGES */
186186

187+
// This has to be kept in sync with Syscall.cs
188+
enum Mono_Posix_MremapFlags {
189+
Mono_Posix_MremapFlags_MREMAP_MAYMOVE = 0x0000000000000001,
190+
};
191+
192+
// Mono_Posix_FromMremapFlags() and Mono_Posix_ToMremapFlags() are not in map.c because NetBSD needs special treatment for MREMAP_MAYMOVE
193+
int Mono_Posix_FromMremapFlags (guint64 x, guint64 *r)
194+
{
195+
*r = 0;
196+
#ifndef __NetBSD__
197+
if ((x & Mono_Posix_MremapFlags_MREMAP_MAYMOVE) == Mono_Posix_MremapFlags_MREMAP_MAYMOVE)
198+
#ifdef MREMAP_MAYMOVE
199+
*r |= MREMAP_MAYMOVE;
200+
#else /* def MREMAP_MAYMOVE */
201+
{errno = EINVAL; return -1;}
202+
#endif /* ndef MREMAP_MAYMOVE */
203+
#else /* def __NetBSD__ */
204+
if ((x & Mono_Posix_MremapFlags_MREMAP_MAYMOVE) != Mono_Posix_MremapFlags_MREMAP_MAYMOVE)
205+
*r = MAP_FIXED;
206+
#endif /* def __NetBSD__ */
207+
if (x == 0)
208+
return 0;
209+
return 0;
210+
}
211+
212+
int Mono_Posix_ToMremapFlags (guint64 x, guint64 *r)
213+
{
214+
*r = 0;
215+
#ifndef __NetBSD__
216+
if (x == 0)
217+
return 0;
218+
#ifdef MREMAP_MAYMOVE
219+
if ((x & MREMAP_MAYMOVE) == MREMAP_MAYMOVE)
220+
*r |= Mono_Posix_MremapFlags_MREMAP_MAYMOVE;
221+
#endif /* ndef MREMAP_MAYMOVE */
222+
#else /* def __NetBSD__ */
223+
if ((x & MAP_FIXED) != MAP_FIXED)
224+
*r |= Mono_Posix_MremapFlags_MREMAP_MAYMOVE;
225+
#endif
226+
return 0;
227+
}
228+
187229
G_END_DECLS
188230

189231
/*

0 commit comments

Comments
 (0)