Stub for setpgid
This implements a near noop setpgid, unless the use is one equivalent to setsid, in which case it will behave as such. Also activates setpgrp, which is implemented in terms of setpgid. Change-Id: I84411cb1957351aa1d3985623cd9e69bdf6f8d4c
This commit is contained in:
parent
ac5b3e53d8
commit
afe5cecd7f
4 changed files with 47 additions and 5 deletions
|
@ -133,9 +133,7 @@ ssize_t read(int, void *, size_t);
|
|||
#endif
|
||||
int rmdir(const char *);
|
||||
int setgid(gid_t);
|
||||
#if !defined(__minix)
|
||||
int setpgid(pid_t, pid_t);
|
||||
#endif /* !defined(__minix) */
|
||||
pid_t setsid(void);
|
||||
int setuid(uid_t);
|
||||
unsigned int sleep(unsigned int);
|
||||
|
@ -270,9 +268,9 @@ int lockf(int, int, off_t);
|
|||
ssize_t readlink(const char * __restrict, char * __restrict, size_t);
|
||||
#endif
|
||||
void *sbrk(intptr_t);
|
||||
#if !defined(__minix)
|
||||
/* XXX prototype wrong! */
|
||||
int setpgrp(pid_t, pid_t); /* obsoleted by setpgid() */
|
||||
#if !defined(__minix)
|
||||
int setregid(gid_t, gid_t);
|
||||
int setreuid(uid_t, uid_t);
|
||||
#endif /* !defined(__minix) */
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
.PATH: ${ARCHDIR}/compat-43 ${.CURDIR}/compat-43
|
||||
|
||||
SRCS+= creat.c getdtablesize.c \
|
||||
killpg.c \
|
||||
killpg.c setpgrp.c \
|
||||
|
||||
.if !defined(AUDIT)
|
||||
SRCS+= getwd.c
|
||||
|
|
|
@ -22,7 +22,7 @@ SRCS+= accept.c access.c adjtime.c bind.c brk.c sbrk.c m_closefrom.c getsid.c \
|
|||
sync.c syscall.c sysuname.c truncate.c umask.c unlink.c write.c \
|
||||
utimensat.c utimes.c futimes.c lutimes.c futimens.c \
|
||||
_exit.c _ucontext.c environ.c __getcwd.c vfork.c sizeup.c init.c \
|
||||
getrusage.c setrlimit.c
|
||||
getrusage.c setrlimit.c setpgid.c
|
||||
|
||||
# Minix specific syscalls / utils.
|
||||
SRCS+= cprofile.c sprofile.c stack_utils.c _mcontext.c
|
||||
|
|
44
lib/libc/sys-minix/setpgid.c
Normal file
44
lib/libc/sys-minix/setpgid.c
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include <sys/cdefs.h>
|
||||
#include <lib.h>
|
||||
#include "namespace.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
/*
|
||||
* "Smart" stub for now. This requires job control to be properly implemented.
|
||||
*/
|
||||
int setpgid(pid_t pid, pid_t pgid)
|
||||
{
|
||||
pid_t _pid, _pgid, sid, cpid;
|
||||
|
||||
_pid = pid;
|
||||
_pgid = pgid;
|
||||
|
||||
/* Who are we? */
|
||||
cpid = getpid();
|
||||
|
||||
/* if zero, means current process. */
|
||||
if (_pid == 0) {
|
||||
_pid = cpid;
|
||||
}
|
||||
|
||||
/* if zero, means given pid. */
|
||||
if (_pgid == 0) {
|
||||
_pgid = _pid;
|
||||
}
|
||||
|
||||
/* right now we only support the equivalent of setsid(), which is
|
||||
* setpgid(0,0) */
|
||||
if ((_pid != cpid) || (_pgid != cpid)) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (setsid() == cpid) {
|
||||
return 0;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue