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.
This commit is contained in:
Jeff Johnston 2002-05-28 22:26:36 +00:00
parent ab72c934da
commit b1f07180b5
9 changed files with 222 additions and 37 deletions

View File

@ -1,3 +1,17 @@
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.
2002-05-24 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/string.h: Add strnlen and strerror_r prototypes.

View File

@ -0,0 +1 @@
#define __MAX_BAUD B4000000

View File

@ -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

View File

@ -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)

View File

@ -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;
}

View File

@ -0,0 +1 @@
#define __MAX_BAUD B4000000

View File

@ -7,6 +7,7 @@
#define _SYS_TERMIOS_H
#include <linux/termios.h>
#include <machine/termios.h>
/* grr, this shouldn't have to be here */

View File

@ -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;
}

View File

@ -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;
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;
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);
}