(root)/
glibc-2.38/
misc/
ttyslot.c
       1  /*
       2   * Copyright (c) 1988, 1993
       3   *	The Regents of the University of California.  All rights reserved.
       4   *
       5   * Redistribution and use in source and binary forms, with or without
       6   * modification, are permitted provided that the following conditions
       7   * are met:
       8   * 1. Redistributions of source code must retain the above copyright
       9   *    notice, this list of conditions and the following disclaimer.
      10   * 2. Redistributions in binary form must reproduce the above copyright
      11   *    notice, this list of conditions and the following disclaimer in the
      12   *    documentation and/or other materials provided with the distribution.
      13   * 4. Neither the name of the University nor the names of its contributors
      14   *    may be used to endorse or promote products derived from this software
      15   *    without specific prior written permission.
      16   *
      17   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      18   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      19   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      20   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      21   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      22   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      23   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      24   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      25   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      26   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      27   * SUCH DAMAGE.
      28   */
      29  
      30  #if defined(LIBC_SCCS) && !defined(lint)
      31  static char sccsid[] = "@(#)ttyslot.c	8.1 (Berkeley) 6/4/93";
      32  #endif /* LIBC_SCCS and not lint */
      33  
      34  #include <ttyent.h>
      35  #include <alloca.h>
      36  #include <stdio.h>
      37  #include <string.h>
      38  #include <unistd.h>
      39  
      40  int
      41  ttyslot (void)
      42  {
      43  	struct ttyent *ttyp;
      44  	int slot;
      45  	char *p;
      46  	int cnt;
      47  	size_t buflen = __sysconf (_SC_TTY_NAME_MAX) + 1;
      48  	char *name;
      49  
      50  	if (buflen == 0)
      51  	  /* This should be enough if no fixed value is given.  */
      52  	  buflen = 32;
      53  
      54  	name = __alloca (buflen);
      55  
      56  	__setttyent();
      57  	for (cnt = 0; cnt < 3; ++cnt)
      58  		if (__ttyname_r (cnt, name, buflen) == 0) {
      59  			if ((p = strrchr (name, '/')))
      60  				++p;
      61  			else
      62  				p = name;
      63  			for (slot = 1; (ttyp = __getttyent()); ++slot)
      64  				if (!strcmp(ttyp->ty_name, p)) {
      65  					__endttyent();
      66  					return(slot);
      67  				}
      68  			break;
      69  		}
      70  	__endttyent();
      71  	return(0);
      72  }