sys-mman.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. * <sys/mman.h> wrapper functions.
  3. *
  4. * Authors:
  5. * Jonathan Pryor ([email protected])
  6. *
  7. * Copyright (C) 2004-2006 Jonathan Pryor
  8. */
  9. #define _XOPEN_SOURCE 600
  10. #include <sys/types.h>
  11. #include <sys/mman.h>
  12. #include <errno.h>
  13. #include "map.h"
  14. #include "mph.h"
  15. G_BEGIN_DECLS
  16. void*
  17. Mono_Posix_Syscall_mmap (void *start, mph_size_t length, int prot, int flags,
  18. int fd, mph_off_t offset)
  19. {
  20. int _prot, _flags;
  21. mph_return_val_if_size_t_overflow (length, MAP_FAILED);
  22. mph_return_val_if_off_t_overflow (offset, MAP_FAILED);
  23. if (Mono_Posix_FromMmapProts (prot, &_prot) == -1)
  24. return MAP_FAILED;
  25. if (Mono_Posix_FromMmapFlags (flags, &_flags) == -1)
  26. return MAP_FAILED;
  27. return mmap (start, (size_t) length, _prot, _flags, fd, (off_t) offset);
  28. }
  29. int
  30. Mono_Posix_Syscall_munmap (void *start, mph_size_t length)
  31. {
  32. mph_return_if_size_t_overflow (length);
  33. return munmap (start, (size_t) length);
  34. }
  35. int
  36. Mono_Posix_Syscall_mprotect (void *start, mph_size_t len, int prot)
  37. {
  38. int _prot;
  39. mph_return_if_size_t_overflow (len);
  40. if (Mono_Posix_FromMmapProts (prot, &_prot) == -1)
  41. return -1;
  42. return mprotect (start, (size_t) len, _prot);
  43. }
  44. int
  45. Mono_Posix_Syscall_msync (void *start, mph_size_t len, int flags)
  46. {
  47. int _flags;
  48. mph_return_if_size_t_overflow (len);
  49. if (Mono_Posix_FromMsyncFlags (flags, &_flags) == -1)
  50. return -1;
  51. return msync (start, (size_t) len, _flags);
  52. }
  53. int
  54. Mono_Posix_Syscall_mlock (void *start, mph_size_t len)
  55. {
  56. mph_return_if_size_t_overflow (len);
  57. return mlock (start, (size_t) len);
  58. }
  59. int
  60. Mono_Posix_Syscall_munlock (void *start, mph_size_t len)
  61. {
  62. mph_return_if_size_t_overflow (len);
  63. return munlock (start, (size_t) len);
  64. }
  65. #ifdef HAVE_MREMAP
  66. void*
  67. Mono_Posix_Syscall_mremap (void *old_address, mph_size_t old_size,
  68. mph_size_t new_size, guint64 flags)
  69. {
  70. guint64 _flags;
  71. mph_return_val_if_size_t_overflow (old_size, MAP_FAILED);
  72. mph_return_val_if_size_t_overflow (new_size, MAP_FAILED);
  73. if (Mono_Posix_FromMremapFlags (flags, &_flags) == -1)
  74. return MAP_FAILED;
  75. return mremap (old_address, (size_t) old_size, (size_t) new_size,
  76. (unsigned long) _flags);
  77. }
  78. #endif /* def HAVE_MREMAP */
  79. int
  80. Mono_Posix_Syscall_mincore (void *start, mph_size_t length, unsigned char *vec)
  81. {
  82. mph_return_if_size_t_overflow (length);
  83. return mincore (start, (size_t) length, vec);
  84. }
  85. #ifdef HAVE_POSIX_MADVISE
  86. gint32
  87. Mono_Posix_Syscall_posix_madvise (void *addr, mph_size_t len, gint32 advice)
  88. {
  89. mph_return_if_size_t_overflow (len);
  90. if (Mono_Posix_FromPosixMadviseAdvice (advice, &advice) == -1)
  91. return -1;
  92. return posix_madvise (addr, (size_t) len, advice);
  93. }
  94. #endif /* def HAVE_POSIX_MADVISE */
  95. #ifdef HAVE_REMAP_FILE_PAGES
  96. int
  97. Mono_Posix_Syscall_remap_file_pages (void *start, mph_size_t size,
  98. int prot, mph_ssize_t pgoff, int flags)
  99. {
  100. int _prot, _flags;
  101. mph_return_if_size_t_overflow (size);
  102. mph_return_if_ssize_t_overflow (pgoff);
  103. if (Mono_Posix_FromMmapProts (prot, &_prot) == -1)
  104. return -1;
  105. if (Mono_Posix_FromMmapFlags (flags, &_flags) == -1)
  106. return -1;
  107. return remap_file_pages (start, (size_t) size, _prot, (ssize_t) pgoff, _flags);
  108. }
  109. #endif /* def HAVE_REMAP_FILE_PAGES */
  110. G_END_DECLS
  111. /*
  112. * vim: noexpandtab
  113. */