aboutsummaryrefslogtreecommitdiff
path: root/src/utils.cc
diff options
context:
space:
mode:
authorfusion32 <marcopuzziello@gmail.com>2026-05-28 23:56:29 -0300
committerfusion32 <marcopuzziello@gmail.com>2026-05-28 23:56:29 -0300
commite2ba7cd29617ae05087ad3d25c55a2eb8ce607a3 (patch)
tree2a93ee38c7cc9c83b3b89b3f0f7cbb6fcb8e8b3c /src/utils.cc
parentd1c4dce3be82aa7e50ddb5b43f15ecc00a16f985 (diff)
downloadgame-e2ba7cd29617ae05087ad3d25c55a2eb8ce607a3.tar.gz
game-e2ba7cd29617ae05087ad3d25c55a2eb8ce607a3.zip
fix issues and warnings when compiling with glibc < 2.32 (#57, #58)
This also fixes some inconsistencies such as mixing both strerror and strerrordesc_np, and possible formatting issues.
Diffstat (limited to 'src/utils.cc')
-rw-r--r--src/utils.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/utils.cc b/src/utils.cc
index 3937923..e7d8acd 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -1,5 +1,6 @@
#include "common.hh"
+#include <signal.h>
#include <sys/stat.h>
static TErrorFunction *ErrorFunction;
@@ -95,6 +96,46 @@ bool FileExists(const char *FileName){
return Result;
}
+#if !defined(_GNU_SOURCE) || (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 32))
+# if defined(_BSD_SOURCE) || defined(_DEFAULT_SOURCE)
+static const char *sigdescr_np(int SigNr){
+ const char *Description = NULL;
+ if(SigNr >= 0 && SigNr < NSIG){
+ Description = sys_siglist[SigNr];
+ }
+ return Description;
+}
+
+static const char *strerrordesc_np(int ErrCode){
+ const char *Description = NULL;
+ if(ErrCode >= 0 && ErrCode < sys_nerr){
+ Description = sys_errlist[ErrCode];
+ }
+ return Description;
+}
+# else // defined(_BSD_SOURCE) || defined(_DEFAULT_SOURCE)
+#warning "Current LIBC/GLIBC version doesn't expose error/signal description tables."
+static const char *sigdescr_np(int SigNr){ return "No signal description"; }
+static const char *strerrordesc_np(int ErrCode){ return "No error description"; }
+# endif // defined(_BSD_SOURCE) || defined(_DEFAULT_SOURCE)
+#endif //!defined(_GNU_SOURCE) || (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 32))
+
+const char *GetSignalDescription(int SigNr){
+ const char *Description = sigdescr_np(SigNr);
+ if(Description == NULL){
+ Description = "Invalid signal";
+ }
+ return Description;
+}
+
+const char *GetErrorDescription(int ErrCode){
+ const char *Description = strerrordesc_np(ErrCode);
+ if(Description == NULL){
+ Description = "Invalid error";
+ }
+ return Description;
+}
+
// String Utility
// =============================================================================
bool isSpace(int c){