mirror of
https://hacklab.nilfm.cc/acme
synced 2024-10-22 22:41:49 +00:00
90 lines
1.5 KiB
C
90 lines
1.5 KiB
C
#include <u.h>
|
|
#include <libc.h>
|
|
#include <bio.h>
|
|
#include <thread.h>
|
|
#include <plumb.h>
|
|
#include <9pclient.h>
|
|
#include "dat.h"
|
|
|
|
void* emalloc(uint n) {
|
|
void* p;
|
|
|
|
p = malloc(n);
|
|
if (p == nil)
|
|
error("can't malloc: %r");
|
|
memset(p, 0, n);
|
|
setmalloctag(p, getcallerpc(&n));
|
|
return p;
|
|
}
|
|
|
|
void* erealloc(void* p, uint n) {
|
|
p = realloc(p, n);
|
|
if (p == nil)
|
|
error("can't realloc: %r");
|
|
setmalloctag(p, getcallerpc(&n));
|
|
return p;
|
|
}
|
|
|
|
char* estrdup(char* s) {
|
|
char* t;
|
|
|
|
t = emalloc(strlen(s) + 1);
|
|
strcpy(t, s);
|
|
return t;
|
|
}
|
|
|
|
char* estrstrdup(char* s, char* t) {
|
|
char* u;
|
|
|
|
u = emalloc(strlen(s) + strlen(t) + 1);
|
|
strcpy(u, s);
|
|
strcat(u, t);
|
|
return u;
|
|
}
|
|
|
|
char* eappend(char* s, char* sep, char* t) {
|
|
char* u;
|
|
|
|
if (t == nil)
|
|
u = estrstrdup(s, sep);
|
|
else {
|
|
u = emalloc(strlen(s) + strlen(sep) + strlen(t) + 1);
|
|
strcpy(u, s);
|
|
strcat(u, sep);
|
|
strcat(u, t);
|
|
}
|
|
free(s);
|
|
return u;
|
|
}
|
|
|
|
char* egrow(char* s, char* sep, char* t) {
|
|
s = eappend(s, sep, t);
|
|
free(t);
|
|
return s;
|
|
}
|
|
|
|
void error(char* fmt, ...) {
|
|
Fmt f;
|
|
char buf[64];
|
|
va_list arg;
|
|
|
|
fmtfdinit(&f, 2, buf, sizeof buf);
|
|
fmtprint(&f, "Mail: ");
|
|
va_start(arg, fmt);
|
|
fmtvprint(&f, fmt, arg);
|
|
va_end(arg);
|
|
fmtprint(&f, "\n");
|
|
fmtfdflush(&f);
|
|
threadexitsall(fmt);
|
|
}
|
|
|
|
void ctlprint(CFid* fd, char* fmt, ...) {
|
|
int n;
|
|
va_list arg;
|
|
|
|
va_start(arg, fmt);
|
|
n = fsvprint(fd, fmt, arg);
|
|
va_end(arg);
|
|
if (n <= 0)
|
|
error("control file write error: %r");
|
|
}
|