2 Copyright (C) 1995 Free Software Foundation, Inc.
4 This file is part of XEmacs.
6 XEmacs is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with XEmacs; see the file COPYING. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
21 /* Synched up with: Not really in FSF. */
23 #ifndef INCLUDED_sysdir_h_
24 #define INCLUDED_sysdir_h_
30 #ifdef SYSV_SYSTEM_DIR
32 #elif defined (WIN32_NATIVE)
35 #elif defined (NONSYSTEM_DIR_LIBRARY)
39 #endif /* not NONSYSTEM_DIR_LIBRARY */
41 #ifdef SYSV_SYSTEM_DIR
42 # define DIRENTRY struct dirent
43 #else /* not SYSV_SYSTEM_DIR */
44 # define DIRENTRY struct direct
47 /* The d_nameln member of a struct dirent includes the '\0' character
48 on some systems, but not on others. What's worse, you can't tell
49 at compile-time which one it will be, since it really depends on
50 the sort of system providing the filesystem you're reading from,
51 not the system you are running on. Paul Eggert
52 <eggert@bi.twinsun.com> says this occurs when Emacs is running on a
53 SunOS 4.1.2 host, reading a directory that is remote-mounted from a
54 Solaris 2.1 host and is in a native Solaris 2.1 filesystem.
56 (and Solaris 2 doesn't have a d_nameln member at all! Posix.1
57 doesn't specify it -- mrb)
59 Since applying strlen to the name always works, we'll just do that. */
60 #define NAMLEN(p) strlen (p->d_name)
62 #define DIRENTRY_NONEMPTY(p) ((p)->d_ino)
64 /* encapsulation: directory calls */
66 #ifdef ENCAPSULATE_CHDIR
67 int sys_chdir (const char *path);
69 #if defined (ENCAPSULATE_CHDIR) && !defined (DONT_ENCAPSULATE)
71 # define chdir sys_chdir
73 #if !defined (ENCAPSULATE_CHDIR) && defined (DONT_ENCAPSULATE)
74 # define sys_chdir chdir
77 #ifdef ENCAPSULATE_MKDIR
78 int sys_mkdir (const char *path, mode_t mode);
80 #if defined (ENCAPSULATE_MKDIR) && !defined (DONT_ENCAPSULATE)
82 # define mkdir sys_mkdir
84 #if !defined (ENCAPSULATE_MKDIR) && defined (DONT_ENCAPSULATE)
85 # define sys_mkdir mkdir
88 #ifdef ENCAPSULATE_OPENDIR
89 DIR *sys_opendir (const char *filename);
91 #if defined (ENCAPSULATE_OPENDIR) && !defined (DONT_ENCAPSULATE)
93 # define opendir sys_opendir
95 #if !defined (ENCAPSULATE_OPENDIR) && defined (DONT_ENCAPSULATE)
96 # define sys_opendir opendir
99 #ifdef ENCAPSULATE_READDIR
100 DIRENTRY *sys_readdir (DIR *dirp);
102 #if defined (ENCAPSULATE_READDIR) && !defined (DONT_ENCAPSULATE)
104 # define readdir sys_readdir
106 #if !defined (ENCAPSULATE_READDIR) && defined (DONT_ENCAPSULATE)
107 # define sys_readdir readdir
110 #ifdef ENCAPSULATE_CLOSEDIR
111 int sys_closedir (DIR *dirp);
113 #if defined (ENCAPSULATE_CLOSEDIR) && !defined (DONT_ENCAPSULATE)
115 # define closedir sys_closedir
117 #if !defined (ENCAPSULATE_CLOSEDIR) && defined (DONT_ENCAPSULATE)
118 # define sys_closedir closedir
121 #ifdef ENCAPSULATE_RMDIR
122 int sys_rmdir (const char *path);
124 #if defined (ENCAPSULATE_RMDIR) && !defined (DONT_ENCAPSULATE)
126 # define rmdir sys_rmdir
128 #if !defined (ENCAPSULATE_RMDIR) && defined (DONT_ENCAPSULATE)
129 # define sys_rmdir rmdir
132 #endif /* INCLUDED_sysdir_h_ */