1/*********************************************************************** 2* * 3* This software is part of the ast package * 4* Copyright (c) 1985-2011 AT&T Intellectual Property * 5* and is licensed under the * 6* Common Public License, Version 1.0 * 7* by AT&T Intellectual Property * 8* * 9* A copy of the License is available at * 10* http://www.opensource.org/licenses/cpl1.0.txt * 11* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12* * 13* Information and Software Systems Research * 14* AT&T Research * 15* Florham Park NJ * 16* * 17* Glenn Fowler <gsf@research.att.com> * 18* David Korn <dgk@research.att.com> * 19* Phong Vo <kpv@research.att.com> * 20* * 21***********************************************************************/ 22#pragma prototyped 23 24#include <ast.h> 25 26#if _lib_setpgid 27 28NoN(setpgid) 29 30#else 31 32#include <error.h> 33 34#ifndef ENOSYS 35#define ENOSYS EINVAL 36#endif 37 38#if _lib_setpgrp2 39#define setpgrp setpgrp2 40#else 41#if _lib_BSDsetpgrp 42#define _lib_setpgrp2 1 43#define setpgrp BSDsetpgrp 44#else 45#if _lib_wait3 46#define _lib_setpgrp2 1 47#endif 48#endif 49#endif 50 51#if _lib_setpgrp2 52extern int setpgrp(int, int); 53#else 54extern int setpgrp(void); 55#endif 56 57/* 58 * set process group id 59 */ 60 61int 62setpgid(pid_t pid, pid_t pgid) 63{ 64#if _lib_setpgrp2 65 return(setpgrp(pid, pgid)); 66#else 67#if _lib_setpgrp 68 int caller = getpid(); 69 70 if ((pid == 0 || pid == caller) && (pgid == 0 || pgid == caller)) 71 return(setpgrp()); 72 errno = EINVAL; 73#else 74 errno = ENOSYS; 75#endif 76 return(-1); 77#endif 78} 79 80#endif 81