summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-01-02 11:02:54 -0800
committerKaz Kylheku <kaz@kylheku.com>2022-01-02 11:02:54 -0800
commiteccac0d5e99577d1dac8bd9776ecf9f23e4c8ad8 (patch)
tree13243a51dfb9f2626c8fba61ea0c302bc5017dc4
parente368145682778f945f130ccb4a5f11e00307ae12 (diff)
downloadtxr-eccac0d5e99577d1dac8bd9776ecf9f23e4c8ad8.tar.gz
txr-eccac0d5e99577d1dac8bd9776ecf9f23e4c8ad8.tar.bz2
txr-eccac0d5e99577d1dac8bd9776ecf9f23e4c8ad8.zip
sysif: rlim constants: use signed/unsigned-agnostic macro.
* lib.h (num_ex): New macro. Uses unum if the argument is out of range for the signed type. Thus we can use this with unsigned constants that would wrap negative if passed to num. This is useful if some type in a system header file might be signed or unsigned. * sysif.c (sysif_init): Use num_ex for the RLIM_* constants. I'm observing values of -1 which should really be large, positive values in the rlim_t type, that being unsigned.
-rw-r--r--lib.h2
-rw-r--r--sysif.c6
2 files changed, 5 insertions, 3 deletions
diff --git a/lib.h b/lib.h
index b2cadfac..f3d45e2b 100644
--- a/lib.h
+++ b/lib.h
@@ -768,6 +768,8 @@ val plist_to_alist(val list);
val improper_plist_to_alist(val list, val boolean_keys);
val num(cnum val);
val unum(ucnum u);
+#define num_ex(x) if3((x) > (ucnum) INT_PTR_MAX, unum(x), num(x))
+
val flo(double val);
cnum c_num(val num, val self);
ucnum c_unum(val num, val self);
diff --git a/sysif.c b/sysif.c
index 56817f2c..be6e020a 100644
--- a/sysif.c
+++ b/sysif.c
@@ -3173,9 +3173,9 @@ void sysif_init(void)
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));
+ reg_varl(intern(lit("rlim-saved-max"), user_package), num_ex(RLIM_SAVED_MAX));
+ reg_varl(intern(lit("rlim-saved-cur"), user_package), num_ex(RLIM_SAVED_CUR));
+ reg_varl(intern(lit("rlim-infinity"), user_package), num_ex(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));