Catch malloc returning NULL.

This commit is contained in:
Arnaud Cornet 2008-12-10 23:26:37 +01:00
parent c3bb6639b6
commit 3ab2755767
10 changed files with 67 additions and 86 deletions

View File

@ -75,7 +75,7 @@ static void hash_binary(char *hex, unsigned char **password, unsigned int *seed)
if (strlen(hex) != 40) if (strlen(hex) != 40)
fatal("Incorrect password format %s\n", hex); fatal("Incorrect password format %s\n", hex);
md5 = malloc(20); md5 = bip_malloc(20);
for (i = 0; i < 20; i++) { for (i = 0; i < 20; i++) {
sscanf(hex + 2 * i, "%02x", &buf); sscanf(hex + 2 * i, "%02x", &buf);
md5[i] = buf; md5[i] = buf;
@ -133,7 +133,7 @@ void conf_die(bip_t *bip, char *fmt, ...)
va_list ap; va_list ap;
int size = ERRBUFSZ; int size = ERRBUFSZ;
int n; int n;
char *error = malloc(size); char *error = bip_malloc(size);
for (;;) { for (;;) {
va_start(ap, fmt); va_start(ap, fmt);
@ -1201,7 +1201,7 @@ int main(int argc, char **argv)
return 0; return 0;
} }
#ifdef HAVE_OIDENTD #ifdef HAVE_OIDENTD
bip.oidentdpath = malloc(strlen(home) + 1 + bip.oidentdpath = bip_malloc(strlen(home) + 1 +
strlen(OIDENTD_FILENAME) + 1); strlen(OIDENTD_FILENAME) + 1);
strcpy(bip.oidentdpath, home); strcpy(bip.oidentdpath, home);
strcat(bip.oidentdpath, "/"); strcat(bip.oidentdpath, "/");
@ -1210,13 +1210,13 @@ int main(int argc, char **argv)
if (!conf_biphome) { if (!conf_biphome) {
conf_biphome = malloc(strlen(home) + strlen("/.bip") + 1); conf_biphome = bip_malloc(strlen(home) + strlen("/.bip") + 1);
strcpy(conf_biphome, home); strcpy(conf_biphome, home);
strcat(conf_biphome, "/.bip"); strcat(conf_biphome, "/.bip");
} }
if (!confpath) { if (!confpath) {
confpath = malloc(strlen(conf_biphome) + 1 + confpath = bip_malloc(strlen(conf_biphome) + 1 +
strlen(S_CONF) + 1); strlen(S_CONF) + 1);
*confpath = 0; *confpath = 0;
strcat(confpath, conf_biphome); strcat(confpath, conf_biphome);
@ -1234,14 +1234,16 @@ int main(int argc, char **argv)
if (!conf_log_root) { if (!conf_log_root) {
char *ap = "/logs"; char *ap = "/logs";
conf_log_root = malloc(strlen(conf_biphome) + strlen(ap) + 1); conf_log_root = bip_malloc(strlen(conf_biphome) +
strlen(ap) + 1);
strcpy(conf_log_root, conf_biphome); strcpy(conf_log_root, conf_biphome);
strcat(conf_log_root, ap); strcat(conf_log_root, ap);
mylog(LOG_INFO, "Default log root: %s", conf_log_root); mylog(LOG_INFO, "Default log root: %s", conf_log_root);
} }
if (!conf_pid_file) { if (!conf_pid_file) {
char *pid = "/bip.pid"; char *pid = "/bip.pid";
conf_pid_file = malloc(strlen(conf_biphome) + strlen(pid) + 1); conf_pid_file = bip_malloc(strlen(conf_biphome) +
strlen(pid) + 1);
strcpy(conf_pid_file, conf_biphome); strcpy(conf_pid_file, conf_biphome);
strcat(conf_pid_file, pid); strcat(conf_pid_file, pid);
mylog(LOG_INFO, "Default pid file: %s", conf_pid_file); mylog(LOG_INFO, "Default pid file: %s", conf_pid_file);
@ -1254,7 +1256,7 @@ int main(int argc, char **argv)
if (!conf_ssl_certfile) { if (!conf_ssl_certfile) {
char *ap = "/bip.pem"; char *ap = "/bip.pem";
conf_ssl_certfile = malloc(strlen(conf_biphome) + conf_ssl_certfile = bip_malloc(strlen(conf_biphome) +
strlen(ap) + 1); strlen(ap) + 1);
strcpy(conf_ssl_certfile, conf_biphome); strcpy(conf_ssl_certfile, conf_biphome);
strcat(conf_ssl_certfile, ap); strcat(conf_ssl_certfile, ap);
@ -2082,7 +2084,7 @@ int adm_bip(bip_t *bip, struct link_client *ic, struct line *line,
} }
line->elemv = realloc(line->elemv, line->elemv = realloc(line->elemv,
(line->elemc + 1) * sizeof(char *)); (line->elemc + 1) * sizeof(char *));
line->elemv[line->elemc] = malloc(slen + 1); line->elemv[line->elemc] = bip_malloc(slen + 1);
memcpy(line->elemv[line->elemc], ptr, slen); memcpy(line->elemv[line->elemc], ptr, slen);
line->elemv[line->elemc][slen] = 0; line->elemv[line->elemc][slen] = 0;
line->elemc++; line->elemc++;
@ -2094,7 +2096,7 @@ int adm_bip(bip_t *bip, struct link_client *ic, struct line *line,
line->elemv = realloc(line->elemv, line->elemv = realloc(line->elemv,
(line->elemc + 1) * sizeof(char *)); (line->elemc + 1) * sizeof(char *));
slen = eptr - ptr; slen = eptr - ptr;
line->elemv[line->elemc] = malloc(slen + 1); line->elemv[line->elemc] = bip_malloc(slen + 1);
memcpy(line->elemv[line->elemc], ptr, slen); memcpy(line->elemv[line->elemc], ptr, slen);
line->elemv[line->elemc][slen] = 0; line->elemv[line->elemc][slen] = 0;
line->elemc++; line->elemc++;

View File

@ -20,6 +20,8 @@ extern int yylex (void);
extern char *yytext; extern char *yytext;
extern int linec; extern int linec;
#define YYMALLOC bip_malloc
int yywrap() int yywrap()
{ {
return 1; return 1;

View File

@ -479,7 +479,7 @@ static void data_find_lines(connection_t *cn)
if (ssz >= 1) { if (ssz >= 1) {
if (p[len - 1] == '\r') if (p[len - 1] == '\r')
ssz--; ssz--;
buf = malloc(ssz + 1); buf = bip_malloc(ssz + 1);
memcpy(buf, p + lastlen, ssz); memcpy(buf, p + lastlen, ssz);
buf[ssz] = 0; buf[ssz] = 0;
@ -891,7 +891,7 @@ static void create_socket(char *dsthostname, char *dstport, char *srchostname,
cn->connected = CONN_ERROR; cn->connected = CONN_ERROR;
cdata = (struct connecting_data *) cdata = (struct connecting_data *)
malloc(sizeof(struct connecting_data)); bip_malloc(sizeof(struct connecting_data));
if (!cdata) if (!cdata)
fatal("Out of memory."); fatal("Out of memory.");
cdata->dst = cdata->src = cdata->cur = NULL; cdata->dst = cdata->src = cdata->cur = NULL;
@ -998,7 +998,7 @@ static connection_t *connection_init(int anti_flood, int ssl, int timeout,
list_t *outgoing; list_t *outgoing;
conn = (connection_t *)calloc(sizeof(connection_t), 1); conn = (connection_t *)calloc(sizeof(connection_t), 1);
incoming = (char*)malloc(sizeof(char) * CONN_BUFFER_SIZE); incoming = (char *)bip_malloc(CONN_BUFFER_SIZE);
outgoing = list_new(NULL); outgoing = list_new(NULL);
conn->anti_flood = anti_flood; conn->anti_flood = anti_flood;
@ -1586,9 +1586,7 @@ static char *socket_ip(int fd, int remote)
return NULL; return NULL;
} }
ip = malloc(65); ip = bip_malloc(65);
if (ip == NULL)
fatal("malloc");
switch (addr.sa_family) { switch (addr.sa_family) {
case AF_INET: case AF_INET:

View File

@ -97,9 +97,7 @@ char *nick_from_ircmask(char *mask)
if (!*nick) if (!*nick)
return strdup(mask); return strdup(mask);
len = nick - mask; len = nick - mask;
ret = malloc(len + 1); ret = bip_malloc(len + 1);
if (!ret)
fatal("malloc");
memcpy(ret, mask, len); memcpy(ret, mask, len);
ret[len] = 0; ret[len] = 0;
return ret; return ret;
@ -115,7 +113,7 @@ list_t *channel_name_list(struct channel *c)
ret = list_new(NULL); ret = list_new(NULL);
size_t len = 0; size_t len = 0;
char *str = malloc(NAMESIZE); char *str = bip_malloc(NAMESIZE);
*str = 0; *str = 0;
for (hash_it_init(&c->nicks, &hi); hash_it_item(&hi); for (hash_it_init(&c->nicks, &hi); hash_it_item(&hi);
hash_it_next(&hi)){ hash_it_next(&hi)){
@ -127,7 +125,7 @@ list_t *channel_name_list(struct channel *c)
if (len + strlen(n->name) + 2 + (n->ovmask ? 1 : 0) if (len + strlen(n->name) + 2 + (n->ovmask ? 1 : 0)
>= NAMESIZE) { >= NAMESIZE) {
list_add_last(ret, str); list_add_last(ret, str);
str = malloc(s); str = bip_malloc(s);
*str = 0; *str = 0;
len = 0; len = 0;
} }
@ -247,7 +245,7 @@ static void irc_server_connected(struct link_server *server)
for (list_it_init(&LINK(server)->on_connect_send, &itocs); for (list_it_init(&LINK(server)->on_connect_send, &itocs);
list_it_item(&itocs); list_it_next(&itocs)) { list_it_item(&itocs); list_it_next(&itocs)) {
ssize_t len = strlen(list_it_item(&itocs)) + 2; ssize_t len = strlen(list_it_item(&itocs)) + 2;
char *str = malloc(len + 1); char *str = bip_malloc(len + 1);
sprintf(str, "%s\r\n", (char *)list_it_item(&itocs)); sprintf(str, "%s\r\n", (char *)list_it_item(&itocs));
write_line(CONN(server), str); write_line(CONN(server), str);
free(str); free(str);
@ -393,7 +391,7 @@ int irc_dispatch_server(bip_t *bip, struct link_server *server,
} else if (strcmp(line->elemv[0], "433") == 0) { } else if (strcmp(line->elemv[0], "433") == 0) {
if (LINK(server)->s_state != IRCS_CONNECTED) { if (LINK(server)->s_state != IRCS_CONNECTED) {
size_t nicklen = strlen(server->nick); size_t nicklen = strlen(server->nick);
char *newnick = malloc(nicklen + 2); char *newnick = bip_malloc(nicklen + 2);
strcpy(newnick, server->nick); strcpy(newnick, server->nick);
if (strlen(server->nick) < 9) { if (strlen(server->nick) < 9) {
strcat(newnick, "`"); strcat(newnick, "`");
@ -518,7 +516,7 @@ static void irc_send_join(struct link_client *ic, struct channel *chan)
if (!user) if (!user)
fatal("irc_send_join: No user associated"); fatal("irc_send_join: No user associated");
ircmask = malloc(strlen(LINK(ic)->l_server->nick) + ircmask = bip_malloc(strlen(LINK(ic)->l_server->nick) +
strlen("!bip@bip.bip.bip") + 1); strlen("!bip@bip.bip.bip") + 1);
strcpy(ircmask, LINK(ic)->l_server->nick); strcpy(ircmask, LINK(ic)->l_server->nick);
strcat(ircmask, "!bip@bip.bip.bip"); strcat(ircmask, "!bip@bip.bip.bip");
@ -646,7 +644,7 @@ static char *get_str_elem(char *str, int num)
} }
if (c - cur < 1) if (c - cur < 1)
return NULL; return NULL;
ret = malloc(c - cur + 1); ret = bip_malloc(c - cur + 1);
strncpy(ret, cur, c - cur); strncpy(ret, cur, c - cur);
ret[c - cur] = 0; ret[c - cur] = 0;
return ret; return ret;
@ -655,7 +653,7 @@ static char *get_str_elem(char *str, int num)
c = str + strlen(str); c = str + strlen(str);
if (c - cur < 1) if (c - cur < 1)
return NULL; return NULL;
ret = malloc(c - cur + 1); ret = bip_malloc(c - cur + 1);
strncpy(ret, cur, c - cur); strncpy(ret, cur, c - cur);
ret[c - cur] = 0; ret[c - cur] = 0;
return ret; return ret;
@ -1009,7 +1007,7 @@ static int irc_cli_join(struct link_client *irc, struct line *line)
while ((e = strchr(s, ','))) { while ((e = strchr(s, ','))) {
size_t len = e - s; size_t len = e - s;
char *p = malloc(len + 1); char *p = bip_malloc(len + 1);
size_t klen; size_t klen;
char *kp = NULL; char *kp = NULL;
@ -1021,7 +1019,7 @@ static int irc_cli_join(struct link_client *irc, struct line *line)
if (!ke) if (!ke)
ke = ks + strlen(ks); ke = ks + strlen(ks);
klen = ke - ks; klen = ke - ks;
kp = malloc(klen + 1); kp = bip_malloc(klen + 1);
memcpy(kp, ks, klen); memcpy(kp, ks, klen);
kp[klen] = 0; kp[klen] = 0;
if (*ke == 0) if (*ke == 0)
@ -1168,7 +1166,7 @@ static void irc_copy_cli(struct link_client *src, struct link_client *dest,
if (len == 0) if (len == 0)
return; return;
tmp = malloc(len); tmp = bip_malloc(len);
snprintf(tmp, len, " -> %s", line->elemv[2]); snprintf(tmp, len, " -> %s", line->elemv[2]);
tmp[len - 1] = 0; tmp[len - 1] = 0;
@ -1398,15 +1396,11 @@ static int irc_353(struct link_server *server, struct line *line)
eon++; eon++;
len = eon - names; len = eon - names;
tmp = malloc(len + 1); tmp = bip_malloc(len + 1);
if (!tmp)
fatal("malloc");
memcpy(tmp, names, len); memcpy(tmp, names, len);
tmp[len] = 0; tmp[len] = 0;
nick = malloc(sizeof(struct nick)); nick = bip_malloc(sizeof(struct nick));
if (!nick)
fatal("malloc");
nick->name = tmp; nick->name = tmp;
nick->ovmask = ovmask; nick->ovmask = ovmask;
@ -1698,7 +1692,7 @@ static int irc_mode(struct link_server *server, struct line *line)
static char *irc_timestamp(void) static char *irc_timestamp(void)
{ {
char *ts = malloc(21); char *ts = bip_malloc(21);
snprintf(ts, 20, "%ld", (long int)time(NULL)); snprintf(ts, 20, "%ld", (long int)time(NULL));
return ts; return ts;
} }
@ -2191,10 +2185,7 @@ void oidentd_dump(bip_t *bip)
return; return;
} }
content = (char *)malloc(stats.st_size + 1); content = (char *)bip_malloc(stats.st_size + 1);
if (content == NULL)
fatal("out of memory");
if (fread(content, 1, stats.st_size, f) != if (fread(content, 1, stats.st_size, f) !=
(size_t)stats.st_size) { (size_t)stats.st_size) {

View File

@ -115,9 +115,7 @@ list_t *parse_conf(FILE *file, int *err)
"client_side_ssl_pem" { return LEX_CSS_PEM; } "client_side_ssl_pem" { return LEX_CSS_PEM; }
\"[^"]*\" { \"[^"]*\" {
size_t len = strlen(yytext) - 2; size_t len = strlen(yytext) - 2;
yylval.string = malloc(len + 1); yylval.string = bip_malloc(len + 1);
if (!yylval.string)
fatal("malloc");
memcpy(yylval.string, yytext + 1, len); memcpy(yylval.string, yytext + 1, len);
yylval.string[len] = 0; yylval.string[len] = 0;
return LEX_STRING; return LEX_STRING;

View File

@ -22,9 +22,7 @@ void irc_line_init(struct line *l)
struct line *irc_line_new() struct line *irc_line_new()
{ {
struct line *l; struct line *l;
l = malloc(sizeof(struct line)); l = bip_malloc(sizeof(struct line));
if (!l)
fatal("malloc");
irc_line_init(l); irc_line_init(l);
return l; return l;
} }
@ -53,7 +51,7 @@ struct line *irc_line_dup(struct line *line)
struct line *nl = irc_line_new(); struct line *nl = irc_line_new();
nl->origin = line->origin ? strdup(line->origin) : NULL; nl->origin = line->origin ? strdup(line->origin) : NULL;
nl->elemc = line->elemc; nl->elemc = line->elemc;
nl->elemv = malloc(sizeof(char *) * line->elemc); nl->elemv = bip_malloc(sizeof(char *) * line->elemc);
for (i = 0; i < line->elemc; i++) for (i = 0; i < line->elemc; i++)
nl->elemv[i] = strdup(line->elemv[i]); nl->elemv[i] = strdup(line->elemv[i]);
nl->colon = line->colon; nl->colon = line->colon;
@ -86,7 +84,7 @@ char *irc_line_to_string(struct line *l)
len += strlen(l->elemv[i]) + 1; len += strlen(l->elemv[i]) + 1;
len += 1; /* remove one trailing space and add \r\n */ len += 1; /* remove one trailing space and add \r\n */
len++; /* last args ":" */ len++; /* last args ":" */
ret = malloc(len + 1); ret = bip_malloc(len + 1);
ret[0] = 0; ret[0] = 0;
if (l->origin) { if (l->origin) {
@ -127,9 +125,7 @@ struct line *irc_line(char *str)
if (!*space) if (!*space)
return NULL; return NULL;
len = space - str - 1; /* leading ':' */ len = space - str - 1; /* leading ':' */
line->origin = malloc(len + 1); line->origin = bip_malloc(len + 1);
if (!line->origin)
fatal("malloc");
memcpy(line->origin, str + 1, len); memcpy(line->origin, str + 1, len);
line->origin[len] = 0; line->origin[len] = 0;
str = space; str = space;
@ -158,9 +154,7 @@ struct line *irc_line(char *str)
space++; space++;
} }
len = space - str; len = space - str;
tmp = line->elemv[curelem] = malloc(len + 1); tmp = line->elemv[curelem] = bip_malloc(len + 1);
if (!tmp)
fatal("malloc");
memcpy(tmp, str, len); memcpy(tmp, str, len);
tmp[len] = 0; tmp[len] = 0;
if (curelem == 0) if (curelem == 0)

View File

@ -76,7 +76,7 @@ int check_dir_r(char *dirname)
mylog(LOG_DEBUGVERB, "Recursive check of %s engaged", dirname); mylog(LOG_DEBUGVERB, "Recursive check of %s engaged", dirname);
tmp = dirname; tmp = dirname;
dir = (char *)malloc(sizeof(char) * (len + 1)); dir = (char *)bip_malloc(len + 1);
while (*tmp) { while (*tmp) {
int slash_ok = 1; int slash_ok = 1;
while (*tmp == '/') { while (*tmp == '/') {
@ -140,9 +140,7 @@ char *log_build_filename(log_t *logdata, char *destination)
strtolower(dest); strtolower(dest);
log_format_len = strlen(conf_log_format); log_format_len = strlen(conf_log_format);
logfile = (char*)malloc((MAX_PATH_LEN + 1)*sizeof(char)); logfile = (char *)bip_malloc(MAX_PATH_LEN + 1);
if (!logfile)
fatal("out of memory");
time(&s); time(&s);
now = localtime(&s); now = localtime(&s);
@ -232,9 +230,7 @@ static int log_add_file(log_t *logdata, char *destination, char *filename)
return 0; return 0;
} }
lf = malloc(sizeof(logfile_t)); lf = bip_malloc(sizeof(logfile_t));
if (!lf)
fatal("out of memory");
lf->file = f; lf->file = f;
lf->filename = strdup(filename); lf->filename = strdup(filename);
if (!lf->filename) if (!lf->filename)
@ -557,7 +553,7 @@ void log_init_topic_time(log_t *logdata, char *channel, char *who, char *when)
seconds = atoi(when); seconds = atoi(when);
time = localtime(&seconds); time = localtime(&seconds);
timestr = (char*)malloc(sizeof(char) * (50 + 1)); timestr = (char *)bip_malloc(50 + 1);
timestr[0] = '\0'; timestr[0] = '\0';
if (time) if (time)
strftime(timestr, 50, "%A %d %B %Y, %H:%M:%S", time); strftime(timestr, 50, "%A %d %B %Y, %H:%M:%S", time);
@ -574,8 +570,8 @@ void log_mode(log_t *logdata, char *ircmask, char *channel, char *modes,
char **modargv, unsigned modargc) char **modargv, unsigned modargc)
{ {
unsigned i; unsigned i;
char *tmpbuf = malloc(LOGLINE_MAXLEN + 1); char *tmpbuf = bip_malloc(LOGLINE_MAXLEN + 1);
char *tmpbuf2 = malloc(LOGLINE_MAXLEN + 1); char *tmpbuf2 = bip_malloc(LOGLINE_MAXLEN + 1);
char *tmp; char *tmp;
snprintf(tmpbuf, LOGLINE_MAXLEN, "%s -!- mode/%s [%s", timestamp(), snprintf(tmpbuf, LOGLINE_MAXLEN, "%s -!- mode/%s [%s", timestamp(),
channel, modes); channel, modes);
@ -853,11 +849,9 @@ char *log_beautify(log_t *logdata, char *buf, char *dest)
if (lom == 0) if (lom == 0)
return _log_wrap(dest, buf); return _log_wrap(dest, buf);
p = ret = (char *)malloc( p = ret = (char *)bip_malloc(
1 + lon + strlen(LAMESTRING) + lod + 2 + lots + 2 + lom + 3 1 + lon + strlen(LAMESTRING) + lod + 2 + lots + 2 + lom + 3
+ action * (2 + strlen("ACTION ")) + out * strlen(PMSG_ARROW)); + action * (2 + strlen("ACTION ")) + out * strlen(PMSG_ARROW));
if (!p)
fatal("out of memory");
*p++ = ':'; *p++ = ':';
@ -947,7 +941,7 @@ char *log_backread(log_t *logdata, char *destination, int *skip)
return NULL; return NULL;
} }
buf = (char *)malloc((LOGLINE_MAXLEN + 1) * sizeof(char)); buf = (char *)bip_malloc(LOGLINE_MAXLEN + 1);
next_file: next_file:
/* check the files containing data to backlog */ /* check the files containing data to backlog */
@ -1090,7 +1084,7 @@ static char *_log_wrap(char *dest, char *line)
char *buf; char *buf;
size_t count; size_t count;
buf = malloc(LOGLINE_MAXLEN + 1); buf = bip_malloc(LOGLINE_MAXLEN + 1);
count = snprintf(buf, LOGLINE_MAXLEN + 1, count = snprintf(buf, LOGLINE_MAXLEN + 1,
":" P_IRCMASK " PRIVMSG %s :%s\r\n", dest, line); ":" P_IRCMASK " PRIVMSG %s :%s\r\n", dest, line);
if (count >= LOGLINE_MAXLEN + 1) { if (count >= LOGLINE_MAXLEN + 1) {
@ -1186,7 +1180,7 @@ log_t *log_new(struct user *user, char *network)
logdata->user = user; logdata->user = user;
logdata->network = strdup(network); logdata->network = strdup(network);
hash_init(&logdata->logfgs, HASH_NOCASE); hash_init(&logdata->logfgs, HASH_NOCASE);
logdata->buffer = (char *)malloc((LOGLINE_MAXLEN + 1) * sizeof(char)); logdata->buffer = (char *)bip_malloc(LOGLINE_MAXLEN + 1);
logdata->buffer[LOGLINE_MAXLEN - 1] = 0; // debug logdata->buffer[LOGLINE_MAXLEN - 1] = 0; // debug
logdata->buffer[LOGLINE_MAXLEN] = 0; logdata->buffer[LOGLINE_MAXLEN] = 0;
if (!logdata->user || !logdata->network || !logdata->buffer) if (!logdata->user || !logdata->network || !logdata->buffer)

View File

@ -380,14 +380,14 @@ unsigned char *chash_double(char *str, unsigned int seed)
length = strlen(str); length = strlen(str);
length += 4; length += 4;
ptr = malloc(length); ptr = bip_malloc(length);
ptr[0] = seed >> 24 & 0xff; ptr[0] = seed >> 24 & 0xff;
ptr[1] = seed >> 16 & 0xff; ptr[1] = seed >> 16 & 0xff;
ptr[2] = seed >> 8 & 0xff; ptr[2] = seed >> 8 & 0xff;
ptr[3] = seed & 0xff; ptr[3] = seed & 0xff;
memcpy(ptr + 4, str, length - 4); memcpy(ptr + 4, str, length - 4);
md5 = malloc(16 + 4); md5 = bip_malloc(16 + 4);
memcpy(md5, ptr, 4); memcpy(md5, ptr, 4);
md5_starts(&ctx); md5_starts(&ctx);

View File

@ -27,6 +27,17 @@
extern int conf_log_level; extern int conf_log_level;
extern int conf_log_system; extern int conf_log_system;
extern int errno; extern int errno;
extern FILE *conf_global_log_file;
void *bip_malloc(size_t size)
{
void *r = malloc(size);
if (!r) {
fprintf(conf_global_log_file, 1, strlen("malloc"), "malloc");
exit(28);
}
return r;
}
/* /*
* <nick> ::= <letter> { <letter> | <number> | <special> } * <nick> ::= <letter> { <letter> | <number> | <special> }
@ -104,8 +115,6 @@ char *checkmode2text(int v)
} }
#endif #endif
extern FILE *conf_global_log_file;
void _mylog(int level, char *fmt, va_list ap) void _mylog(int level, char *fmt, va_list ap)
{ {
char *prefix; char *prefix;
@ -196,9 +205,7 @@ void list_init(list_t *l, int (*cmp)(void *, void *))
list_t *list_new(int (*cmp)(void *, void *)) list_t *list_new(int (*cmp)(void *, void *))
{ {
list_t *l; list_t *l;
l = malloc(sizeof(list_t)); l = bip_malloc(sizeof(list_t));
if (!l)
fatal("malloc");
list_init(l, cmp); list_init(l, cmp);
return l; return l;
} }
@ -206,9 +213,7 @@ list_t *list_new(int (*cmp)(void *, void *))
static struct list_item *list_item(void *ptr) static struct list_item *list_item(void *ptr)
{ {
struct list_item *l; struct list_item *l;
l = malloc(sizeof(struct list_item)); l = bip_malloc(sizeof(struct list_item));
if (!l)
fatal("malloc");
l->ptr = ptr; l->ptr = ptr;
l->next = NULL; l->next = NULL;
l->prev = NULL; l->prev = NULL;
@ -475,9 +480,7 @@ void hash_free(hash_t *h)
hash_t *hash_new(int options) hash_t *hash_new(int options)
{ {
hash_t *h; hash_t *h;
h = malloc(sizeof(hash_t)); h = bip_malloc(sizeof(hash_t));
if (!h)
fatal("malloc");
hash_init(h, options); hash_init(h, options);
return h; return h;
} }
@ -500,9 +503,7 @@ void hash_insert(hash_t *hash, char *key, void *ptr)
if (hash_get(hash, key)) if (hash_get(hash, key))
fatal("Element with key %s already in hash %x\n", key, hash); fatal("Element with key %s already in hash %x\n", key, hash);
it = malloc(sizeof(struct hash_item)); it = bip_malloc(sizeof(struct hash_item));
if (!it)
fatal("malloc");
it->key = strdup(key); it->key = strdup(key);
it->item = ptr; it->item = ptr;
list_add_first(&hash->lists[hash_func(key)], it); list_add_first(&hash->lists[hash_func(key)], it);

View File

@ -123,5 +123,6 @@ char *hrtime(time_t t);
char *checkmode2text(int v); char *checkmode2text(int v);
#endif #endif
#define bool2text(v) ((v) ? "true" : "false") #define bool2text(v) ((v) ? "true" : "false")
void *bip_malloc(size_t size);
#endif #endif