len += strlen(argv[i]);
}
len += 1;
- char *buf = x_calloc(1, len + 1);
+ char *buf = x_malloc(len + 1);
+ char *p = buf;
for (int i = 0; argv[i]; i++) {
- strcat(buf, (i == 0) ? "" : " ");
- strcat(buf, argv[i]);
+ if (i != 0) {
+ *p++ = ' ';
+ }
+ for (char *q = argv[i]; *q != '\0'; q++) {
+ *p++ = *q;
+ }
}
- strcat(buf, "\n");
+ *p++ = '\n';
+ *p++ = '\0';
return buf;
}
static FILE *logfile;
static char *logbuffer;
+static size_t logbufsize;
static size_t logsize;
+#define LOGBUFSIZ 1024
+
static bool
init_log(void)
{
}
assert(conf);
if (conf->debug) {
- logbuffer = x_calloc(1, 1);
+ logbufsize = LOGBUFSIZ;
+ logbuffer = x_malloc(logbufsize);
logsize = 0;
}
if (str_eq(conf->log_file, "")) {
append_log(const char *s, size_t len)
{
assert(logbuffer);
- if (logsize + len > logsize) {
- logbuffer = x_realloc(logbuffer, logsize + len + 1);
- logsize = logsize + len;
+ if (logsize + len + 1 > logbufsize) {
+ logbufsize = logbufsize + len + 1 + LOGBUFSIZ;
+ logbuffer = x_realloc(logbuffer, logbufsize);
}
- strncat(logbuffer, s, len);
+ strncpy(logbuffer + logsize, s, len);
+ logsize += len;
}
static void