equal
deleted
inserted
replaced
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 } |