ind.c - libdht - A simple helper library for distributed hash tables.
(HTM) git clone git://r-36.net/libdht
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
ind.c (1290B)
---
1 /*
2 * Copy me if you can.
3 * by 20h
4 */
5
6 #include <unistd.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <stdarg.h>
10 #include <fcntl.h>
11 #include <string.h>
12 #include <ctype.h>
13 #include <errno.h>
14
15 #include "ind.h"
16
17 void
18 die(char *fmt, ...)
19 {
20 va_list fmtargs;
21
22 va_start(fmtargs, fmt);
23 vfprintf(stderr, fmt, fmtargs);
24 va_end(fmtargs);
25
26 exit(EXIT_FAILURE);
27 }
28
29 void
30 edie(char *fmt, ...)
31 {
32 va_list fmtargs;
33
34 va_start(fmtargs, fmt);
35 vfprintf(stderr, fmt, fmtargs);
36 va_end(fmtargs);
37
38 perror(NULL);
39
40 exit(EXIT_FAILURE);
41 }
42
43 void *
44 reallocz(void *p, int l, int z)
45 {
46 p = realloc(p, l);
47 if(p == NULL)
48 edie("realloc");
49 if(z > 0)
50 memset(p, 0, l);
51
52 return p;
53 }
54
55 void *
56 mallocz(int l, int z)
57 {
58 return reallocz(NULL, l, z);
59 }
60
61 void *
62 memdup(void *p, int l)
63 {
64 char *ret;
65
66 ret = reallocz(NULL, l, 2);
67 memmove(ret, p, l);
68
69 return (void *)ret;
70 }
71
72 char *
73 vsmprintf(char *fmt, va_list fmtargs)
74 {
75 char *ret;
76 int size;
77
78 ret = "";
79
80 size = vsnprintf(ret, 0, fmt, fmtargs);
81 ret = reallocz(NULL, ++size, 2);
82 vsnprintf(ret, size, fmt, fmtargs);
83
84 return ret;
85 }
86
87 char *
88 smprintf(char *fmt, ...)
89 {
90 va_list fmtargs;
91 char *ret;
92
93 va_start(fmtargs, fmt);
94 ret = vsmprintf(fmt, fmtargs);
95 va_end(fmtargs);
96
97 return ret;
98 }
99