Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2002-05-29 02:26:36 +0400
committerJeff Johnston <jjohnstn@redhat.com>2002-05-29 02:26:36 +0400
commitb1f07180b5e7897f07e390e020b307e6496c9cb1 (patch)
treea2214ac6ac09c310f7fbd8c42a48f5cc58b2e4f1 /newlib/libc/sys
parentab72c934da3502f2dcb0f52199675a0d939c039c (diff)
2002-05-28 Jeff Johnston <jjohnstn@redhat.com>
* libc/sys/linux/Makefile.am: Add support for cfspeed.c and tcsendbrk.c. * libc/sys/linux/Makefile.in: Regenerated. * libc/sys/linux/termios.c: Add tcflow(), tcflush(), tcgetpgrp(), and tcsetpgrp() functions. * libc/sys/linux/sys/termios.h: Add include of machine/termios.h to get __MAX_BAUD rate. * libc/sys/linux/machine/i386/include/termios.h: New file. * libc/include/machine/termios.h: Ditto. * libc/sys/linux/cfspeed.c: Ditto. * libc/sys/linux/tcsendbrk.c: Ditto.
Diffstat (limited to 'newlib/libc/sys')
-rw-r--r--newlib/libc/sys/linux/Makefile.am8
-rw-r--r--newlib/libc/sys/linux/Makefile.in31
-rw-r--r--newlib/libc/sys/linux/cfspeed.c88
-rw-r--r--newlib/libc/sys/linux/machine/i386/include/termios.h1
-rw-r--r--newlib/libc/sys/linux/sys/termios.h1
-rw-r--r--newlib/libc/sys/linux/tcsendbrk.c45
-rw-r--r--newlib/libc/sys/linux/termios.c72
7 files changed, 208 insertions, 38 deletions
diff --git a/newlib/libc/sys/linux/Makefile.am b/newlib/libc/sys/linux/Makefile.am
index 8d9fe5aa2..285baaf46 100644
--- a/newlib/libc/sys/linux/Makefile.am
+++ b/newlib/libc/sys/linux/Makefile.am
@@ -10,13 +10,13 @@ SUBLIBS = \
$(LINUX_MACH_LIB)
LIB_SOURCES = \
- brk.c flockfile.c funlockfile.c gethostname.c getoptlong.c getreent.c ids.c \
- inode.c io.c io64.c linux.c mmap.c \
+ brk.c cfspeed.c flockfile.c funlockfile.c gethostname.c getoptlong.c \
+ getreent.c ids.c inode.c io.c io64.c linux.c mmap.c \
pread.c pread64.c process.c pwrite.c pwrite64.c raise.c realpath.c \
rename.c resource.c sched.c select.c seteuid.c shm_open.c \
shm_unlink.c signal.c siglongjmp.c socket.c sleep.c stack.c \
- sysconf.c sysctl.c systat.c system.c tcdrain.c termios.c time.c \
- usleep.c wait.c
+ sysconf.c sysctl.c systat.c system.c tcdrain.c tcsendbrk.c termios.c \
+ time.c usleep.c wait.c
# This will handle both /usr/src/linux-2.4/include/asm/signal.h (in Red Hat Linux 7.1)
# and also /usr/src/linux/include/asm/signal.h in older versions of Red Hat Linux
diff --git a/newlib/libc/sys/linux/Makefile.in b/newlib/libc/sys/linux/Makefile.in
index 7958a0152..da20d1bb6 100644
--- a/newlib/libc/sys/linux/Makefile.in
+++ b/newlib/libc/sys/linux/Makefile.in
@@ -101,13 +101,13 @@ SUBLIBS = \
LIB_SOURCES = \
- brk.c flockfile.c funlockfile.c gethostname.c getoptlong.c getreent.c ids.c \
- inode.c io.c io64.c linux.c mmap.c \
+ brk.c cfspeed.c flockfile.c funlockfile.c gethostname.c getoptlong.c \
+ getreent.c ids.c inode.c io.c io64.c linux.c mmap.c \
pread.c pread64.c process.c pwrite.c pwrite64.c raise.c realpath.c \
rename.c resource.c sched.c select.c seteuid.c shm_open.c \
shm_unlink.c signal.c siglongjmp.c socket.c sleep.c stack.c \
- sysconf.c sysctl.c systat.c system.c tcdrain.c termios.c time.c \
- usleep.c wait.c
+ sysconf.c sysctl.c systat.c system.c tcdrain.c tcsendbrk.c termios.c \
+ time.c usleep.c wait.c
# This will handle both /usr/src/linux-2.4/include/asm/signal.h (in Red Hat Linux 7.1)
@@ -137,18 +137,19 @@ LIBRARIES = $(noinst_LIBRARIES)
DEFS = @DEFS@ -I. -I$(srcdir)
CPPFLAGS = @CPPFLAGS@
LIBS = @LIBS@
-@USE_LIBTOOL_FALSE@lib_a_OBJECTS = brk.o flockfile.o funlockfile.o \
-@USE_LIBTOOL_FALSE@gethostname.o getoptlong.o getreent.o ids.o inode.o \
-@USE_LIBTOOL_FALSE@io.o io64.o linux.o mmap.o pread.o pread64.o \
-@USE_LIBTOOL_FALSE@process.o pwrite.o pwrite64.o raise.o realpath.o \
-@USE_LIBTOOL_FALSE@rename.o resource.o sched.o select.o seteuid.o \
-@USE_LIBTOOL_FALSE@shm_open.o shm_unlink.o signal.o siglongjmp.o \
-@USE_LIBTOOL_FALSE@socket.o sleep.o stack.o sysconf.o sysctl.o systat.o \
-@USE_LIBTOOL_FALSE@system.o tcdrain.o termios.o time.o usleep.o wait.o
+@USE_LIBTOOL_FALSE@lib_a_OBJECTS = brk.o cfspeed.o flockfile.o \
+@USE_LIBTOOL_FALSE@funlockfile.o gethostname.o getoptlong.o getreent.o \
+@USE_LIBTOOL_FALSE@ids.o inode.o io.o io64.o linux.o mmap.o pread.o \
+@USE_LIBTOOL_FALSE@pread64.o process.o pwrite.o pwrite64.o raise.o \
+@USE_LIBTOOL_FALSE@realpath.o rename.o resource.o sched.o select.o \
+@USE_LIBTOOL_FALSE@seteuid.o shm_open.o shm_unlink.o signal.o \
+@USE_LIBTOOL_FALSE@siglongjmp.o socket.o sleep.o stack.o sysconf.o \
+@USE_LIBTOOL_FALSE@sysctl.o systat.o system.o tcdrain.o tcsendbrk.o \
+@USE_LIBTOOL_FALSE@termios.o time.o usleep.o wait.o
LTLIBRARIES = $(noinst_LTLIBRARIES)
@USE_LIBTOOL_TRUE@liblinux_la_DEPENDENCIES =
-@USE_LIBTOOL_TRUE@liblinux_la_OBJECTS = brk.lo flockfile.lo \
+@USE_LIBTOOL_TRUE@liblinux_la_OBJECTS = brk.lo cfspeed.lo flockfile.lo \
@USE_LIBTOOL_TRUE@funlockfile.lo gethostname.lo getoptlong.lo \
@USE_LIBTOOL_TRUE@getreent.lo ids.lo inode.lo io.lo io64.lo linux.lo \
@USE_LIBTOOL_TRUE@mmap.lo pread.lo pread64.lo process.lo pwrite.lo \
@@ -156,8 +157,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
@USE_LIBTOOL_TRUE@resource.lo sched.lo select.lo seteuid.lo shm_open.lo \
@USE_LIBTOOL_TRUE@shm_unlink.lo signal.lo siglongjmp.lo socket.lo \
@USE_LIBTOOL_TRUE@sleep.lo stack.lo sysconf.lo sysctl.lo systat.lo \
-@USE_LIBTOOL_TRUE@system.lo tcdrain.lo termios.lo time.lo usleep.lo \
-@USE_LIBTOOL_TRUE@wait.lo
+@USE_LIBTOOL_TRUE@system.lo tcdrain.lo tcsendbrk.lo termios.lo time.lo \
+@USE_LIBTOOL_TRUE@usleep.lo wait.lo
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
diff --git a/newlib/libc/sys/linux/cfspeed.c b/newlib/libc/sys/linux/cfspeed.c
new file mode 100644
index 000000000..e935bf178
--- /dev/null
+++ b/newlib/libc/sys/linux/cfspeed.c
@@ -0,0 +1,88 @@
+/* `struct termios' speed frobnication functions. Linux version.
+ Copyright (C) 1991, 92, 93, 95, 96, 97, 98, 2000 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+/* Modified by Jeff Johnston, May 27, 2002 to remove kernel hack
+ as we simply ignore a cfisetspeed of 0 instead of treating it specially */
+
+#include <stddef.h>
+#include <errno.h>
+#include <termios.h>
+
+/* Return the output baud rate stored in *TERMIOS_P. */
+speed_t
+cfgetospeed (termios_p)
+ const struct termios *termios_p;
+{
+ return termios_p->c_cflag & (CBAUD | CBAUDEX);
+}
+
+/* Return the input baud rate stored in *TERMIOS_P.
+ For Linux there is no difference between input and output
+ speed. */
+speed_t
+cfgetispeed (termios_p)
+ const struct termios *termios_p;
+{
+ return termios_p->c_cflag & (CBAUD | CBAUDEX);
+}
+
+/* Set the output baud rate stored in *TERMIOS_P to SPEED. */
+int
+cfsetospeed (termios_p, speed)
+ struct termios *termios_p;
+ speed_t speed;
+{
+ if ((speed & ~CBAUD) != 0
+ && (speed < B57600 || speed > __MAX_BAUD))
+ {
+ errno = (EINVAL);
+ return -1;
+ }
+
+ termios_p->c_cflag &= ~(CBAUD | CBAUDEX);
+ termios_p->c_cflag |= speed;
+
+ return 0;
+}
+
+/* Set the input baud rate stored in *TERMIOS_P to SPEED.
+ Although for Linux there is no difference between input and output
+ speed, the numerical 0 is a special case for the input baud rate. It
+ should set the input baud rate to the output baud rate so we do
+ nothing. */
+int
+cfsetispeed (termios_p, speed)
+ struct termios *termios_p;
+ speed_t speed;
+{
+ if ((speed & ~CBAUD) != 0
+ && (speed < B57600 || speed > __MAX_BAUD))
+ {
+ errno = (EINVAL);
+ return -1;
+ }
+
+ if (speed != 0)
+ {
+ termios_p->c_cflag &= ~(CBAUD | CBAUDEX);
+ termios_p->c_cflag |= speed;
+ }
+
+ return 0;
+}
diff --git a/newlib/libc/sys/linux/machine/i386/include/termios.h b/newlib/libc/sys/linux/machine/i386/include/termios.h
new file mode 100644
index 000000000..ffbbed8ce
--- /dev/null
+++ b/newlib/libc/sys/linux/machine/i386/include/termios.h
@@ -0,0 +1 @@
+#define __MAX_BAUD B4000000
diff --git a/newlib/libc/sys/linux/sys/termios.h b/newlib/libc/sys/linux/sys/termios.h
index bde51ab92..ae053b5e4 100644
--- a/newlib/libc/sys/linux/sys/termios.h
+++ b/newlib/libc/sys/linux/sys/termios.h
@@ -7,6 +7,7 @@
#define _SYS_TERMIOS_H
#include <linux/termios.h>
+#include <machine/termios.h>
/* grr, this shouldn't have to be here */
diff --git a/newlib/libc/sys/linux/tcsendbrk.c b/newlib/libc/sys/linux/tcsendbrk.c
new file mode 100644
index 000000000..a35a4d8ce
--- /dev/null
+++ b/newlib/libc/sys/linux/tcsendbrk.c
@@ -0,0 +1,45 @@
+/* Copyright (C) 1992, 1996, 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+/* Modified for newlib, May 27, 2002, by Jeff Johnston */
+
+#include <errno.h>
+#include <stddef.h>
+#include <signal.h>
+#include <termios.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+
+/* Send zero bits on FD. */
+int
+tcsendbreak (fd, duration)
+ int fd;
+ int duration;
+{
+ /* The break lasts 0.25 to 0.5 seconds if DURATION is zero,
+ and an implementation-defined period if DURATION is nonzero.
+ We define a positive DURATION to be number of milliseconds to break. */
+ if (duration <= 0)
+ return ioctl (fd, TCSBRK, 0);
+
+ /* ioctl can't send a break of any other duration for us.
+ This could be changed to use trickery (e.g. lower speed and
+ send a '\0') to send the break, but for now just return an error. */
+ errno = (EINVAL);
+ return -1;
+}
diff --git a/newlib/libc/sys/linux/termios.c b/newlib/libc/sys/linux/termios.c
index 94567b16d..bc0ac550a 100644
--- a/newlib/libc/sys/linux/termios.c
+++ b/newlib/libc/sys/linux/termios.c
@@ -9,29 +9,63 @@
#include <sys/ioctl.h>
-int tcgetattr(int fd,struct termios *termios_p)
+int
+tcgetattr(int fd,struct termios *termios_p)
{
- return ioctl(fd,TCGETS,termios_p);
+ return ioctl(fd,TCGETS,termios_p);
}
-int tcsetattr(int fd,int optional_actions,const struct termios *termios_p)
+int
+tcsetattr(int fd,int optional_actions,const struct termios *termios_p)
{
- int cmd;
-
- switch (optional_actions) {
- case TCSANOW:
- cmd = TCSETS;
- break;
- case TCSADRAIN:
- cmd = TCSETSW;
- break;
- case TCSAFLUSH:
- cmd = TCSETSF;
- break;
- default:
- errno = EINVAL;
- return -1;
+ int cmd;
+
+ switch (optional_actions) {
+ case TCSANOW:
+ cmd = TCSETS;
+ break;
+ case TCSADRAIN:
+ cmd = TCSETSW;
+ break;
+ case TCSAFLUSH:
+ cmd = TCSETSF;
+ break;
+ default:
+ errno = EINVAL;
+ return -1;
}
- return ioctl(fd,cmd,termios_p);
+ return ioctl(fd,cmd,termios_p);
+}
+
+
+pid_t
+tcgetpgrp(int fd)
+{
+ int p;
+
+ if (ioctl(fd,TIOCGPGRP,&p) < 0)
+ return (pid_t)-1;
+ return (pid_t)p;
+}
+
+
+int
+tcsetpgrp(int fd, pid_t pid)
+{
+ int p = (int)pid;
+ return ioctl(fd,TIOCSPGRP,&p);
+}
+
+int
+tcflow (int fd, int action)
+{
+ return ioctl (fd, TCXONC, action);
}
+
+int
+tcflush (int fd, int queue_selector)
+{
+ return ioctl (fd, TCFLSH, queue_selector);
+}
+