summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure1
-rw-r--r--sysif.c16
2 files changed, 17 insertions, 0 deletions
diff --git a/configure b/configure
index e894aa0f..353dd844 100755
--- a/configure
+++ b/configure
@@ -3463,6 +3463,7 @@ done
if [ "$file_offset_define" = none ] ; then
printf " (no 64 bit off_t)"
elif [ -n "$file_offset_define" ] ; then
+ printf "#define CONFIG_LARGE_FILE_OFFSET 1\n" >> config.h
lang_flags="$lang_flags -D$file_offset_define"
fi
diff --git a/sysif.c b/sysif.c
index 3cdf14d2..56817f2c 100644
--- a/sysif.c
+++ b/sysif.c
@@ -106,6 +106,9 @@
#include "itypes.h"
#include "txr.h"
#include "sysif.h"
+#if CONFIG_LARGE_FILE_OFFSET
+#include "arith.h"
+#endif
#ifndef DT_DIR
#undef DT_UNKNOWN
@@ -3158,9 +3161,22 @@ void sysif_init(void)
#if HAVE_RLIMIT
reg_fun(intern(lit("getrlimit"), user_package), func_n2o(getrlimit_wrap, 1));
reg_fun(intern(lit("setrlimit"), user_package), func_n2(setrlimit_wrap));
+#if CONFIG_LARGE_FILE_OFFSET
+ {
+ val rlim_inf = bignum_dbl_uipt(RLIM_INFINITY);
+ val rlim_smax = if3(RLIM_SAVED_MAX == RLIM_INFINITY,
+ rlim_inf, bignum_dbl_uipt(RLIM_SAVED_MAX));
+ val rlim_scur = if3(RLIM_SAVED_CUR == RLIM_INFINITY,
+ rlim_inf, bignum_dbl_uipt(RLIM_SAVED_CUR));
+ reg_varl(intern(lit("rlim-saved-max"), user_package), rlim_smax);
+ reg_varl(intern(lit("rlim-saved-cur"), user_package), rlim_scur);
+ reg_varl(intern(lit("rlim-infinity"), user_package), rlim_inf);
+ }
+#else
reg_varl(intern(lit("rlim-saved-max"), user_package), num_fast(RLIM_SAVED_MAX));
reg_varl(intern(lit("rlim-saved-cur"), user_package), num_fast(RLIM_SAVED_CUR));
reg_varl(intern(lit("rlim-infinity"), user_package), num_fast(RLIM_INFINITY));
+#endif
reg_varl(intern(lit("rlimit-core"), user_package), num_fast(RLIMIT_CORE));
reg_varl(intern(lit("rlimit-cpu"), user_package), num_fast(RLIMIT_CPU));
reg_varl(intern(lit("rlimit-data"), user_package), num_fast(RLIMIT_DATA));