diff options
author | Anatol Belski <ab@php.net> | 2016-08-23 00:27:17 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2016-08-23 00:27:17 +0200 |
commit | becc5cd11bbd7ffca365e28d48eeff450e141493 (patch) | |
tree | 93a56f4a2a66ff680a42417d40bada6f430f4a4e /TSRM/tsrm_win32.c | |
parent | 6790932eaa8c4dce21080c4094301829fd1f0053 (diff) | |
download | php-git-becc5cd11bbd7ffca365e28d48eeff450e141493.tar.gz |
sync shm* implementation signatures with POSIX
Diffstat (limited to 'TSRM/tsrm_win32.c')
-rw-r--r-- | TSRM/tsrm_win32.c | 17 |
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; } |