blob: 26bab0d03bdd81a537aaddc78b8c2b466760116d [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/* Copyright (C) 1998 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, write to the Free
16 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17 02111-1307 USA. */
18
19#include <stdarg.h>
20#include <termios.h>
21#include <unistd.h>
22#include <sys/ioctl.h>
23#include <sys/syscall.h>
24
25
26
27/* The user-visible size of struct termios has changed. Catch ioctl calls
28 using the new-style struct termios, and translate them to old-style. */
29
30#define __NR___syscall_ioctl __NR_ioctl
31static __always_inline
32_syscall3(int, __syscall_ioctl, int, fd, unsigned long int, request, void *, arg)
33
34
35int ioctl (int fd, unsigned long int request, ...)
36{
37 void *arg;
38 va_list ap;
39 int result;
40
41 va_start (ap, request);
42 arg = va_arg (ap, void *);
43
44 switch (request)
45 {
46 case TCGETS:
47 result = tcgetattr (fd, (struct termios *) arg);
48 break;
49
50 case TCSETS:
51 result = tcsetattr (fd, TCSANOW, (struct termios *) arg);
52 break;
53
54 case TCSETSW:
55 result = tcsetattr (fd, TCSADRAIN, (struct termios *) arg);
56 break;
57
58 case TCSETSF:
59 result = tcsetattr (fd, TCSAFLUSH, (struct termios *) arg);
60 break;
61
62 default:
63 result = __syscall_ioctl (fd, request, arg);
64 break;
65 }
66
67 va_end (ap);
68
69 return result;
70}
71libc_hidden_def(ioctl)