static DIR * open_directory (Lisp_Object dirname, int *fdp) { char *name = SSDATA (dirname); DIR *d; int fd, opendir_errno; #ifdef DOS_NT /* Directories cannot be opened. The emulation assumes that any file descriptor other than AT_FDCWD corresponds to the most recently opened directory. This hack is good enough for Emacs. */ fd = 0; d = opendir (name); opendir_errno = errno; #else fd = emacs_open (name, O_RDONLY | O_DIRECTORY, 0); if (fd < 0) { opendir_errno = errno; d = 0; } else { d = fdopendir (fd); opendir_errno = errno; if (! d) emacs_close (fd); } #endif if (!d) report_file_errno ("Opening directory", dirname, opendir_errno); *fdp = fd; return d; }
static void report_error (const char *file, int fd) { int err = errno; if (fd) emacs_close (fd); report_file_errno ("Cannot unexec", build_string (file), err); }