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_sysfile_h_
24 #define INCLUDED_sysfile_h_
29 #include <sys/errno.h> /* <errno.h> does not always imply this */
36 #ifndef INCLUDED_FCNTL
37 # define INCLUDED_FCNTL
39 #endif /* INCLUDED_FCNTL */
41 /* Load sys/types.h if not already loaded.
42 In some systems loading it twice is suicidal. */
44 #include <sys/types.h> /* some typedefs are used in sys/file.h */
54 /* Some configuration files' definitions for the LOAD_AVE_CVT macro
55 (like sparc.h's) use macros like FSCALE, defined here. */
56 #include <sys/param.h>
59 #if defined (NeXT) || defined(CYGWIN)
60 /* what is needed from here? Do others need it too?
61 O_BINARY is in here under cygwin. */
62 # include <sys/fcntl.h>
71 #define STDIN_FILENO 0
72 #define STDOUT_FILENO 1
73 #define STDERR_FILENO 2
88 /* file opening defaults */
91 #define OPEN_BINARY O_BINARY
93 #define OPEN_BINARY (0)
99 #define OPEN_TEXT O_TEXT
101 #define OPEN_TEXT (0)
107 #define CREAT_MODE (S_IREAD | S_IWRITE)
109 #define CREAT_MODE (0666)
115 #define READ_TEXT "rt"
117 #define READ_TEXT "r"
123 #define READ_BINARY "rb"
125 #define READ_BINARY "r"
129 #ifndef READ_PLUS_TEXT
131 #define READ_PLUS_TEXT "r+t"
133 #define READ_PLUS_TEXT "r+"
137 #ifndef READ_PLUS_BINARY
139 #define READ_PLUS_BINARY "r+b"
141 #define READ_PLUS_BINARY "r+"
147 #define WRITE_TEXT "wt"
149 #define WRITE_TEXT "w"
155 #define WRITE_BINARY "wb"
157 #define WRITE_BINARY "w"
163 #define O_NONBLOCK O_NDELAY
165 #define O_NONBLOCK 04000
169 /* if system does not have symbolic links, it does not have lstat.
170 In that case, use ordinary stat instead. */
173 #define lstat xemacs_stat
178 # define S_IRUSR S_IREAD
180 # define S_IRUSR 00400
186 # define S_IWUSR S_IWRITE
188 # define S_IWUSR 00200
194 # define S_IXUSR S_IEXEC
196 # define S_IXUSR 00100
200 #ifdef STAT_MACROS_BROKEN
211 #endif /* STAT_MACROS_BROKEN. */
213 #if !defined(S_ISBLK) && defined(S_IFBLK)
214 #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
216 #if !defined(S_ISCHR) && defined(S_IFCHR)
217 #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
219 #if !defined(S_ISDIR) && defined(S_IFDIR)
220 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
222 #if !defined(S_ISREG) && defined(S_IFREG)
223 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
225 #if !defined(S_ISFIFO) && defined(S_IFIFO)
226 #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
228 #if !defined(S_ISLNK) && defined(S_IFLNK)
229 #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
231 #if !defined(S_ISSOCK) && defined(S_IFSOCK)
232 #define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
234 #if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */
235 #define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
236 #define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
238 #if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */
239 #define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
242 /* Client .c files should simply use `PATH_MAX'. */
244 # if defined (_POSIX_PATH_MAX)
245 # define PATH_MAX _POSIX_PATH_MAX
246 # elif defined (MAXPATHLEN)
247 # define PATH_MAX MAXPATHLEN
249 # define PATH_MAX 1024
253 /* MAXPATHLEN is deprecated, but, as of this writing, still used. */
255 # define MAXPATHLEN 1024
258 /* The following definitions are needed under Windows, at least */
276 # define FD_CLOEXEC 1
279 /* Emacs needs to use its own definitions of certain system calls on
280 some systems (like SunOS 4.1 and USG systems, where the read system
281 call is interruptible but Emacs expects it not to be; and under
282 MULE, where all filenames need to be converted to external format).
283 To do this, we #define read to be sys_read, which is defined in
284 sysdep.c. We first #undef read, in case some system file defines
285 read as a macro. sysdep.c doesn't encapsulate read, so the call to
286 read inside of sys_read will do the right thing.
288 DONT_ENCAPSULATE is used in files such as sysdep.c that want to
289 call the actual system calls rather than the encapsulated versions.
290 Those files can call sys_read to get the (possibly) encapsulated
293 IMPORTANT: the redefinition of the system call must occur *after* the
294 inclusion of any header files that declare or define the system call;
295 otherwise lots of unfriendly things can happen. This goes for all
296 encapsulated system calls.
298 We encapsulate the most common system calls here; we assume their
299 declarations are in one of the standard header files included above.
300 Other encapsulations are declared in the appropriate sys*.h file. */
302 #ifdef ENCAPSULATE_READ
303 ssize_t sys_read (int, void *, size_t);
305 #if defined (ENCAPSULATE_READ) && !defined (DONT_ENCAPSULATE)
307 # define read sys_read
309 #if !defined (ENCAPSULATE_READ) && defined (DONT_ENCAPSULATE)
310 # define sys_read read
313 #ifdef ENCAPSULATE_WRITE
314 ssize_t sys_write (int, const void *, size_t);
316 #if defined (ENCAPSULATE_WRITE) && !defined (DONT_ENCAPSULATE)
318 # define write sys_write
320 #if !defined (ENCAPSULATE_WRITE) && defined (DONT_ENCAPSULATE)
321 # define sys_write write
324 #ifdef ENCAPSULATE_OPEN
325 int sys_open (const char *, int, ...);
327 #if defined (ENCAPSULATE_OPEN) && !defined (DONT_ENCAPSULATE)
329 # define open sys_open
331 #if !defined (ENCAPSULATE_OPEN) && defined (DONT_ENCAPSULATE)
332 # define sys_open open
335 #ifdef ENCAPSULATE_CLOSE
338 #if defined (ENCAPSULATE_CLOSE) && !defined (DONT_ENCAPSULATE)
340 # define close sys_close
342 #if !defined (ENCAPSULATE_CLOSE) && defined (DONT_ENCAPSULATE)
343 # define sys_close close
346 /* Now the stdio versions ... */
348 #ifdef ENCAPSULATE_FREAD
349 size_t sys_fread (void *, size_t, size_t, FILE *);
351 #if defined (ENCAPSULATE_FREAD) && !defined (DONT_ENCAPSULATE)
353 # define fread sys_fread
355 #if !defined (ENCAPSULATE_FREAD) && defined (DONT_ENCAPSULATE)
356 # define sys_fread fread
359 #ifdef ENCAPSULATE_FWRITE
360 size_t sys_fwrite (const void *, size_t, size_t, FILE *);
362 #if defined (ENCAPSULATE_FWRITE) && !defined (DONT_ENCAPSULATE)
364 # define fwrite sys_fwrite
366 #if !defined (ENCAPSULATE_FWRITE) && defined (DONT_ENCAPSULATE)
367 # define sys_fwrite fwrite
370 #ifdef ENCAPSULATE_FOPEN
371 FILE *sys_fopen (const char *, const char *);
373 #if defined (ENCAPSULATE_FOPEN) && !defined (DONT_ENCAPSULATE)
375 # define fopen sys_fopen
377 #if !defined (ENCAPSULATE_FOPEN) && defined (DONT_ENCAPSULATE)
378 # define sys_fopen fopen
381 #ifdef ENCAPSULATE_FCLOSE
382 int sys_fclose (FILE *);
384 #if defined (ENCAPSULATE_FCLOSE) && !defined (DONT_ENCAPSULATE)
386 # define fclose sys_fclose
388 #if !defined (ENCAPSULATE_FCLOSE) && defined (DONT_ENCAPSULATE)
389 # define sys_fclose fclose
393 /* encapsulations: file-information calls */
395 #ifdef ENCAPSULATE_ACCESS
396 int sys_access (const char *path, int mode);
398 #if defined (ENCAPSULATE_ACCESS) && !defined (DONT_ENCAPSULATE)
400 # define access sys_access
402 #if !defined (ENCAPSULATE_ACCESS) && defined (DONT_ENCAPSULATE)
403 # define sys_access access
406 #ifdef ENCAPSULATE_EACCESS
407 int sys_eaccess (const char *path, int mode);
409 #if defined (ENCAPSULATE_EACCESS) && !defined (DONT_ENCAPSULATE)
411 # define eaccess sys_eaccess
413 #if !defined (ENCAPSULATE_EACCESS) && defined (DONT_ENCAPSULATE)
414 # define sys_eaccess eaccess
417 #ifdef ENCAPSULATE_LSTAT
418 int sys_lstat (const char *path, struct stat *buf);
420 #if defined (ENCAPSULATE_LSTAT) && !defined (DONT_ENCAPSULATE)
422 # define lstat sys_lstat
424 #if !defined (ENCAPSULATE_LSTAT) && defined (DONT_ENCAPSULATE)
425 # define sys_lstat lstat
428 #ifdef ENCAPSULATE_READLINK
429 int sys_readlink (const char *path, char *buf, size_t bufsiz);
431 #if defined (ENCAPSULATE_READLINK) && !defined (DONT_ENCAPSULATE)
433 # define readlink sys_readlink
435 #if !defined (ENCAPSULATE_READLINK) && defined (DONT_ENCAPSULATE)
436 # define sys_readlink readlink
439 #ifdef ENCAPSULATE_FSTAT
440 int sys_fstat (int fd, struct stat *buf);
442 #if defined (ENCAPSULATE_FSTAT) && !defined (DONT_ENCAPSULATE)
444 # define fstat sys_fstat
446 #if !defined (ENCAPSULATE_FSTAT) && defined (DONT_ENCAPSULATE)
447 # define sys_fstat fstat
450 int xemacs_stat (const char *path, struct stat *buf);
452 /* encapsulations: file-manipulation calls */
454 #ifdef ENCAPSULATE_CHMOD
455 int sys_chmod (const char *path, mode_t mode);
457 #if defined (ENCAPSULATE_CHMOD) && !defined (DONT_ENCAPSULATE)
459 # define chmod sys_chmod
461 #if !defined (ENCAPSULATE_CHMOD) && defined (DONT_ENCAPSULATE)
462 # define sys_chmod chmod
465 #ifdef ENCAPSULATE_CREAT
466 int sys_creat (const char *path, mode_t mode);
468 #if defined (ENCAPSULATE_CREAT) && !defined (DONT_ENCAPSULATE)
470 # define creat sys_creat
472 #if !defined (ENCAPSULATE_CREAT) && defined (DONT_ENCAPSULATE)
473 # define sys_creat creat
476 #ifdef ENCAPSULATE_LINK
477 int sys_link (const char *existing, const char *new);
479 #if defined (ENCAPSULATE_LINK) && !defined (DONT_ENCAPSULATE)
481 # define link sys_link
483 #if !defined (ENCAPSULATE_LINK) && defined (DONT_ENCAPSULATE)
484 # define sys_link link
487 #ifdef ENCAPSULATE_RENAME
488 int sys_rename (const char *old, const char *new);
490 #if defined (ENCAPSULATE_RENAME) && !defined (DONT_ENCAPSULATE)
492 # define rename sys_rename
494 #if !defined (ENCAPSULATE_RENAME) && defined (DONT_ENCAPSULATE)
495 # define sys_rename rename
498 #ifdef ENCAPSULATE_SYMLINK
499 int sys_symlink (const char *name1, const char *name2);
501 #if defined (ENCAPSULATE_SYMLINK) && !defined (DONT_ENCAPSULATE)
503 # define symlink sys_symlink
505 #if !defined (ENCAPSULATE_SYMLINK) && defined (DONT_ENCAPSULATE)
506 # define sys_symlink symlink
509 #ifdef ENCAPSULATE_UNLINK
510 int sys_unlink (const char *path);
512 #if defined (ENCAPSULATE_UNLINK) && !defined (DONT_ENCAPSULATE)
514 # define unlink sys_unlink
516 #if !defined (ENCAPSULATE_UNLINK) && defined (DONT_ENCAPSULATE)
517 # define sys_unlink unlink
520 #ifdef ENCAPSULATE_EXECVP
521 int sys_execvp (const char *, char * const *);
523 #if defined (ENCAPSULATE_EXECVP) && !defined (DONT_ENCAPSULATE)
525 # define execvp sys_execvp
527 #if !defined (ENCAPSULATE_EXECVP) && defined (DONT_ENCAPSULATE)
528 # define sys_execvp execvp
531 #endif /* INCLUDED_sysfile_h_ */