libsheepy

C lib for handling text files, strings and json like data structure with an object oriented system
git clone https://spartatek.se/git/libsheepy.git
Log | Files | Refs | README | LICENSE

commit 733fea5730bd1708472e1d9029bb4a1f0fded77c
parent 4fbcca506edc8576a737075a2adf2466c797efe4
Author: Remy Noulin <loader2x@gmail.com>
Date:   Thu, 23 Sep 2021 13:06:36 +0200

fix coredump on segfaults. In segfault handler call default handler

release/libsheepy.c | 24 ++++++++++++------------
release/libsheepy.h |  2 +-
src/libsheepy.c     | 24 ++++++++++++------------
src/libsheepy.h     |  2 +-
4 files changed, 26 insertions(+), 26 deletions(-)

Diffstat:
Mrelease/libsheepy.c | 24++++++++++++------------
Mrelease/libsheepy.h | 2+-
Msrc/libsheepy.c | 24++++++++++++------------
Msrc/libsheepy.h | 2+-
4 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/release/libsheepy.c b/release/libsheepy.c @@ -860,6 +860,8 @@ static char *progName = NULL; static const char *defaultProgName = NULL; static char *libSheepyRealProgPath = NULL; +static struct sigaction default_sa = init0Var; + /** * segmentation fault handler * @@ -881,13 +883,15 @@ internal void segfault_sigaction(int signal, siginfo_t *si, void *arg) { /* realpath("/proc/self/exe", realProgPath); */ /* s = 'addr2line -e %s %s', realProgPath, addr */ /* systemNFree(s); */ - XFAILURE + // call default signal handler + default_sa.sa_sigaction(signal, si, arg); } + #else // __arm__ || __aarch64__ || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__ internal void segfault_sigaction(int signal UNUSED, siginfo_t *si UNUSED, void *arg UNUSED) { - puts("Segfault"); - XFAILURE + // call default signal handler + default_sa.sa_sigaction(signal, si, arg); } #endif @@ -1493,12 +1497,11 @@ void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) { } // segfault signal - struct sigaction sa; - memset(&sa, 0, sizeof(struct sigaction)); + struct sigaction sa = init0Var; sigemptyset(&sa.sa_mask); sa.sa_sigaction = segfault_sigaction;; sa.sa_flags = SA_SIGINFO;; - sigaction(SIGSEGV, &sa, NULL); + sigaction(SIGSEGV, &sa, &default_sa); // fibers staticArrayInit(fibers.L); @@ -1553,12 +1556,11 @@ void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) { } // segfault signal - struct sigaction sa; - memset(&sa, 0, sizeof(struct sigaction)); + struct sigaction sa = init0Var; sigemptyset(&sa.sa_mask); sa.sa_sigaction = segfault_sigaction;; sa.sa_flags = SA_SIGINFO;; - sigaction(SIGSEGV, &sa, NULL); + sigaction(SIGSEGV, &sa, &default_sa); // fibers staticArrayInit(fibers.L); @@ -1931,7 +1933,7 @@ time_t getCurrentUnixTime(void) { * */ time_t strToUnixTime(const char *date, const char *format) { - struct tm tm; + struct tm tm = init0Var;; time_t r; // sanity checks @@ -1939,8 +1941,6 @@ time_t strToUnixTime(const char *date, const char *format) { return(-1); } - memset(&tm, 0, sizeof tm); - if ((strptime(date, format, &tm))) { r = mktime(&tm); } diff --git a/release/libsheepy.h b/release/libsheepy.h @@ -98,7 +98,7 @@ // version accoring to the version package: Release.Major.minor.patch // https://noulin.net/version/file/README.md.html -#define LIBSHEEPY_VERSION "2.2.6.3" +#define LIBSHEEPY_VERSION "2.2.6.4" #ifndef SH_PREFIX #define SH_PREFIX(NAME) NAME diff --git a/src/libsheepy.c b/src/libsheepy.c @@ -916,6 +916,8 @@ static char *progName = NULL; static const char *defaultProgName = NULL; static char *libSheepyRealProgPath = NULL; +static struct sigaction default_sa = init0Var; + /** * segmentation fault handler * @@ -937,13 +939,15 @@ internal void segfault_sigaction(int signal, siginfo_t *si, void *arg) { /* realpath("/proc/self/exe", realProgPath); */ /* s = 'addr2line -e %s %s', realProgPath, addr */ /* systemNFree(s); */ - XFAILURE + // call default signal handler + default_sa.sa_sigaction(signal, si, arg); } + #else // __arm__ || __aarch64__ || __APPLE__ || __i386__ || __FreeBSD__ || __OpenBSD__ || __DragonFly__ || MUSL_LIBC || __HAIKU__ internal void segfault_sigaction(int signal UNUSED, siginfo_t *si UNUSED, void *arg UNUSED) { - puts("Segfault"); - XFAILURE + // call default signal handler + default_sa.sa_sigaction(signal, si, arg); } #endif @@ -1549,12 +1553,11 @@ void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) { } // segfault signal - struct sigaction sa; - memset(&sa, 0, sizeof(struct sigaction)); + struct sigaction sa = init0Var; sigemptyset(&sa.sa_mask); sa.sa_sigaction = segfault_sigaction;; sa.sa_flags = SA_SIGINFO;; - sigaction(SIGSEGV, &sa, NULL); + sigaction(SIGSEGV, &sa, &default_sa); // fibers staticArrayInit(fibers.L); @@ -1609,12 +1612,11 @@ void initLibsheepyF(const char *progPath, initLibsheepyObjectP initF) { } // segfault signal - struct sigaction sa; - memset(&sa, 0, sizeof(struct sigaction)); + struct sigaction sa = init0Var; sigemptyset(&sa.sa_mask); sa.sa_sigaction = segfault_sigaction;; sa.sa_flags = SA_SIGINFO;; - sigaction(SIGSEGV, &sa, NULL); + sigaction(SIGSEGV, &sa, &default_sa); // fibers staticArrayInit(fibers.L); @@ -1987,7 +1989,7 @@ time_t getCurrentUnixTime(void) { * */ time_t strToUnixTime(const char *date, const char *format) { - struct tm tm; + struct tm tm = init0Var;; time_t r; // sanity checks @@ -1995,8 +1997,6 @@ time_t strToUnixTime(const char *date, const char *format) { return(-1); } - memset(&tm, 0, sizeof tm); - if ((strptime(date, format, &tm))) { r = mktime(&tm); } diff --git a/src/libsheepy.h b/src/libsheepy.h @@ -98,7 +98,7 @@ // version accoring to the version package: Release.Major.minor.patch // https://noulin.net/version/file/README.md.html -#define LIBSHEEPY_VERSION "2.2.6.3" +#define LIBSHEEPY_VERSION "2.2.6.4" #ifndef SH_PREFIX #define SH_PREFIX(NAME) NAME