view lib/tcgetsid.c @ 13689:af3a7152efba

New module 'tcgetsid'. * lib/tcgetsid.c: New file. * m4/tcgetsid.m4: New file. * modules/tcgetsid: New file. * modules/termios (Depends-on): Add c++defs, warn-on-use. (Makefile.am): Ensure c++defs.h, warn-on-use.h get included. Substitute GNULIB_TCGETSID, HAVE_TCGETSID. * lib/termios.in.h: Include <sys/types.h>. (tcgetsid): New declaration. * m4/termios_h.m4 (gl_TERMIOS_H): Check whether tcgetsid is declared. (gl_TERMIOS_H_DEFAULTS): Initialize GNULIB_TCGETSID, HAVE_TCGETSID. * doc/posix-functions/tcgetsid.texi: Mention the new module. * tests/test-termios-c++.cc: Check GNULIB_NAMESPACE::tcgetsid.
author Bruno Haible <bruno@clisp.org>
date Fri, 17 Sep 2010 03:16:53 +0200
parents
children 97fc9a21a8fb
line wrap: on
line source

/* Determine the session ID of the controlling terminal of the current process.
   Copyright (C) 2010 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program 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 General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software Foundation,
   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */

#include <config.h>

#define USE_OLD_TTY /* needed on OpenBSD 4.5, so that TIOCGSID gets defined */

/* Specification.  */
#include <termios.h>

#include <errno.h>
#include <sys/ioctl.h>

pid_t
tcgetsid (int fd)
{
#ifdef TIOCGSID /* MacOS X, OpenBSD */
  int sid;

  if (ioctl (fd, TIOCGSID, &sid) < 0)
    return -1; /* errno is set here */

  return sid;
#else /* FreeBSD, Cygwin, mingw */
  errno = ENOSYS;
  return -1;
#endif
}