summaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1999-01-24 10:39:51 +0000
committerRoland McGrath <roland@gnu.org>1999-01-24 10:39:51 +0000
commit8d097a18d8eca79c2d38429ec0a5cb636b58b591 (patch)
treeae825b34eeb62726c616cdaff2ceccb6d79d9bda /sysdeps
parent47c130e35992febd3250043a623e4a7c7fc716b5 (diff)
1999-01-23 Roland McGrath <roland@baalperazim.frob.com>
Revamp Hurd ioctl typing magic to handle `struct' keyword in the ioctl command macros, so we can use Unix-compatible headers that make use of the _IO* macros. * sysdeps/mach/hurd/bits/ioctls.h (_IOC_ENCODE_TYPE, _IOC_ENCODE_TYPE_1, _IOC_ENCODE_TYPE_2, _IOTBASE_struct): New macros. (_IOR, _IOW, _IOWR): Use them _IOC_ENCODE_TYPE(t) instead of _IOT_##t. (_IOT_int, _IOT_char, _IOT_short): Renamed to _IOT__IOTBASE_*. (numerous ioctl command macros): Restore `struct' keyword.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/mach/hurd/bits/ioctls.h120
1 files changed, 66 insertions, 54 deletions
diff --git a/sysdeps/mach/hurd/bits/ioctls.h b/sysdeps/mach/hurd/bits/ioctls.h
index 1e063e3e66..21ecda863b 100644
--- a/sysdeps/mach/hurd/bits/ioctls.h
+++ b/sysdeps/mach/hurd/bits/ioctls.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1993, 1996, 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 93, 96, 97, 98, 99 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
@@ -100,14 +100,6 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
#define _IOCT(inout, group, num, t0, c0, t1, c1, t2, c2) \
_IOC ((inout), (group), (num), _IOT ((t0), (c0), (t1), (c1), (t2), (c2)))
-/* Standard flavors of ioctls.
- _IOT_foobar is defined either in this file,
- or where struct foobar is defined. */
-#define _IO(g, n) _IOC (IOC_VOID, (g), (n), 0)
-#define _IOR(g, n, t) _IOC (IOC_OUT, (g), (n), _IOT_##t)
-#define _IOW(g, n, t) _IOC (IOC_IN, (g), (n), _IOT_##t)
-#define _IOWR(g, n, t) _IOC (IOC_INOUT, (g), (n), _IOT_##t)
-
/* Construct an individual type field for TYPE. */
#define _IOTS(type) \
(sizeof (type) == 8 ? IOC_64 : (sizeof (type) >> 1))
@@ -117,12 +109,32 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
#define _IOT_SIMPLE(type) _IOT (_IOTS (type), 1, 0, 0, 0, 0)
/* Basic C types. */
-#define _IOT_int _IOT_SIMPLE (int)
-#define _IOT_char _IOT_SIMPLE (char)
-#define _IOT_short _IOT_SIMPLE (short)
+#define _IOT__IOTBASE_int _IOT_SIMPLE (int)
+#define _IOT__IOTBASE_char _IOT_SIMPLE (char)
+#define _IOT__IOTBASE_short _IOT_SIMPLE (short)
+
+
+/* Standard flavors of ioctls.
+ _IOT_foobar is defined either in this file,
+ or where struct foobar is defined. */
+#define _IO(g, n) _IOC (IOC_VOID, (g), (n), 0)
+#define _IOR(g, n, t) _IOC (IOC_OUT, (g), (n), _IOC_ENCODE_TYPE (t))
+#define _IOW(g, n, t) _IOC (IOC_IN, (g), (n), _IOC_ENCODE_TYPE (t))
+#define _IOWR(g, n, t) _IOC (IOC_INOUT, (g), (n), _IOC_ENCODE_TYPE (t))
+
+/* These macros do some preprocessor gymnastics to turn a TYPESPEC of
+ `struct foobar' into the identifier `_IOT_foobar', which is generally
+ defined using `_IOT' (above) in whatever file defines `struct foobar'.
+ For a TYPESPEC that does not begin with `struct' produces a different
+ identifier: `int' produces `_IOT__IOTBASE_int'. These identifiers
+ are defined for the basic C types above. */
+#define _IOC_ENCODE_TYPE(typespec) _IOC_ENCODE_TYPE_1(_IOTBASE_##typespec)
+#define _IOTBASE_struct
+#define _IOC_ENCODE_TYPE_1(typespec) _IOC_ENCODE_TYPE_2(typespec)
+#define _IOC_ENCODE_TYPE_2(typespec) _IOT_##typespec
-/* ioctls verbatim from 4.4 <sys/ioctl.h>, with `struct' keywords removed. */
+/* ioctls verbatim from 4.4 <sys/ioctl.h>. */
#define TIOCMODG _IOR('t', 3, int) /* get modem control state */
#define TIOCMODS _IOW('t', 4, int) /* set modem control state */
@@ -143,10 +155,10 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
/* 15 unused */
#define TIOCFLUSH _IOW('t', 16, int) /* flush buffers */
/* 17-18 compat */
-#define TIOCGETA _IOR('t', 19, termios) /* get termios struct */
-#define TIOCSETA _IOW('t', 20, termios) /* set termios struct */
-#define TIOCSETAW _IOW('t', 21, termios) /* drain output, set */
-#define TIOCSETAF _IOW('t', 22, termios) /* drn out, fls in, set */
+#define TIOCGETA _IOR('t', 19, struct termios) /* get termios struct */
+#define TIOCSETA _IOW('t', 20, struct termios) /* set termios struct */
+#define TIOCSETAW _IOW('t', 21, struct termios) /* drain output, set */
+#define TIOCSETAF _IOW('t', 22, struct termios) /* drn out, fls in, set */
#define TIOCGETD _IOR('t', 26, int) /* get line discipline */
#define TIOCSETD _IOW('t', 27, int) /* set line discipline */
/* 127-124 compat */
@@ -176,8 +188,8 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
#define TIOCMBIC _IOW('t', 107, int) /* bic modem bits */
#define TIOCMGET _IOR('t', 106, int) /* get all modem bits */
#define TIOCREMOTE _IOW('t', 105, int) /* remote input editing */
-#define TIOCGWINSZ _IOR('t', 104, winsize) /* get window size */
-#define TIOCSWINSZ _IOW('t', 103, winsize) /* set window size */
+#define TIOCGWINSZ _IOR('t', 104, struct winsize) /* get window size */
+#define TIOCSWINSZ _IOW('t', 103, struct winsize) /* set window size */
#define TIOCUCNTL _IOW('t', 102, int) /* pty: set/clr usr cntl mode */
#define UIOCCMD(n) _IO('u', n) /* usr cntl op "n" */
#define TIOCCONS _IOW('t', 98, int) /* become virtual console */
@@ -208,34 +220,34 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
#define SIOCSPGRP _IOW('s', 8, int) /* set process group */
#define SIOCGPGRP _IOR('s', 9, int) /* get process group */
-#define SIOCADDRT _IOW('r', 10, ortentry) /* add route */
-#define SIOCDELRT _IOW('r', 11, ortentry) /* delete route */
-
-#define SIOCSIFADDR _IOW('i', 12, ifreq) /* set ifnet address */
-#define OSIOCGIFADDR _IOWR('i',13, ifreq) /* get ifnet address */
-#define SIOCGIFADDR _IOWR('i',33, ifreq) /* get ifnet address */
-#define SIOCSIFDSTADDR _IOW('i', 14, ifreq) /* set p-p address */
-#define OSIOCGIFDSTADDR _IOWR('i',15, ifreq) /* get p-p address */
-#define SIOCGIFDSTADDR _IOWR('i',34, ifreq) /* get p-p address */
-#define SIOCSIFFLAGS _IOW('i', 16, ifreq) /* set ifnet flags */
-#define SIOCGIFFLAGS _IOWR('i',17, ifreq) /* get ifnet flags */
-#define OSIOCGIFBRDADDR _IOWR('i',18, ifreq) /* get broadcast addr */
-#define SIOCGIFBRDADDR _IOWR('i',35, ifreq) /* get broadcast addr */
-#define SIOCSIFBRDADDR _IOW('i',19, ifreq) /* set broadcast addr */
-#define OSIOCGIFCONF _IOWR('i',20, ifconf) /* get ifnet list */
-#define SIOCGIFCONF _IOWR('i',36, ifconf) /* get ifnet list */
-#define OSIOCGIFNETMASK _IOWR('i',21, ifreq) /* get net addr mask */
-#define SIOCGIFNETMASK _IOWR('i',37, ifreq) /* get net addr mask */
-#define SIOCSIFNETMASK _IOW('i',22, ifreq) /* set net addr mask */
-#define SIOCGIFMETRIC _IOWR('i',23, ifreq) /* get IF metric */
-#define SIOCSIFMETRIC _IOW('i',24, ifreq) /* set IF metric */
-#define SIOCDIFADDR _IOW('i',25, ifreq) /* delete IF addr */
-#define SIOCAIFADDR _IOW('i',26, ifaliasreq) /* add/chg IF alias */
-
-#define SIOCSARP _IOW('i', 30, arpreq) /* set arp entry */
-#define OSIOCGARP _IOWR('i',31, arpreq) /* get arp entry */
-#define SIOCGARP _IOWR('i',38, arpreq) /* get arp entry */
-#define SIOCDARP _IOW('i', 32, arpreq) /* delete arp entry */
+#define SIOCADDRT _IOW('r', 10, struct ortentry) /* add route */
+#define SIOCDELRT _IOW('r', 11, struct ortentry) /* delete route */
+
+#define SIOCSIFADDR _IOW('i', 12, struct ifreq) /* set ifnet address */
+#define OSIOCGIFADDR _IOWR('i',13, struct ifreq) /* get ifnet address */
+#define SIOCGIFADDR _IOWR('i',33, struct ifreq) /* get ifnet address */
+#define SIOCSIFDSTADDR _IOW('i', 14, struct ifreq) /* set p-p address */
+#define OSIOCGIFDSTADDR _IOWR('i',15, struct ifreq) /* get p-p address */
+#define SIOCGIFDSTADDR _IOWR('i',34, struct ifreq) /* get p-p address */
+#define SIOCSIFFLAGS _IOW('i', 16, struct ifreq) /* set ifnet flags */
+#define SIOCGIFFLAGS _IOWR('i',17, struct ifreq) /* get ifnet flags */
+#define OSIOCGIFBRDADDR _IOWR('i',18, struct ifreq) /* get broadcast addr */
+#define SIOCGIFBRDADDR _IOWR('i',35, struct ifreq) /* get broadcast addr */
+#define SIOCSIFBRDADDR _IOW('i',19, struct ifreq) /* set broadcast addr */
+#define OSIOCGIFCONF _IOWR('i',20, struct ifconf) /* get ifnet list */
+#define SIOCGIFCONF _IOWR('i',36, struct ifconf) /* get ifnet list */
+#define OSIOCGIFNETMASK _IOWR('i',21, struct ifreq) /* get net addr mask */
+#define SIOCGIFNETMASK _IOWR('i',37, struct ifreq) /* get net addr mask */
+#define SIOCSIFNETMASK _IOW('i',22, struct ifreq) /* set net addr mask */
+#define SIOCGIFMETRIC _IOWR('i',23, struct ifreq) /* get IF metric */
+#define SIOCSIFMETRIC _IOW('i',24, struct ifreq) /* set IF metric */
+#define SIOCDIFADDR _IOW('i',25, struct ifreq) /* delete IF addr */
+#define SIOCAIFADDR _IOW('i',26, struct ifaliasreq) /* add/chg IF alias */
+
+#define SIOCSARP _IOW('i', 30, struct arpreq) /* set arp entry */
+#define OSIOCGARP _IOWR('i',31, struct arpreq) /* get arp entry */
+#define SIOCGARP _IOWR('i',38, struct arpreq) /* get arp entry */
+#define SIOCDARP _IOW('i', 32, struct arpreq) /* delete arp entry */
/* Compatibility with 4.3 BSD terminal driver.
@@ -251,11 +263,11 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
# define OTIOCSETD _IOW('t', 1, int) /* set line discipline */
#endif
#define TIOCHPCL _IO('t', 2) /* hang up on last close */
-#define TIOCGETP _IOR('t', 8,sgttyb)/* get parameters -- gtty */
-#define TIOCSETP _IOW('t', 9,sgttyb)/* set parameters -- stty */
-#define TIOCSETN _IOW('t',10,sgttyb)/* as above, but no flushtty*/
-#define TIOCSETC _IOW('t',17,tchars)/* set special characters */
-#define TIOCGETC _IOR('t',18,tchars)/* get special characters */
+#define TIOCGETP _IOR('t', 8,struct sgttyb)/* get parameters -- gtty */
+#define TIOCSETP _IOW('t', 9,struct sgttyb)/* set parameters -- stty */
+#define TIOCSETN _IOW('t',10,struct sgttyb)/* as above, but no flushtty*/
+#define TIOCSETC _IOW('t',17,struct tchars)/* set special characters */
+#define TIOCGETC _IOR('t',18,struct tchars)/* get special characters */
#define TANDEM 0x00000001 /* send stopc on out q full */
#define CBREAK 0x00000002 /* half-cooked mode */
#define LCASE 0x00000004 /* simulate lower case */
@@ -322,8 +334,8 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
#define LPENDIN (PENDIN>>16)
#define LDECCTQ (DECCTQ>>16)
#define LNOFLSH (NOFLSH>>16)
-#define TIOCSLTC _IOW('t',117,ltchars)/* set local special chars*/
-#define TIOCGLTC _IOR('t',116,ltchars)/* get local special chars*/
+#define TIOCSLTC _IOW('t',117,struct ltchars)/* set local special chars*/
+#define TIOCGLTC _IOR('t',116,struct ltchars)/* get local special chars*/
#define OTIOCCONS _IO('t', 98) /* for hp300 -- sans int arg */
#define OTTYDISC 0
#define NETLDISC 1