Rewrite to allow omitting initialization of global variables.
[kopensolaris-gnu/glibc.git] / misc / ttyslot.c
index ace9f84..7dc9b27 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1988 The Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1988, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)ttyslot.c  5.6 (Berkeley) 2/23/91";
+static char sccsid[] = "@(#)ttyslot.c  8.1 (Berkeley) 6/4/93";
 #endif /* LIBC_SCCS and not lint */
 
 #include <ttyent.h>
+#include <alloca.h>
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
@@ -47,16 +48,23 @@ ttyslot()
        register int slot;
        register char *p;
        int cnt;
+       size_t buflen = __sysconf (_SC_TTY_NAME_MAX) + 1;
        char *name;
 
+       if (buflen == 0)
+         /* This should be enough if no fixed value is given.  */
+         buflen = 32;
+
+       name = __alloca (buflen);
+
        setttyent();
-       for (cnt = 0; cnt < 3; ++cnt) 
-               if (name = ttyname(cnt)) {
-                       if (p = rindex(name, '/')) 
+       for (cnt = 0; cnt < 3; ++cnt)
+               if (__ttyname_r (cnt, name, buflen) == 0) {
+                       if ((p = rindex(name, '/')))
                                ++p;
                        else
                                p = name;
-                       for (slot = 1; ttyp = getttyent(); ++slot)
+                       for (slot = 1; (ttyp = getttyent()); ++slot)
                                if (!strcmp(ttyp->ty_name, p)) {
                                        endttyent();
                                        return(slot);