summaryrefslogtreecommitdiff
path: root/libguile/syscalls.h
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-06-17 18:18:26 +0200
committerAndy Wingo <wingo@pobox.com>2018-06-17 18:18:26 +0200
commit5176db70ca9489f9390371cd12bce3ce077d422e (patch)
tree8b0edde2fd7d55cfcf56a4b015c6ab12a4f5bffc /libguile/syscalls.h
parentf84ce5442e2602b6a41c48f596728d32d0aa8e47 (diff)
downloadguile-5176db70ca9489f9390371cd12bce3ce077d422e.tar.gz
Move syscall-related private defines to their own header
* libguile/syscalls.h: New private header. * libguile/Makefile.am (EXTRA_libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES): Add syscalls.h. * libguile/_scm.h: Remove SCM_SYSCALL and all the bits relating to e.g. stat versus stat64. * libguile/filesys.c: * libguile/fports.c: * libguile/i18n.c: * libguile/ioext.c: * libguile/poll.c: * libguile/ports.c: * libguile/posix.c: * libguile/rw.c: * libguile/scmsigs.c: * libguile/script.c: * libguile/socket.c: * libguile/strports.c: Include syscalls.h.
Diffstat (limited to 'libguile/syscalls.h')
-rw-r--r--libguile/syscalls.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/libguile/syscalls.h b/libguile/syscalls.h
new file mode 100644
index 000000000..13f47d49a
--- /dev/null
+++ b/libguile/syscalls.h
@@ -0,0 +1,100 @@
+/* classes: h_files */
+
+#ifndef SCM_SYSCALLS_H
+#define SCM_SYSCALLS_H
+
+/* Copyright (C) 1995-1996,2000-2002,2006,2008-2011,2013-2014,2018
+ * Free Software Foundation, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+
+/* ASYNC_TICK after finding EINTR in order to handle pending signals, if
+ any. See comment in scm_syserror. */
+#define SCM_SYSCALL(line) \
+ do \
+ { \
+ errno = 0; \
+ line; \
+ if (errno == EINTR) \
+ { \
+ scm_async_tick (); \
+ errno = EINTR; \
+ } \
+ } \
+ while (errno == EINTR)
+
+
+
+
+#if defined GUILE_USE_64_CALLS && GUILE_USE_64_CALLS && defined(HAVE_STAT64)
+#define CHOOSE_LARGEFILE(foo,foo64) foo64
+#else
+#define CHOOSE_LARGEFILE(foo,foo64) foo
+#endif
+
+/* These names are a bit long, but they make it clear what they represent. */
+#if SCM_HAVE_STRUCT_DIRENT64 == 1
+# define dirent_or_dirent64 CHOOSE_LARGEFILE(dirent,dirent64)
+#else
+# define dirent_or_dirent64 dirent
+#endif
+#define fstat_or_fstat64 CHOOSE_LARGEFILE(fstat,fstat64)
+#define ftruncate_or_ftruncate64 CHOOSE_LARGEFILE(ftruncate,ftruncate64)
+#define lseek_or_lseek64 CHOOSE_LARGEFILE(lseek,lseek64)
+#define lstat_or_lstat64 CHOOSE_LARGEFILE(lstat,lstat64)
+#define off_t_or_off64_t CHOOSE_LARGEFILE(off_t,off64_t)
+#define open_or_open64 CHOOSE_LARGEFILE(open,open64)
+#define readdir_or_readdir64 CHOOSE_LARGEFILE(readdir,readdir64)
+#if SCM_HAVE_READDIR64_R == 1
+# define readdir_r_or_readdir64_r CHOOSE_LARGEFILE(readdir_r,readdir64_r)
+#else
+# define readdir_r_or_readdir64_r readdir_r
+#endif
+#define stat_or_stat64 CHOOSE_LARGEFILE(stat,stat64)
+#define truncate_or_truncate64 CHOOSE_LARGEFILE(truncate,truncate64)
+#define scm_from_off_t_or_off64_t CHOOSE_LARGEFILE(scm_from_off_t,scm_from_int64)
+#define scm_from_ino_t_or_ino64_t CHOOSE_LARGEFILE(scm_from_ulong,scm_from_uint64)
+#define scm_from_blkcnt_t_or_blkcnt64_t CHOOSE_LARGEFILE(scm_from_ulong,scm_from_uint64)
+#define scm_to_off_t_or_off64_t CHOOSE_LARGEFILE(scm_to_off_t,scm_to_int64)
+
+#if SIZEOF_OFF_T == 4
+# define scm_to_off_t scm_to_int32
+# define scm_from_off_t scm_from_int32
+#elif SIZEOF_OFF_T == 8
+# define scm_to_off_t scm_to_int64
+# define scm_from_off_t scm_from_int64
+#else
+# error sizeof(off_t) is not 4 or 8.
+#endif
+#define scm_to_off64_t scm_to_int64
+#define scm_from_off64_t scm_from_int64
+
+
+#endif /* SCM_SYSCALLS_H */
+
+/*
+ Local Variables:
+ c-file-style: "gnu"
+ End:
+*/