comparison libcore/core/util.c @ 121:789b23e01f52

misc: reorganize hierarchy, closes #2490
author David Demelier <markand@malikania.fr>
date Mon, 05 Oct 2020 13:25:06 +0200
parents src/core/util.c@e82eca4f8606
children eb0a7ab71023
comparison
equal deleted inserted replaced
120:b3429b26d60d 121:789b23e01f52
1 /*
2 * util.c -- utilities
3 *
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include <assert.h>
20 #include <errno.h>
21 #include <stdlib.h>
22 #include <string.h>
23
24 #include <SDL.h>
25
26 #include "panic.h"
27 #include "util.h"
28
29 void *
30 emalloc(size_t size)
31 {
32 void *mem;
33
34 if (!(mem = malloc(size)))
35 panicf("%s", strerror(errno));
36
37 return mem;
38 }
39
40 void *
41 ecalloc(size_t n, size_t size)
42 {
43 void *mem;
44
45 if (!(mem = calloc(n, size)))
46 panicf("%s", strerror(errno));
47
48 return mem;
49 }
50
51 void *
52 ememdup(const void *ptr, size_t size)
53 {
54 void *mem;
55
56 if (!(mem = malloc(size)))
57 panicf("%s", strerror(errno));
58
59 return memcpy(mem, ptr, size);
60 }
61
62 char *
63 eprintf(const char *fmt, ...)
64 {
65 assert(fmt);
66
67 va_list ap;
68 char *ret;
69
70 va_start(ap, fmt);
71 ret = evprintf(fmt, ap);
72 va_end(ap);
73
74 return ret;
75 }
76
77 char *
78 evprintf(const char *fmt, va_list args)
79 {
80 assert(fmt);
81
82 va_list ap;
83 int size;
84 char *ret;
85
86 /* Count number of bytes required. */
87 va_copy(ap, args);
88
89 if ((size = vsnprintf(NULL, 0, fmt, ap)) < 0)
90 panicf("%s", strerror(errno));
91
92 /* Do actual copy. */
93 ret = emalloc(size + 1);
94 va_copy(ap, args);
95
96 if (vsnprintf(ret, size, fmt, ap) != size) {
97 free(ret);
98 panicf("%s", strerror(errno));
99 }
100
101 return ret;
102 }
103
104 void
105 delay(unsigned int ms)
106 {
107 SDL_Delay(ms);
108 }