(void) __close (fd);
close_not_cancel_no_status (fd);
__opendir (const char *name){  DIR *dirp;  struct stat64 statbuf;  int fd;  size_t allocation;  int save_errno;  if (__builtin_expect (name[0], '\1') == '\0')    {      /* POSIX.1-1990 says an empty name gets ENOENT;	 but `open' might like it fine.  */      __set_errno (ENOENT);      return NULL;    }#ifdef O_DIRECTORY  /* Test whether O_DIRECTORY works.  */  if (o_directory_works == 0)    tryopen_o_directory ();  /* We can skip the expensive `stat' call if O_DIRECTORY works.  */  if (o_directory_works < 0)#endif    {      /* We first have to check whether the name is for a directory.  We	 cannot do this after the open() call since the open/close operation	 performed on, say, a tape device might have undesirable effects.  */      if (__builtin_expect (__xstat64 (_STAT_VER, name, &statbuf), 0) < 0)	return NULL;      if (__builtin_expect (! S_ISDIR (statbuf.st_mode), 0))	{	  __set_errno (ENOTDIR);	  return NULL;	 }    }  fd = __open64 (name, O_RDONLY|O_NDELAY|EXTRA_FLAGS);  if (__builtin_expect (fd, 0) < 0)    return NULL;  /* Now make sure this really is a directory and nothing changed since     the `stat' call.  We do not have to perform the test for the     descriptor being associated with a directory if we know the     O_DIRECTORY flag is honored by the kernel.  */  if (__builtin_expect (__fxstat64 (_STAT_VER, fd, &statbuf), 0) < 0)    goto lose;#ifdef O_DIRECTORY  if (o_directory_works <= 0)#endif    {      if (__builtin_expect (! S_ISDIR (statbuf.st_mode), 0))	{	  save_errno = ENOTDIR;	  goto lose;	}    }  if (__builtin_expect (__fcntl (fd, F_SETFD, FD_CLOEXEC), 0) < 0)    goto lose;#ifdef _STATBUF_ST_BLKSIZE  if (__builtin_expect ((size_t) statbuf.st_blksize >= sizeof (struct dirent),			1))    allocation = statbuf.st_blksize;  else#endif    allocation = (BUFSIZ < sizeof (struct dirent)		  ? sizeof (struct dirent) : BUFSIZ);  dirp = (DIR *) calloc (1, sizeof (DIR) + allocation); /* Zero-fill.  */  if (dirp == NULL)  lose:    {      save_errno = errno;      (void) __close (fd);      __set_errno (save_errno);      return NULL;    }  dirp->data = (char *) (dirp + 1);  dirp->allocation = allocation;  dirp->fd = fd;  __libc_lock_init (dirp->lock);  return dirp;}