namelen = 2 * (sizeof (dev) + d->d_namlen + 1);
namelen = 2 * (sizeof (dev) + dlen);
DEFUN(ttyname, (fd), int fd){  static CONST char dev[] = "/dev";  static char *name;  static size_t namelen = 0;  struct stat st;  dev_t mydev;  ino_t myino;  DIR *dirstream;  struct dirent *d;  int save = errno;  if (fstat (fd, &st) < 0)    return NULL;  mydev = st.st_dev;  myino = st.st_ino;  dirstream = opendir (dev);  if (dirstream == NULL)    return NULL;  while ((d = readdir (dirstream)) != NULL)    if (d->d_fileno == myino)      {	if (sizeof (dev) + d->d_namlen + 1 > namelen)	  {	    free (name);	    namelen = 2 * (sizeof (dev) + d->d_namlen + 1); /* Big enough.  */	    name = malloc (namelen);	    if (! name)	      return NULL;	    (void) memcpy (name, dev, sizeof (dev) - 1);	    name[sizeof (dev) - 1] = '/';	  }	(void) memcpy (&name[sizeof (dev)], d->d_name, d->d_namlen + 1);	if (stat (name, &st) == 0 && st.st_dev == mydev)	  {	    (void) closedir (dirstream);	    __ttyname = name;	    errno = save;	    return name;	  }      }  (void) closedir (dirstream);  errno = save;  return NULL;}