13ab539dcSDavid Malone /*- 2d915a14eSPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3d915a14eSPedro F. Giffuni * 43ab539dcSDavid Malone * Copyright (c) 2002 Doug Rabson 53ab539dcSDavid Malone * All rights reserved. 63ab539dcSDavid Malone * 73ab539dcSDavid Malone * Redistribution and use in source and binary forms, with or without 83ab539dcSDavid Malone * modification, are permitted provided that the following conditions 93ab539dcSDavid Malone * are met: 103ab539dcSDavid Malone * 1. Redistributions of source code must retain the above copyright 113ab539dcSDavid Malone * notice, this list of conditions and the following disclaimer. 123ab539dcSDavid Malone * 2. Redistributions in binary form must reproduce the above copyright 133ab539dcSDavid Malone * notice, this list of conditions and the following disclaimer in the 143ab539dcSDavid Malone * documentation and/or other materials provided with the distribution. 153ab539dcSDavid Malone * 163ab539dcSDavid Malone * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 173ab539dcSDavid Malone * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 183ab539dcSDavid Malone * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 193ab539dcSDavid Malone * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 203ab539dcSDavid Malone * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 213ab539dcSDavid Malone * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 223ab539dcSDavid Malone * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 233ab539dcSDavid Malone * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 243ab539dcSDavid Malone * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 253ab539dcSDavid Malone * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 263ab539dcSDavid Malone * SUCH DAMAGE. 273ab539dcSDavid Malone * 283ab539dcSDavid Malone */ 293ab539dcSDavid Malone 303ab539dcSDavid Malone 31333fc21eSDavid E. O'Brien #include <sys/cdefs.h> 32333fc21eSDavid E. O'Brien __FBSDID("$FreeBSD$"); 33333fc21eSDavid E. O'Brien 344798b7f3SAndrew Turner #ifndef NO_COMPAT7 35b648d480SJohn Baldwin #define _WANT_SEMUN_OLD 364798b7f3SAndrew Turner #endif 37*6d0fe480SBrooks Davis #define _WANT_SEMUN 38b648d480SJohn Baldwin 395b65bca2SDoug Rabson #include <sys/types.h> 405b65bca2SDoug Rabson #include <sys/ipc.h> 415b65bca2SDoug Rabson #include <sys/sem.h> 423f58cad6SSteve Price #include <stdarg.h> 433f58cad6SSteve Price #include <stdlib.h> 445b65bca2SDoug Rabson 45b648d480SJohn Baldwin int __semctl(int semid, int semnum, int cmd, union semun *arg); 464798b7f3SAndrew Turner #ifndef NO_COMPAT7 47b648d480SJohn Baldwin int freebsd7___semctl(int semid, int semnum, int cmd, union semun_old *arg); 48e0b54d01SCraig Rodrigues int freebsd7_semctl(int semid, int semnum, int cmd, ...); 494798b7f3SAndrew Turner #endif 50e0554a53SJacques Vidrine 51b648d480SJohn Baldwin int 52b648d480SJohn Baldwin semctl(int semid, int semnum, int cmd, ...) 535b65bca2SDoug Rabson { 543f58cad6SSteve Price va_list ap; 553f58cad6SSteve Price union semun semun; 563f58cad6SSteve Price union semun *semun_ptr; 57a82bbc73SAlfred Perlstein 583f58cad6SSteve Price va_start(ap, cmd); 593f58cad6SSteve Price if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL 603f58cad6SSteve Price || cmd == SETVAL || cmd == SETALL) { 613f58cad6SSteve Price semun = va_arg(ap, union semun); 623f58cad6SSteve Price semun_ptr = &semun; 633f58cad6SSteve Price } else { 643f58cad6SSteve Price semun_ptr = NULL; 653f58cad6SSteve Price } 663f58cad6SSteve Price va_end(ap); 673f58cad6SSteve Price 683f58cad6SSteve Price return (__semctl(semid, semnum, cmd, semun_ptr)); 695b65bca2SDoug Rabson } 70b648d480SJohn Baldwin 714798b7f3SAndrew Turner #ifndef NO_COMPAT7 72b648d480SJohn Baldwin int 73b648d480SJohn Baldwin freebsd7_semctl(int semid, int semnum, int cmd, ...) 74b648d480SJohn Baldwin { 75b648d480SJohn Baldwin va_list ap; 76b648d480SJohn Baldwin union semun_old semun; 77b648d480SJohn Baldwin union semun_old *semun_ptr; 78b648d480SJohn Baldwin 79b648d480SJohn Baldwin va_start(ap, cmd); 80b648d480SJohn Baldwin if (cmd == IPC_SET || cmd == IPC_STAT || cmd == GETALL 81b648d480SJohn Baldwin || cmd == SETVAL || cmd == SETALL) { 82b648d480SJohn Baldwin semun = va_arg(ap, union semun_old); 83b648d480SJohn Baldwin semun_ptr = &semun; 84b648d480SJohn Baldwin } else { 85b648d480SJohn Baldwin semun_ptr = NULL; 86b648d480SJohn Baldwin } 87b648d480SJohn Baldwin va_end(ap); 88b648d480SJohn Baldwin 89b648d480SJohn Baldwin return (freebsd7___semctl(semid, semnum, cmd, semun_ptr)); 90b648d480SJohn Baldwin } 91b648d480SJohn Baldwin 92b648d480SJohn Baldwin __sym_compat(semctl, freebsd7_semctl, FBSD_1.0); 934798b7f3SAndrew Turner #endif 94