1 /* Unlock the slave side of a pseudo-terminal from its master side. 2 Copyright (C) 1998, 2010-2021 Free Software Foundation, Inc. 3 Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998. 4 5 This file is free software: you can redistribute it and/or modify 6 it under the terms of the GNU Lesser General Public License as 7 published by the Free Software Foundation; either version 2.1 of the 8 License, or (at your option) any later version. 9 10 This file is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public License 16 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 17 18 #include <config.h> 19 20 #include <stdlib.h> 21 22 #include <fcntl.h> 23 #include <unistd.h> 24 25 int 26 unlockpt (int fd) /* */ 27 { 28 /* Platforms which have the TIOCSPTLCK ioctl (Linux) already have the 29 unlockpt function. */ 30 #if HAVE_REVOKE 31 /* Mac OS X 10.3, OpenBSD 3.8 do not have the unlockpt function, but they 32 have revoke(). */ 33 char *name = ptsname (fd); 34 if (name == NULL) 35 return -1; 36 return revoke (name); 37 #else 38 /* Assume that the slave side of a pseudo-terminal is already unlocked 39 by default. */ 40 if (fcntl (fd, F_GETFD) < 0) 41 return -1; 42 return 0; 43 #endif 44 }