3cb5dfe21c1ad727bd7e941f6b11a08f85bfb99d
2 * malloc.c: implementation of malloc.h
14 #define lenof(x) (sizeof((x))/sizeof(*(x)))
16 extern void fatal(const char *, ...);
18 void *smalloc(size_t size
) {
22 fatal("out of memory");
33 void *srealloc(void *p
, size_t size
) {
41 fatal("out of memory");
45 char *dupstr(const char *s
) {
46 char *r
= smalloc(1+strlen(s
));
51 char *dupfmt(const char *fmt
, ...)
55 char *ret
= NULL
, *rp
= NULL
;
65 for (pass
= 0; pass
< 2; pass
++) {
71 const char *data
= NULL
;
72 int datalen
= 0, stuffcr
= 0;
83 strftime(datebuf
, lenof(datebuf
),
84 "%a, %d %b %Y %H:%M:%S GMT", &tm
);
87 datalen
= strlen(data
);
88 } else if (*p
== 'd') {
89 int i
= va_arg(ap
, int);
90 sprintf(datebuf
, "%d", i
);
92 datalen
= strlen(data
);
93 } else if (*p
== 's') {
94 data
= va_arg(ap
, const char *);
95 datalen
= strlen(data
);
96 } else if (assert(*p
== 'S'), 1) {
97 stuffcr
= va_arg(ap
, int);
98 data
= va_arg(ap
, const char *);
99 datalen
= strlen(data
);
104 while (*p
&& *p
!= '%') p
++;
111 while (datalen
> 0) {
118 while (datalen
> 0) {
119 if (stuffcr
&& *data
== '\n')
130 rp
= ret
= snewn(totallen
+1, char);
132 assert(rp
- ret
== totallen
);