summaryrefslogtreecommitdiffstats
path: root/games/abuse/fix-startup-segfault.diff
diff options
context:
space:
mode:
author B. Watson2023-08-08 04:11:33 +0200
committer Willy Sudiarto Raharjo2023-08-12 03:29:52 +0200
commita9bfc2f55bb287b96b29bb521cdd0ef3325d4170 (patch)
tree505155f169517199e74dcc0b1807bb0b791d6031 /games/abuse/fix-startup-segfault.diff
parent508d793fa8633df505797c9191e80fb06e66362e (diff)
downloadslackbuilds-a9bfc2f55bb287b96b29bb521cdd0ef3325d4170.tar.gz
games/abuse: New maintainer, fix segfault.
Signed-off-by: B. Watson <urchlay@slackware.uk> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'games/abuse/fix-startup-segfault.diff')
-rw-r--r--games/abuse/fix-startup-segfault.diff63
1 files changed, 63 insertions, 0 deletions
diff --git a/games/abuse/fix-startup-segfault.diff b/games/abuse/fix-startup-segfault.diff
new file mode 100644
index 0000000000..47a675acfb
--- /dev/null
+++ b/games/abuse/fix-startup-segfault.diff
@@ -0,0 +1,63 @@
+diff -Naur abuse-0.8/src/lisp/lisp.cpp abuse-0.8.patched/src/lisp/lisp.cpp
+--- abuse-0.8/src/lisp/lisp.cpp 2011-05-02 07:55:06.000000000 -0400
++++ abuse-0.8.patched/src/lisp/lisp.cpp 2023-08-07 20:52:41.197394085 -0400
+@@ -867,7 +867,7 @@
+ size_t ret = 0;
+
+ #ifdef TYPE_CHECKING
+- if (this && item_type(this) != (ltype)L_CONS_CELL)
++ if (item_type(this) != (ltype)L_CONS_CELL)
+ {
+ Print();
+ lbreak(" is not a sequence\n");
+@@ -1275,7 +1275,7 @@
+ switch (item_type(this))
+ {
+ case L_CONS_CELL:
+- if (!this)
++ if (ptr_is_null(this))
+ {
+ lprint_string("nil");
+ }
+@@ -3080,7 +3080,7 @@
+
+ LObject *ret = NULL;
+
+- if (this)
++ if (!ptr_is_null(this))
+ {
+ switch (item_type(this))
+ {
+diff -Naur abuse-0.8/src/lisp/lisp.h abuse-0.8.patched/src/lisp/lisp.h
+--- abuse-0.8/src/lisp/lisp.h 2011-05-02 07:55:06.000000000 -0400
++++ abuse-0.8.patched/src/lisp/lisp.h 2023-08-07 20:53:56.765386973 -0400
+@@ -201,7 +201,28 @@
+
+ static inline LObject *&CAR(void *x) { return ((LList *)x)->car; }
+ static inline LObject *&CDR(void *x) { return ((LList *)x)->cdr; }
+-static inline ltype item_type(void *x) { if (x) return *(ltype *)x; return L_CONS_CELL; }
++
++#ifdef __GNUC__
++/*
++ * C++ spec says "this" is always NON-NULL, recent versions of gcc will warn
++ * about this and optimizes the "if (this)" we use in some places away:
++ * "warning: nonnull argument ‘this’ compared to NULL [-Wnonnull-compare]"
++ * We rely on "if (this)" checks in several places and refactoring this is
++ * non trivial. So we use this little helper marked with
++ * __attribute__((optimize("O0"))) to workaround this.
++ */
++static inline bool __attribute__((optimize("O0"))) ptr_is_null(void *ptr)
++{
++ return ptr == NULL;
++}
++#else
++static inline bool ptr_is_null(void *ptr)
++{
++ return ptr == NULL;
++}
++#endif
++
++static inline ltype item_type(void *x) { if (!ptr_is_null(x)) return *(ltype *)x; return L_CONS_CELL; }
+
+ void perm_space();
+ void tmp_space();