13ab539dcSDavid Malone /*- 23ab539dcSDavid Malone * Copyright (c) 2002 Doug Rabson 33ab539dcSDavid Malone * All rights reserved. 43ab539dcSDavid Malone * 53ab539dcSDavid Malone * Redistribution and use in source and binary forms, with or without 63ab539dcSDavid Malone * modification, are permitted provided that the following conditions 73ab539dcSDavid Malone * are met: 83ab539dcSDavid Malone * 1. Redistributions of source code must retain the above copyright 93ab539dcSDavid Malone * notice, this list of conditions and the following disclaimer. 103ab539dcSDavid Malone * 2. Redistributions in binary form must reproduce the above copyright 113ab539dcSDavid Malone * notice, this list of conditions and the following disclaimer in the 123ab539dcSDavid Malone * documentation and/or other materials provided with the distribution. 133ab539dcSDavid Malone * 143ab539dcSDavid Malone * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 153ab539dcSDavid Malone * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 163ab539dcSDavid Malone * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 173ab539dcSDavid Malone * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 183ab539dcSDavid Malone * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 193ab539dcSDavid Malone * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 203ab539dcSDavid Malone * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 213ab539dcSDavid Malone * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 223ab539dcSDavid Malone * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 233ab539dcSDavid Malone * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 243ab539dcSDavid Malone * SUCH DAMAGE. 253ab539dcSDavid Malone * 263ab539dcSDavid Malone */ 273ab539dcSDavid Malone 283ab539dcSDavid Malone 29333fc21eSDavid E. O'Brien #include <sys/cdefs.h> 30333fc21eSDavid E. O'Brien __FBSDID("$FreeBSD$"); 31333fc21eSDavid E. O'Brien 32b648d480SJohn Baldwin #define _WANT_SEMUN_OLD 33b648d480SJohn Baldwin 345b65bca2SDoug Rabson #include <sys/types.h> 355b65bca2SDoug Rabson #include <sys/ipc.h> 365b65bca2SDoug Rabson #include <sys/sem.h> 373f58cad6SSteve Price #include <stdarg.h> 383f58cad6SSteve Price #include <stdlib.h> 395b65bca2SDoug Rabson 40b648d480SJohn Baldwin int __semctl(int semid, int semnum, int cmd, union semun *arg); 41b648d480SJohn Baldwin int freebsd7___semctl(int semid, int semnum, int cmd, union semun_old *arg); 42e0554a53SJacques Vidrine 43b648d480SJohn Baldwin int 44b648d480SJohn Baldwin semctl(int semid, int semnum, int cmd, ...) 455b65bca2SDoug Rabson { 463f58cad6SSteve Price va_list ap; 473f58cad6SSteve Price union semun semun; 483f58cad6SSteve Price union semun *semun_ptr; 49a82bbc73SAlfred Perlstein 503f58cad6SSteve Price va_start(ap, cmd); 513f58cad6SSteve Price if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL 523f58cad6SSteve Price || cmd == SETVAL || cmd == SETALL) { 533f58cad6SSteve Price semun = va_arg(ap, union semun); 543f58cad6SSteve Price semun_ptr = &semun; 553f58cad6SSteve Price } else { 563f58cad6SSteve Price semun_ptr = NULL; 573f58cad6SSteve Price } 583f58cad6SSteve Price va_end(ap); 593f58cad6SSteve Price 603f58cad6SSteve Price return (__semctl(semid, semnum, cmd, semun_ptr)); 615b65bca2SDoug Rabson } 62b648d480SJohn Baldwin 63b648d480SJohn Baldwin int 64b648d480SJohn Baldwin freebsd7_semctl(int semid, int semnum, int cmd, ...) 65b648d480SJohn Baldwin { 66b648d480SJohn Baldwin va_list ap; 67b648d480SJohn Baldwin union semun_old semun; 68b648d480SJohn Baldwin union semun_old *semun_ptr; 69b648d480SJohn Baldwin 70b648d480SJohn Baldwin va_start(ap, cmd); 71b648d480SJohn Baldwin if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL 72b648d480SJohn Baldwin || cmd == SETVAL || cmd == SETALL) { 73b648d480SJohn Baldwin semun = va_arg(ap, union semun_old); 74b648d480SJohn Baldwin semun_ptr = &semun; 75b648d480SJohn Baldwin } else { 76b648d480SJohn Baldwin semun_ptr = NULL; 77b648d480SJohn Baldwin } 78b648d480SJohn Baldwin va_end(ap); 79b648d480SJohn Baldwin 80b648d480SJohn Baldwin return (freebsd7___semctl(semid, semnum, cmd, semun_ptr)); 81b648d480SJohn Baldwin } 82b648d480SJohn Baldwin 83b648d480SJohn Baldwin __sym_compat(semctl, freebsd7_semctl, FBSD_1.0); 84