summaryrefslogtreecommitdiff
path: root/TSRM/tsrm_win32.c
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2016-08-23 00:27:17 +0200
committerAnatol Belski <ab@php.net>2016-08-23 00:27:17 +0200
commitbecc5cd11bbd7ffca365e28d48eeff450e141493 (patch)
tree93a56f4a2a66ff680a42417d40bada6f430f4a4e /TSRM/tsrm_win32.c
parent6790932eaa8c4dce21080c4094301829fd1f0053 (diff)
downloadphp-git-becc5cd11bbd7ffca365e28d48eeff450e141493.tar.gz
sync shm* implementation signatures with POSIX
Diffstat (limited to 'TSRM/tsrm_win32.c')
-rw-r--r--TSRM/tsrm_win32.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c
index e3d311e418..271422df42 100644
--- a/TSRM/tsrm_win32.c
+++ b/TSRM/tsrm_win32.c
@@ -426,7 +426,7 @@ static process_pair *process_get(FILE *stream)
return ptr;
}
-static shm_pair *shm_get(int key, void *addr)
+static shm_pair *shm_get(key_t key, void *addr)
{
shm_pair *ptr;
shm_pair *newptr;
@@ -639,17 +639,13 @@ TSRM_API int pclose(FILE *stream)
return termstat;
}
-TSRM_API int shmget(int key, int size, int flags)
+TSRM_API int shmget(key_t key, size_t size, int flags)
{
shm_pair *shm;
char shm_segment[26], shm_info[29];
HANDLE shm_handle, info_handle;
BOOL created = FALSE;
- if (size < 0) {
- return -1;
- }
-
snprintf(shm_segment, sizeof(shm_segment), "TSRM_SHM_SEGMENT:%d", key);
snprintf(shm_info, sizeof(shm_info), "TSRM_SHM_DESCRIPTOR:%d", key);
@@ -658,7 +654,14 @@ TSRM_API int shmget(int key, int size, int flags)
if (!shm_handle && !info_handle) {
if (flags & IPC_CREAT) {
- shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, shm_segment);
+#if SIZEOF_SIZE_T == 8
+ DWORD high = size >> 32;
+ DWORD low = (DWORD)size;
+#else
+ DWORD high = 0;
+ DWORD low = size;
+#endif
+ shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, high, low, shm_segment);
info_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(shm->descriptor), shm_info);
created = TRUE;
}