(enum __hurd_threadvar_index):
[kopensolaris-gnu/glibc.git] / hurd / hurd / ioctl.h
index 16e46e3..8c6dbfd 100644 (file)
@@ -1,37 +1,41 @@
 /* User-registered handlers for specific `ioctl' requests.
-Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   Copyright (C) 1993, 1994, 1995, 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 Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 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
-Library General Public License for more details.
+   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
+   Library General Public License for more details.
 
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
 
-#ifndef        _HURD_FD_H
-
-#define        _HURD_FD_H      1
+#ifndef        _HURD_IOCTL_H
+#define        _HURD_IOCTL_H   1
 
 #define        __need___va_list
 #include <stdarg.h>
+#include <ioctls.h>
 
-/* Structure that records an ioctl handler.  */
 
+/* Type of handler function, called like ioctl to do its entire job.  */
+typedef int (*ioctl_handler_t) (int fd, int request, void *arg);
+
+/* Structure that records an ioctl handler.  */
 struct ioctl_handler
   {
-    int first_request, last_request; /* Range of handled request values.  */
+    /* Range of handled _IOC_NOTYPE (REQUEST) values.  */
+    int first_request, last_request;
 
     /* Handler function, called like ioctl to do its entire job.  */
-    int (*handler) (int fd, int request, void *arg);
+    ioctl_handler_t handler;
 
     struct ioctl_handler *next;        /* Next handler.  */
   };
@@ -42,8 +46,7 @@ struct ioctl_handler
    Return nonzero and sets `errno' for an error.  */
 
 extern int hurd_register_ioctl_handler (int first_request, int last_request,
-                                       int (*handler) (int fd, int request,
-                                                       void *arg));
+                                       ioctl_handler_t handler);
 
 
 /* Define a library-internal handler for ioctl commands between FIRST and
@@ -51,9 +54,10 @@ extern int hurd_register_ioctl_handler (int first_request, int last_request,
    avoid `defined but not used' warnings.  */
 
 #define        _HURD_HANDLE_IOCTLS(handler, first, last)                             \
-  static const struct ioctl_handler handler##_ioctl_handler =                \
-    { (first), (last), (int (*) (int, int, void *)) (handler),       \
-       (&(handler), &(handler##_ioctl_handler), NULL) };                     \
+  static const struct ioctl_handler handler##_ioctl_handler                  \
+       __attribute__ ((__unused__)) =                                        \
+    { _IOC_NOTYPE (first), _IOC_NOTYPE (last),                               \
+       (int (*) (int, int, void *)) (handler), NULL };                       \
   text_set_element (_hurd_ioctl_handler_lists, ##handler##_ioctl_handler)
 
 /* Define a library-internal handler for a single ioctl command.  */
@@ -64,7 +68,7 @@ extern int hurd_register_ioctl_handler (int first_request, int last_request,
 
 /* Lookup the handler for the given ioctl request.  */
 
-int *(_hurd_lookup_ioctl_handler (int request)) (int, int, void *);
+ioctl_handler_t _hurd_lookup_ioctl_handler (int request);
 
 
 #endif /* hurd/ioctl.h */