diff options
Diffstat (limited to 'src/cmdline.c')
-rw-r--r-- | src/cmdline.c | 67 |
1 files changed, 4 insertions, 63 deletions
diff --git a/src/cmdline.c b/src/cmdline.c index a86b81b..a1ebafe 100644 --- a/src/cmdline.c +++ b/src/cmdline.c @@ -143,25 +143,7 @@ remove_shared_memory(key_t key) static int -acquire_semaphore(key_t key, int semaphore, int delta, int undo) -{ - struct sembuf op; - int id; - - id = semget(key, SEMAPHORES, 0600); - if (id == -1) - return -1; - - op.sem_op = -delta; - op.sem_num = semaphore; - op.sem_flg = undo * SEM_UNDO; - - return semop(id, &op, 1); -} - - -static int -release_semaphore(key_t key, int semaphore, int delta, int undo) +semaphore_op(key_t key, int semaphore, int delta, int undo) { struct sembuf op; int id; @@ -178,50 +160,9 @@ release_semaphore(key_t key, int semaphore, int delta, int undo) } -static int -zero_semaphore(key_t key, int semaphore) -{ - struct sembuf op; - int id; - - id = semget(key, SEMAPHORES, 0600); - if (id == -1) - return -1; - - op.sem_op = 0; - op.sem_num = semaphore; - op.sem_flg = 0; - - return semop(id, &op, 1); -} - - -static int -read_semaphore(key_t key, int semaphore, int *z, int *n, int *v) -{ - int id, r; - - id = semget(key, SEMAPHORES, 0600); - if (id == -1) - return -1; - - if (r = semctl(id, semaphore, GETZCNT), r == -1) - return -1; - if (z) - *z = r; - - if (r = semctl(id, semaphore, GETNCNT), r == -1) - return -1; - if (n) - *n = r; - - if (r = semctl(id, semaphore, GETVAL), r == -1) - return -1; - if (v) - *v = r; - - return 0; -} +#define acquire_semaphore(key, semaphore, delta, undo) semaphore_op(key, semaphore, -delta, undo) +#define release_semaphore(key, semaphore, delta, undo) semaphore_op(key, semaphore, +delta, undo) +#define zero_semaphore(key, semaphore) semaphore_op(key, semaphore, 0, 0) static int |