From 8d097a18d8eca79c2d38429ec0a5cb636b58b591 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sun, 24 Jan 1999 10:39:51 +0000 Subject: 1999-01-23 Roland McGrath 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. --- sysdeps/mach/hurd/bits/ioctls.h | 120 ++++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 54 deletions(-) (limited to 'sysdeps/mach/hurd') 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 , with `struct' keywords removed. */ +/* ioctls verbatim from 4.4 . */ #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 -- cgit 1.4.1