General termios
Shaun Jackman
sjackman@gmail.com
Fri Jun 2 16:22:00 GMT 2006
termios only depends on ioctl and the various TCxxx and TIOCxxx ioctl
defines. If each function were wrapped in an ifdef Txxx, it should be
possible to move termios to a general source.
Is it better to leave the function undefined, or define the function
to return ENOSYS? Is posix or unix a better home for termios?
Cheers,
Shaun
Index: libc/sys/linux/termios.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/sys/linux/termios.c,v
retrieving revision 1.3
diff -u -r1.3 termios.c
--- libc/sys/linux/termios.c 26 Aug 2002 18:56:08 -0000 1.3
+++ libc/sys/linux/termios.c 2 Jun 2006 16:12:51 -0000
@@ -12,7 +12,12 @@
int
tcgetattr(int fd,struct termios *termios_p)
{
+#ifdef TCGETS
return ioctl(fd,TCGETS,termios_p);
+#else
+ errno = ENOSYS;
+ return -1;
+#endif
}
@@ -22,15 +27,21 @@
int cmd;
switch (optional_actions) {
+#ifdef TCSETS
case TCSANOW:
cmd = TCSETS;
break;
+#endif
+#ifdef TCSETSW
case TCSADRAIN:
cmd = TCSETSW;
break;
+#endif
+#ifdef TCSETSF
case TCSAFLUSH:
cmd = TCSETSF;
break;
+#endif
default:
errno = EINVAL;
return -1;
@@ -44,29 +55,49 @@
{
int p;
+#ifdef TIOCGPGRP
if (ioctl(fd,TIOCGPGRP,&p) < 0)
return (pid_t)-1;
return (pid_t)p;
+#else
+ errno = ENOSYS;
+ return -1;
+#endif
}
int
tcsetpgrp(int fd, pid_t pid)
{
+#ifdef TIOCSPGRP
int p = (int)pid;
return ioctl(fd,TIOCSPGRP,&p);
+#else
+ errno = ENOSYS;
+ return -1;
+#endif
}
#endif /* !_ELIX_LEVEL || _ELIX_LEVEL >= 4 */
int
tcflow (int fd, int action)
{
+#ifdef TCXONC
return ioctl (fd, TCXONC, action);
+#else
+ errno = ENOSYS;
+ return -1;
+#endif
}
int
tcflush (int fd, int queue_selector)
{
+#ifdef TCFLSH
return ioctl (fd, TCFLSH, queue_selector);
+#else
+ errno = ENOSYS;
+ return -1;
+#endif
}
More information about the Newlib
mailing list