1 /* Copyright (C) 2016-2022 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 License as 6 published by the Free Software Foundation; either version 2.1 of the 7 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; see the file COPYING.LIB. If 16 not, see <https://www.gnu.org/licenses/>. */ 17 18 #include <unistd.h> 19 #include <stdbool.h> 20 #include <sys/sysmacros.h> 21 #include <sys/types.h> 22 #include <sys/stat.h> 23 24 /* Return true if this is a UNIX98 pty device, as defined in 25 linux/Documentation/devices.txt (on linux < 4.10) or 26 linux/Documentation/admin-guide/devices.txt (on linux >= 4.10). */ 27 static inline bool is_pty(struct __stat64_t64 * sb)28is_pty (struct __stat64_t64 *sb) 29 { 30 int m = __gnu_dev_major (sb->st_rdev); 31 return (136 <= m && m <= 143); 32 } 33 34 static inline bool is_mytty(const struct __stat64_t64 * mytty,const struct __stat64_t64 * maybe)35is_mytty (const struct __stat64_t64 *mytty, const struct __stat64_t64 *maybe) 36 { 37 return (maybe->st_ino == mytty->st_ino 38 && maybe->st_dev == mytty->st_dev 39 && S_ISCHR (maybe->st_mode) 40 && maybe->st_rdev == mytty->st_rdev 41 ); 42 } 43