tAdd xmalloc and xrealloc wrappers - st - [fork] customized build of st, the si… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit b9d5fec4f277b688b3bb4741134abf152e801e90 | |
parent 8f1144edee8f4c9ac54faae2ad522544e9e217fa | |
Author: Roberto E. Vargas Caballero <[email protected]> | |
Date: Wed, 12 Sep 2012 21:25:35 +0200 | |
Add xmalloc and xrealloc wrappers | |
If malloc or realloc fail they return NULL. Theorically this condition | |
should be tested in the code, but it's a strange condition today (basically | |
if this is hapenning thenyou have a big problem), and even Linux never returns | |
NULL in the default configuration (only if the process don't have room in | |
tthe space address, something a bit impossible in the case of st). But stis | |
enough small for being executed in low resources computers where this can be | |
a real problem. So the easy way is creating a wrappers function for them and | |
call to die in case of error. | |
--- | |
st.c | 44 +++++++++++++++++++++++++++++++------------- | |
1 file changed, 31 insertions(+), 13 deletions(-) | |
Diffstat: | |
M st.c | 44 ++++++++++++++++++++++-------… | |
1 file changed, 31 insertions(+), 13 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -326,6 +326,9 @@ static int utf8encode(long *, char *); | |
static int utf8size(char *); | |
static int isfullutf8(char *, int); | |
+static void *xmalloc(size_t); | |
+static void *xrealloc(void *, size_t); | |
+ | |
static void (*handler[LASTEvent])(XEvent *) = { | |
[KeyPress] = kpress, | |
[ClientMessage] = cmessage, | |
t@@ -359,6 +362,21 @@ static char *opt_title = NULL; | |
static char *opt_embed = NULL; | |
static char *opt_class = NULL; | |
+void * | |
+xmalloc(size_t len) { | |
+ void *p = malloc(len); | |
+ if(!p) | |
+ die("Out of memory"); | |
+ return p; | |
+} | |
+ | |
+void * | |
+xrealloc(void *p, size_t len) { | |
+ if((p = realloc(p, len)) == NULL) | |
+ die("Out of memory"); | |
+ return p; | |
+} | |
+ | |
int | |
utf8decode(char *s, long *u) { | |
uchar c; | |
t@@ -565,7 +583,7 @@ selcopy(void) { | |
else { | |
bufsize = (term.col+1) * (sel.e.y-sel.b.y+1) * UTF_SIZ; | |
- ptr = str = malloc(bufsize); | |
+ ptr = str = xmalloc(bufsize); | |
/* append every set & selected glyph to the selection */ | |
for(y = 0; y < term.row; y++) { | |
t@@ -918,14 +936,14 @@ void | |
tnew(int col, int row) { | |
/* set screen size */ | |
term.row = row, term.col = col; | |
- term.line = malloc(term.row * sizeof(Line)); | |
- term.alt = malloc(term.row * sizeof(Line)); | |
- term.dirty = malloc(term.row * sizeof(*term.dirty)); | |
- term.tabs = malloc(term.col * sizeof(*term.tabs)); | |
+ term.line = xmalloc(term.row * sizeof(Line)); | |
+ term.alt = xmalloc(term.row * sizeof(Line)); | |
+ term.dirty = xmalloc(term.row * sizeof(*term.dirty)); | |
+ term.tabs = xmalloc(term.col * sizeof(*term.tabs)); | |
for(row = 0; row < term.row; row++) { | |
- term.line[row] = malloc(term.col * sizeof(Glyph)); | |
- term.alt [row] = malloc(term.col * sizeof(Glyph)); | |
+ term.line[row] = xmalloc(term.col * sizeof(Glyph)); | |
+ term.alt [row] = xmalloc(term.col * sizeof(Glyph)); | |
term.dirty[row] = 0; | |
} | |
memset(term.tabs, 0, term.col * sizeof(*term.tabs)); | |
t@@ -1761,16 +1779,16 @@ tresize(int col, int row) { | |
} | |
/* resize to new height */ | |
- term.line = realloc(term.line, row * sizeof(Line)); | |
- term.alt = realloc(term.alt, row * sizeof(Line)); | |
- term.dirty = realloc(term.dirty, row * sizeof(*term.dirty)); | |
- term.tabs = realloc(term.tabs, col * sizeof(*term.tabs)); | |
+ term.line = xrealloc(term.line, row * sizeof(Line)); | |
+ term.alt = xrealloc(term.alt, row * sizeof(Line)); | |
+ term.dirty = xrealloc(term.dirty, row * sizeof(*term.dirty)); | |
+ term.tabs = xrealloc(term.tabs, col * sizeof(*term.tabs)); | |
/* resize each row to new width, zero-pad if needed */ | |
for(i = 0; i < minrow; i++) { | |
term.dirty[i] = 1; | |
- term.line[i] = realloc(term.line[i], col * sizeof(Glyph)); | |
- term.alt[i] = realloc(term.alt[i], col * sizeof(Glyph)); | |
+ term.line[i] = xrealloc(term.line[i], col * sizeof(Glyph)); | |
+ term.alt[i] = xrealloc(term.alt[i], col * sizeof(Glyph)); | |
for(x = mincol; x < col; x++) { | |
term.line[i][x].state = 0; | |
term.alt[i][x].state = 0; |