Commit a91c5be6 authored by Bruce Momjian's avatar Bruce Momjian

pgindent new Win32 files.

parent 1a67e486
...@@ -13,11 +13,14 @@ ...@@ -13,11 +13,14 @@
#include <errno.h> #include <errno.h>
typedef struct { typedef struct
{
int m_numSems; int m_numSems;
off_t m_semaphoreHandles; // offset from beginning of header off_t m_semaphoreHandles;
off_t m_semaphoreCounts; // offset from beginning of header //offset from beginning of header
} win32_sem_set_hdr; off_t m_semaphoreCounts;
//offset from beginning of header
} win32_sem_set_hdr;
/* Control of a semaphore pool. The pool is an area in which we stored all /* Control of a semaphore pool. The pool is an area in which we stored all
** the semIds of the pool. The first long is the number of semaphore ** the semIds of the pool. The first long is the number of semaphore
...@@ -27,22 +30,24 @@ typedef struct { ...@@ -27,22 +30,24 @@ typedef struct {
int int
semctl(int semId, int semNum, int flag, union semun semun) semctl(int semId, int semNum, int flag, union semun semun)
{ {
win32_sem_set_hdr* the_set = (win32_sem_set_hdr*)MAKE_PTR(semId); win32_sem_set_hdr *the_set = (win32_sem_set_hdr *) MAKE_PTR(semId);
/* semNum might be 0 */ /* semNum might be 0 */
/* semun.array contains the sem initial values */ /* semun.array contains the sem initial values */
int* sem_counts = (int*)((off_t)the_set + the_set->m_semaphoreCounts); int *sem_counts = (int *) ((off_t) the_set + the_set->m_semaphoreCounts);
/* Fix the count of all sem of the pool to semun.array */ /* Fix the count of all sem of the pool to semun.array */
if (flag == SETALL) if (flag == SETALL)
{ {
int i; int i;
struct sembuf sops; struct sembuf sops;
sops.sem_flg = IPC_NOWAIT; sops.sem_flg = IPC_NOWAIT;
for (i = 0; i < the_set->m_numSems; ++i) { for (i = 0; i < the_set->m_numSems; ++i)
{
if (semun.array[i] == sem_counts[i]) if (semun.array[i] == sem_counts[i])
continue; /* Nothing to do */ continue; /* Nothing to do */
if (semun.array[i] < sem_counts[i]) if (semun.array[i] < sem_counts[i])
sops.sem_op = -1; sops.sem_op = -1;
...@@ -50,7 +55,7 @@ semctl(int semId, int semNum, int flag, union semun semun) ...@@ -50,7 +55,7 @@ semctl(int semId, int semNum, int flag, union semun semun)
sops.sem_op = 1; sops.sem_op = 1;
sops.sem_num = i; sops.sem_num = i;
/* Quickly lock/unlock the semaphore (if we can) */ /* Quickly lock/unlock the semaphore (if we can) */
if (semop(semId, &sops, 1) < 0) if (semop(semId, &sops, 1) < 0)
return -1; return -1;
...@@ -61,8 +66,10 @@ semctl(int semId, int semNum, int flag, union semun semun) ...@@ -61,8 +66,10 @@ semctl(int semId, int semNum, int flag, union semun semun)
/* Fix the count of one semaphore to semun.val */ /* Fix the count of one semaphore to semun.val */
else if (flag == SETVAL) else if (flag == SETVAL)
{ {
if (semun.val != sem_counts[semNum]) { if (semun.val != sem_counts[semNum])
{
struct sembuf sops; struct sembuf sops;
sops.sem_flg = IPC_NOWAIT; sops.sem_flg = IPC_NOWAIT;
sops.sem_num = semNum; sops.sem_num = semNum;
...@@ -70,7 +77,7 @@ semctl(int semId, int semNum, int flag, union semun semun) ...@@ -70,7 +77,7 @@ semctl(int semId, int semNum, int flag, union semun semun)
sops.sem_op = -1; sops.sem_op = -1;
else else
sops.sem_op = 1; sops.sem_op = 1;
/* Quickly lock/unlock the semaphore (if we can) */ /* Quickly lock/unlock the semaphore (if we can) */
if (semop(semId, &sops, 1) < 0) if (semop(semId, &sops, 1) < 0)
return -1; return -1;
...@@ -82,8 +89,8 @@ semctl(int semId, int semNum, int flag, union semun semun) ...@@ -82,8 +89,8 @@ semctl(int semId, int semNum, int flag, union semun semun)
/* Delete the pool */ /* Delete the pool */
else if (flag == IPC_RMID) else if (flag == IPC_RMID)
{ {
int i; int i;
HANDLE* sem_handles = (HANDLE*)((off_t)the_set + the_set->m_semaphoreHandles); HANDLE *sem_handles = (HANDLE *) ((off_t) the_set + the_set->m_semaphoreHandles);
/* Loop over all semaphore to delete them */ /* Loop over all semaphore to delete them */
for (i = 0; i < the_set->m_numSems; ++i) for (i = 0; i < the_set->m_numSems; ++i)
...@@ -94,15 +101,11 @@ semctl(int semId, int semNum, int flag, union semun semun) ...@@ -94,15 +101,11 @@ semctl(int semId, int semNum, int flag, union semun semun)
/* Get the current semaphore count */ /* Get the current semaphore count */
else if (flag == GETNCNT) else if (flag == GETNCNT)
{
return the_set->m_numSems; return the_set->m_numSems;
}
/* Get the current semaphore count of the first semaphore in the pool */ /* Get the current semaphore count of the first semaphore in the pool */
else if (flag == GETVAL) else if (flag == GETVAL)
{
return sem_counts[semNum]; return sem_counts[semNum];
}
/* Other commands not yet supported */ /* Other commands not yet supported */
else else
...@@ -116,17 +119,17 @@ semctl(int semId, int semNum, int flag, union semun semun) ...@@ -116,17 +119,17 @@ semctl(int semId, int semNum, int flag, union semun semun)
int int
semget(int semKey, int semNum, int flags) semget(int semKey, int semNum, int flags)
{ {
char semname[32]; char semname[32];
char cur_num[20]; char cur_num[20];
DWORD last_error; DWORD last_error;
char* num_part; char *num_part;
bool ans = true; bool ans = true;
SECURITY_ATTRIBUTES sec_attrs; SECURITY_ATTRIBUTES sec_attrs;
HANDLE cur_handle; HANDLE cur_handle;
bool found = false; bool found = false;
Size sem_set_size = sizeof(win32_sem_set_hdr) + semNum * (sizeof(HANDLE) + sizeof(int)); Size sem_set_size = sizeof(win32_sem_set_hdr) + semNum * (sizeof(HANDLE) + sizeof(int));
HANDLE* sem_handles = NULL; HANDLE *sem_handles = NULL;
int* sem_counts = NULL; int *sem_counts = NULL;
sec_attrs.nLength = sizeof(sec_attrs); sec_attrs.nLength = sizeof(sec_attrs);
sec_attrs.lpSecurityDescriptor = NULL; sec_attrs.lpSecurityDescriptor = NULL;
...@@ -135,23 +138,27 @@ semget(int semKey, int semNum, int flags) ...@@ -135,23 +138,27 @@ semget(int semKey, int semNum, int flags)
sprintf(semname, "PG_SEMSET.%d.", semKey); sprintf(semname, "PG_SEMSET.%d.", semKey);
num_part = semname + strlen(semname); num_part = semname + strlen(semname);
strcpy(num_part, _itoa(_getpid() * -1, cur_num, 10)); /* For shared memory, include the pid */ strcpy(num_part, _itoa(_getpid() * -1, cur_num, 10)); /* For shared memory,
win32_sem_set_hdr* new_set = (win32_sem_set_hdr*)ShmemInitStruct(semname, sem_set_size, &found); * include the pid */
win32_sem_set_hdr *new_set = (win32_sem_set_hdr *) ShmemInitStruct(semname, sem_set_size, &found);
if (found) { if (found)
{
/* This should *never* happen */ /* This should *never* happen */
errno = EEXIST; errno = EEXIST;
return -1; return -1;
} }
new_set->m_numSems = semNum; new_set->m_numSems = semNum;
new_set->m_semaphoreHandles = sizeof(win32_sem_set_hdr); // array starts after header new_set->m_semaphoreHandles = sizeof(win32_sem_set_hdr);
new_set->m_semaphoreCounts = new_set->m_semaphoreHandles + (sizeof(HANDLE) * semNum); //array starts after header
new_set->m_semaphoreCounts = new_set->m_semaphoreHandles + (sizeof(HANDLE) * semNum);
sem_handles = (HANDLE*)((off_t)new_set + new_set->m_semaphoreHandles); sem_handles = (HANDLE *) ((off_t) new_set + new_set->m_semaphoreHandles);
sem_counts = (int*)((off_t)new_set + new_set->m_semaphoreCounts); sem_counts = (int *) ((off_t) new_set + new_set->m_semaphoreCounts);
for (int i=0; i<semNum && ans; ++i) { for (int i = 0; i < semNum && ans; ++i)
{
strcpy(num_part, _itoa(i, cur_num, 10)); strcpy(num_part, _itoa(i, cur_num, 10));
if (flags & IPC_CREAT) if (flags & IPC_CREAT)
...@@ -174,11 +181,13 @@ semget(int semKey, int semNum, int flags) ...@@ -174,11 +181,13 @@ semget(int semKey, int semNum, int flags)
} }
} }
if (ans) { if (ans)
return MAKE_OFFSET(new_set); return MAKE_OFFSET(new_set);
} else { else
// Blow away what we've got right now... {
for (int i=0; i<semNum; ++i) { /* Blow away what we've got right now... */
for (int i = 0; i < semNum; ++i)
{
if (sem_handles[i]) if (sem_handles[i])
CloseHandle(sem_handles[i]); CloseHandle(sem_handles[i]);
else else
...@@ -193,13 +202,17 @@ semget(int semKey, int semNum, int flags) ...@@ -193,13 +202,17 @@ semget(int semKey, int semNum, int flags)
int int
semop(int semId, struct sembuf * sops, int nsops) semop(int semId, struct sembuf * sops, int nsops)
{ {
win32_sem_set_hdr* the_set = (win32_sem_set_hdr*)MAKE_PTR(semId); win32_sem_set_hdr *the_set = (win32_sem_set_hdr *) MAKE_PTR(semId);
HANDLE* sem_handles = (HANDLE*)((off_t)the_set + the_set->m_semaphoreHandles); HANDLE *sem_handles = (HANDLE *) ((off_t) the_set + the_set->m_semaphoreHandles);
int* sem_counts = (int*)((off_t)the_set + the_set->m_semaphoreCounts); int *sem_counts = (int *) ((off_t) the_set + the_set->m_semaphoreCounts);
HANDLE cur_handle; HANDLE cur_handle;
if (nsops != 1) { if (nsops != 1)
/* Not supported (we return on 1st success, and don't cancel earlier ops) */ {
/*
* Not supported (we return on 1st success, and don't cancel
* earlier ops)
*/
errno = E2BIG; errno = E2BIG;
return -1; return -1;
} }
...@@ -208,23 +221,27 @@ semop(int semId, struct sembuf * sops, int nsops) ...@@ -208,23 +221,27 @@ semop(int semId, struct sembuf * sops, int nsops)
if (sops[0].sem_op == -1) if (sops[0].sem_op == -1)
{ {
DWORD ret; DWORD ret;
if (sops[0].sem_flg & IPC_NOWAIT) if (sops[0].sem_flg & IPC_NOWAIT)
ret = WaitForSingleObject(cur_handle, 0); ret = WaitForSingleObject(cur_handle, 0);
else else
ret = WaitForSingleObject(cur_handle, INFINITE); ret = WaitForSingleObject(cur_handle, INFINITE);
if (ret == WAIT_OBJECT_0) { if (ret == WAIT_OBJECT_0)
{
/* We got it! */ /* We got it! */
sem_counts[sops[0].sem_num]--; sem_counts[sops[0].sem_num]--;
return 0; return 0;
} else if (ret == WAIT_TIMEOUT) }
else if (ret == WAIT_TIMEOUT)
/* Couldn't get it */ /* Couldn't get it */
errno = EAGAIN; errno = EAGAIN;
else else
errno = EIDRM; errno = EIDRM;
} }
else if (sops[0].sem_op > 0) { else if (sops[0].sem_op > 0)
{
/* Don't want the lock anymore */ /* Don't want the lock anymore */
sem_counts[sops[0].sem_num]++; sem_counts[sops[0].sem_num]++;
ReleaseSemaphore(cur_handle, sops[0].sem_op, NULL); ReleaseSemaphore(cur_handle, sops[0].sem_op, NULL);
......
...@@ -28,19 +28,20 @@ shmdt(const void *shmaddr) ...@@ -28,19 +28,20 @@ shmdt(const void *shmaddr)
/* Attach to an existing area */ /* Attach to an existing area */
void * void *
shmat(int memId, void* shmaddr, int flag) shmat(int memId, void *shmaddr, int flag)
{ {
/* KEW_TODO -- shmat needs to count # attached to shared mem */ /* TODO -- shmat needs to count # attached to shared mem */
void *lpmem = MapViewOfFileEx((HANDLE)memId, void *lpmem = MapViewOfFileEx((HANDLE) memId,
FILE_MAP_WRITE | FILE_MAP_READ, FILE_MAP_WRITE | FILE_MAP_READ,
0, 0, /* (DWORD)pshmdsc->segsize */ s_segsize, shmaddr); 0, 0, /* (DWORD)pshmdsc->segsize */ s_segsize, shmaddr);
if (lpmem == NULL) { if (lpmem == NULL)
lpmem = (void *)-1; {
lpmem = (void *) -1;
errno = GetLastError(); errno = GetLastError();
} }
return lpmem; return lpmem;
} }
/* Control a shared mem area */ /* Control a shared mem area */
...@@ -50,21 +51,24 @@ shmctl(int shmid, int flag, struct shmid_ds * dummy) ...@@ -50,21 +51,24 @@ shmctl(int shmid, int flag, struct shmid_ds * dummy)
if (flag == IPC_RMID) if (flag == IPC_RMID)
{ {
/* Delete the area */ /* Delete the area */
CloseHandle((HANDLE)shmid); CloseHandle((HANDLE) shmid);
return 0; return 0;
} }
if (flag == IPC_STAT) if (flag == IPC_STAT)
{ {
/* Can only test for if exists */ /* Can only test for if exists */
int hmap = shmget(shmid, 0, 0); int hmap = shmget(shmid, 0, 0);
if (hmap < 0) {
if (hmap < 0)
{
/* Shared memory does not exist */ /* Shared memory does not exist */
errno = EINVAL; errno = EINVAL;
return -1; return -1;
} }
else { else
{
/* Shared memory does exist and must be in use */ /* Shared memory does exist and must be in use */
shmctl(hmap, IPC_RMID, NULL); /* Release our hold on it */ shmctl(hmap, IPC_RMID, NULL); /* Release our hold on it */
errno = 0; errno = 0;
return 0; return 0;
} }
...@@ -78,33 +82,37 @@ shmctl(int shmid, int flag, struct shmid_ds * dummy) ...@@ -78,33 +82,37 @@ shmctl(int shmid, int flag, struct shmid_ds * dummy)
int int
shmget(int memKey, int size, int flag) shmget(int memKey, int size, int flag)
{ {
HANDLE hmap; HANDLE hmap;
char szShareMem[32]; char szShareMem[32];
DWORD dwRet; DWORD dwRet;
s_segsize = size; s_segsize = size;
sprintf(szShareMem, "sharemem.%d", memKey); sprintf(szShareMem, "sharemem.%d", memKey);
if (flag & IPC_CREAT) { if (flag & IPC_CREAT)
hmap = CreateFileMapping((HANDLE)0xFFFFFFFF, /* Use the swap file */ {
NULL, hmap = CreateFileMapping((HANDLE) 0xFFFFFFFF, /* Use the swap file */
PAGE_READWRITE, /* Memory is Read/Write */ NULL,
0L, /* Size Upper 32 Bits */ PAGE_READWRITE, /* Memory is Read/Write */
(DWORD)s_segsize, /* Size Lower 32 bits*/ 0L, /* Size Upper 32 Bits */
szShareMem); (DWORD) s_segsize, /* Size Lower 32 bits */
szShareMem);
} }
else { else
{
hmap = OpenFileMapping(FILE_MAP_ALL_ACCESS, hmap = OpenFileMapping(FILE_MAP_ALL_ACCESS,
FALSE, FALSE,
szShareMem); szShareMem);
if (!hmap) { if (!hmap)
{
errno = ENOENT; errno = ENOENT;
return -1; return -1;
} }
} }
dwRet = GetLastError(); dwRet = GetLastError();
if (dwRet == ERROR_ALREADY_EXISTS && hmap && (flag & (IPC_CREAT | IPC_EXCL))) { if (dwRet == ERROR_ALREADY_EXISTS && hmap && (flag & (IPC_CREAT | IPC_EXCL)))
{
/* Caller wanted to create the segment -- error if already exists */ /* Caller wanted to create the segment -- error if already exists */
CloseHandle(hmap); CloseHandle(hmap);
errno = EEXIST; errno = EEXIST;
...@@ -116,5 +124,5 @@ shmget(int memKey, int size, int flag) ...@@ -116,5 +124,5 @@ shmget(int memKey, int size, int flag)
return -1; return -1;
} }
return (int)hmap; return (int) hmap;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment