summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2020-08-21 10:37:29 +0200
committerChristian Göttsche <cgzones@googlemail.com>2020-08-21 10:37:29 +0200
commit3856bf574b6686418392e6e1ba2ed8525427b241 (patch)
tree34b50d8a9e8a1eb44160477d955ae30d102d8138
parent40ac7a88af5a2c7c0d03ca4ddb09cde01f7e80c5 (diff)
Introduce xAsprintf as checked version of asprintf
-rw-r--r--XAlloc.c6
-rw-r--r--XAlloc.h6
-rw-r--r--linux/LinuxProcessList.c6
3 files changed, 14 insertions, 4 deletions
diff --git a/XAlloc.c b/XAlloc.c
index fbc642cc..4aa8e217 100644
--- a/XAlloc.c
+++ b/XAlloc.c
@@ -14,7 +14,7 @@
#include <stdlib.h>
}*/
-static inline void fail() {
+void fail() {
curs_set(1);
endwin();
err(1, NULL);
@@ -44,6 +44,10 @@ void* xRealloc(void* ptr, size_t size) {
return data;
}
+#undef xAsprintf
+
+#define xAsprintf(strp, fmt, ...) do { int _r=asprintf(strp, fmt, __VA_ARGS__); if (_r < 0) { fail(); } } while(0)
+
#define xSnprintf(fmt, len, ...) do { int _l=len; int _n=snprintf(fmt, _l, __VA_ARGS__); if (!(_n > -1 && _n < _l)) { curs_set(1); endwin(); err(1, NULL); } } while(0)
#undef xStrdup
diff --git a/XAlloc.h b/XAlloc.h
index 97a1c0d0..2d464051 100644
--- a/XAlloc.h
+++ b/XAlloc.h
@@ -11,12 +11,18 @@
#include <assert.h>
#include <stdlib.h>
+extern void fail(void);
+
extern void* xMalloc(size_t size);
extern void* xCalloc(size_t nmemb, size_t size);
extern void* xRealloc(void* ptr, size_t size);
+#undef xAsprintf
+
+#define xAsprintf(strp, fmt, ...) do { int _r=asprintf(strp, fmt, __VA_ARGS__); if (_r < 0) { fail(); } } while(0)
+
#define xSnprintf(fmt, len, ...) do { int _l=len; int _n=snprintf(fmt, _l, __VA_ARGS__); if (!(_n > -1 && _n < _l)) { curs_set(1); endwin(); err(1, NULL); } } while(0)
#undef xStrdup
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index bcdd5515..0d25e365 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -822,11 +822,11 @@ static char* LinuxProcessList_updateTtyDevice(TtyDriver* ttyDrivers, unsigned in
struct stat sstat;
char* fullPath;
for(;;) {
- asprintf(&fullPath, "%s/%d", ttyDrivers[i].path, idx);
+ xAsprintf(&fullPath, "%s/%d", ttyDrivers[i].path, idx);
int err = stat(fullPath, &sstat);
if (err == 0 && major(sstat.st_rdev) == maj && minor(sstat.st_rdev) == min) return fullPath;
free(fullPath);
- asprintf(&fullPath, "%s%d", ttyDrivers[i].path, idx);
+ xAsprintf(&fullPath, "%s%d", ttyDrivers[i].path, idx);
err = stat(fullPath, &sstat);
if (err == 0 && major(sstat.st_rdev) == maj && minor(sstat.st_rdev) == min) return fullPath;
free(fullPath);
@@ -837,7 +837,7 @@ static char* LinuxProcessList_updateTtyDevice(TtyDriver* ttyDrivers, unsigned in
if (err == 0 && tty_nr == sstat.st_rdev) return strdup(ttyDrivers[i].path);
}
char* out;
- asprintf(&out, "/dev/%u:%u", maj, min);
+ xAsprintf(&out, "/dev/%u:%u", maj, min);
return out;
}

© 2014-2024 Faster IT GmbH | imprint | privacy policy