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
commitc3c3e114541c2daf9a507c10898c4b8d963e86b7 (patch)
tree13243a51dfb9f2626c8fba61ea0c302bc5017dc4
parent6b06553049d438a52127fa722cbd8717d2a13680 (diff)
downloadtxr-c3c3e114541c2daf9a507c10898c4b8d963e86b7.tar.gz
txr-c3c3e114541c2daf9a507c10898c4b8d963e86b7.tar.bz2
txr-c3c3e114541c2daf9a507c10898c4b8d963e86b7.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));