1/*
2 * Copyright 2003-2005, Axel D��rfler, axeld@pinc-software.de. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include <stdio.h>
8#include <string.h>
9#include <unistd.h>
10#include <termios.h>
11
12#include <syscalls.h>
13
14
15/**	isatty - is the given file descriptor bound to a terminal device?
16 *	a simple call to fetch the terminal control attributes suffices
17 *	(only a valid tty device will succeed)
18 */
19
20int
21isatty(int fd)
22{
23	struct termios termios;
24
25	return _kern_ioctl(fd, TCGETA, &termios, sizeof(struct termios)) == B_OK;
26		// we don't use tcgetattr() here in order to keep errno unchanged
27}
28
29
30/** returns the name of the controlling terminal */
31
32char *
33ctermid(char *s)
34{
35	static char defaultBuffer[L_ctermid];
36	char *name = ttyname(STDOUT_FILENO);
37		// we assume that stdout is our controlling terminal...
38
39	if (s == NULL)
40		s = defaultBuffer;
41
42	return strcpy(s, name ? name : "");
43}
44
45
46int
47tcsetpgrp(int fd, pid_t pgrpid)
48{
49	return ioctl(fd, TIOCSPGRP, &pgrpid);
50}
51
52
53pid_t
54tcgetpgrp(int fd)
55{
56	pid_t foregroundProcess;
57	int status = ioctl(fd, TIOCGPGRP, &foregroundProcess);
58	if (status == 0)
59		return foregroundProcess;
60
61	return -1;
62}
63