From: Francois Fleuret Date: Tue, 16 Mar 2010 17:55:22 +0000 (+0100) Subject: Added a safe_malloc and removed the cast when using it. X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=commitdiff_plain;h=0f7dc2f3537263626ce0a448db1a7a17eda2c3ad;p=selector.git Added a safe_malloc and removed the cast when using it. --- diff --git a/selector.c b/selector.c index 746e2f0..a5b620e 100644 --- a/selector.c +++ b/selector.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -65,6 +66,19 @@ int error_flash = 0; int attr_modeline, attr_focus_line, attr_error; +/********************************************************************/ + +/* malloc with error checking. */ + +void *safe_malloc(size_t n) { + void *p = malloc(n); + if (!p && n != 0) { + printf("Can not allocate memory: %s\n", strerror(errno)); + exit(EXIT_FAILURE); + } + return p; +} + /*********************************************************************/ void inject_into_tty_buffer(char *string, int add_control_qs) { @@ -145,10 +159,10 @@ struct hash_table_t *new_hash_table(int size) { int k; struct hash_table_t *hash_table; - hash_table = (struct hash_table_t *) malloc(sizeof(struct hash_table_t)); + hash_table = safe_malloc(sizeof(struct hash_table_t)); hash_table->size = size; - hash_table->entries = (int *) malloc(hash_table->size * sizeof(int)); + hash_table->entries = safe_malloc(hash_table->size * sizeof(int)); for(k = 0; k < hash_table->size; k++) { hash_table->entries[k] = -1; @@ -266,10 +280,10 @@ void initialize_matcher(int use_regexp, int case_sensitive, } matcher->splitted_patterns = - (char *) malloc((strlen(pattern) + 1) * sizeof(char)); + safe_malloc((strlen(pattern) + 1) * sizeof(char)); matcher->patterns = - (char **) malloc(matcher->nb_patterns * sizeof(char *)); + safe_malloc(matcher->nb_patterns * sizeof(char *)); strcpy(matcher->splitted_patterns, pattern); @@ -648,7 +662,7 @@ void store_line(struct hash_table_t *hash_table, } if(dup < 0) { - lines[*nb_lines] = (char *) malloc((strlen(new_line) + 1) * sizeof(char)); + lines[*nb_lines] = safe_malloc((strlen(new_line) + 1) * sizeof(char)); strcpy(lines[*nb_lines], new_line); } else { /* The string was already in there, so we do not allocate a new @@ -843,7 +857,7 @@ int main(int argc, char **argv) { else if(strcmp(argv[i], "-t") == 0) { check_opt(argc, argv, i, 1, ""); free(title); - title = (char *) malloc((strlen(argv[i+1]) + 1) * sizeof(char)); + title = safe_malloc((strlen(argv[i+1]) + 1) * sizeof(char)); strcpy(title, argv[i+1]); i += 2; } @@ -922,7 +936,7 @@ int main(int argc, char **argv) { exit(error); } - lines = (char **) malloc(nb_lines_max * sizeof(char *)); + lines = safe_malloc(nb_lines_max * sizeof(char *)); nb_lines = 0; @@ -972,7 +986,7 @@ int main(int argc, char **argv) { label_separator and transform control characters to printable ones */ - labels = (char **) malloc(nb_lines * sizeof(char *)); + labels = safe_malloc(nb_lines * sizeof(char *)); for(l = 0; l < nb_lines; l++) { char *s, *t; @@ -985,7 +999,7 @@ int main(int argc, char **argv) { e += strlen(u); } - labels[l] = (char *) malloc((e + 1) * sizeof(char)); + labels[l] = safe_malloc((e + 1) * sizeof(char)); t = lines[l]; s = labels[l]; while(*t && *t != label_separator) {