Added a safe_malloc and removed the cast when using it.
authorFrancois Fleuret <francois@fleuret.org>
Tue, 16 Mar 2010 17:55:22 +0000 (18:55 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Tue, 16 Mar 2010 17:55:22 +0000 (18:55 +0100)
selector.c

index 746e2f0..a5b620e 100644 (file)
@@ -35,6 +35,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
+#include <errno.h>
 #include <ncurses.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
@@ -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, "<title>");
       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) {