1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2010 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 28 NoN(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 52 extern int setpgrp(int, int); 53 #else 54 extern int setpgrp(void); 55 #endif 56 57 /* 58 * set process group id 59 */ 60 61 int 62 setpgid(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