util.c
changeset 3 e969f3575b7a
parent 2 a79188fe4a40
child 5 e5018cae273f
equal deleted inserted replaced
2:a79188fe4a40 3:e969f3575b7a
     4  */
     4  */
     5 
     5 
     6 #include <stdarg.h>
     6 #include <stdarg.h>
     7 #include <stdio.h>
     7 #include <stdio.h>
     8 #include <stdlib.h>
     8 #include <stdlib.h>
       
     9 #include <string.h>
     9 
    10 
    10 void
    11 void
    11 error(char *errstr, ...) {
    12 error(char *errstr, ...) {
    12 	va_list ap;
    13 	va_list ap;
    13 	va_start(ap, errstr);
    14 	va_start(ap, errstr);
    14 	vfprintf(stderr, errstr, ap);
    15 	vfprintf(stderr, errstr, ap);
    15 	va_end(ap);
    16 	va_end(ap);
    16 	exit(1);
    17 	exit(1);
    17 }
    18 }
    18 
    19 
       
    20 static void
       
    21 bad_malloc(unsigned int size)
       
    22 {
       
    23 	fprintf(stderr, "fatal: could not malloc() %d bytes\n",
       
    24 			(int) size);
       
    25 	exit(1);
       
    26 }
       
    27 
       
    28 void *
       
    29 emallocz(unsigned int size)
       
    30 {
       
    31 	void *res = calloc(1, size);
       
    32 	if(!res)
       
    33 		bad_malloc(size);
       
    34 	return res;
       
    35 }
       
    36 
       
    37 void *
       
    38 emalloc(unsigned int size)
       
    39 {
       
    40 	void *res = malloc(size);
       
    41 	if(!res)
       
    42 		bad_malloc(size);
       
    43 	return res;
       
    44 }
       
    45 
       
    46 void *
       
    47 erealloc(void *ptr, unsigned int size)
       
    48 {
       
    49 	void *res = realloc(ptr, size);
       
    50 	if(!res)
       
    51 		bad_malloc(size);
       
    52 	return res;
       
    53 }
       
    54 
       
    55 char *
       
    56 estrdup(const char *str)
       
    57 {
       
    58 	void *res = strdup(str);
       
    59 	if(!res)
       
    60 		bad_malloc(strlen(str));
       
    61 	return res;
       
    62 }
       
    63 
       
    64 void
       
    65 failed_assert(char *a, char *file, int line)
       
    66 {
       
    67 	fprintf(stderr, "Assertion \"%s\" failed at %s:%d\n", a, file, line);
       
    68 	abort();
       
    69 }
       
    70 
       
    71 void
       
    72 swap(void **p1, void **p2)
       
    73 {
       
    74 	void *tmp = *p1;
       
    75 	*p1 = *p2;
       
    76 	*p2 = tmp;
       
    77 }