output: clean up output function

Don't allocate memory per call.
pull/2494/head
Victor Julien 8 years ago
parent 709d20f8c6
commit 61b72c6981

@ -300,29 +300,19 @@ static SCError SCLogMessageGetBuffer(
blue = "\x1b[34m";
reset = "\x1b[0m";
}
/* no of characters_written(cw) by snprintf */
int cw = 0;
if (sc_log_module_initialized != 1) {
#ifdef DEBUG
printf("Logging module not initialized. Call SCLogInitLogModule(), "
"before using the logging API\n");
#endif
return SC_ERR_LOG_MODULE_NOT_INIT;
}
BUG_ON(sc_log_module_initialized != 1);
char *temp_fmt = strdup(log_format);
if (unlikely(temp_fmt == NULL)) {
return SC_ERR_MEM_ALLOC;
}
char *temp_fmt_h = temp_fmt;
/* make a copy of the format string as it will be modified below */
char local_format[strlen(log_format) + 1];
strlcpy(local_format, log_format, sizeof(local_format));
char *temp_fmt = local_format;
char *substr = temp_fmt;
while ( (temp_fmt = index(temp_fmt, SC_LOG_FMT_PREFIX)) ) {
if ((temp - buffer) > SC_LOG_MAX_LOG_MSG_LEN) {
if (temp_fmt_h != NULL)
SCFree(temp_fmt_h);
return SC_OK;
}
switch(temp_fmt[1]) {
@ -338,7 +328,7 @@ static SCError SCLogMessageGetBuffer(
tms->tm_year + 1900, tms->tm_hour, tms->tm_min,
tms->tm_sec, reset);
if (cw < 0)
goto error;
return SC_ERR_SPRINTF;
temp += cw;
temp_fmt++;
substr = temp_fmt;
@ -350,7 +340,7 @@ static SCError SCLogMessageGetBuffer(
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - buffer),
"%s%s%u%s", substr, yellow, getpid(), reset);
if (cw < 0)
goto error;
return SC_ERR_SPRINTF;
temp += cw;
temp_fmt++;
substr = temp_fmt;
@ -362,12 +352,13 @@ static SCError SCLogMessageGetBuffer(
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - buffer),
"%s%s%lu%s", substr, yellow, SCGetThreadIdLong(), reset);
if (cw < 0)
goto error;
return SC_ERR_SPRINTF;
temp += cw;
temp_fmt++;
substr = temp_fmt;
substr++;
break;
case SC_LOG_FMT_TM:
temp_fmt[0] = '\0';
/* disabled to prevent dead lock:
@ -382,12 +373,13 @@ static SCError SCLogMessageGetBuffer(
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - buffer),
"%s%s", substr, "N/A");
if (cw < 0)
goto error;
return SC_ERR_SPRINTF;
temp += cw;
temp_fmt++;
substr = temp_fmt;
substr++;
break;
case SC_LOG_FMT_LOG_LEVEL:
temp_fmt[0] = '\0';
s = SCMapEnumValueToName(log_level, sc_log_level_map);
@ -409,7 +401,7 @@ static SCError SCLogMessageGetBuffer(
"%s%s", substr, "INVALID");
}
if (cw < 0)
goto error;
return SC_ERR_SPRINTF;
temp += cw;
temp_fmt++;
substr = temp_fmt;
@ -421,7 +413,7 @@ static SCError SCLogMessageGetBuffer(
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - buffer),
"%s%s%s%s", substr, blue, file, reset);
if (cw < 0)
goto error;
return SC_ERR_SPRINTF;
temp += cw;
temp_fmt++;
substr = temp_fmt;
@ -433,7 +425,7 @@ static SCError SCLogMessageGetBuffer(
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - buffer),
"%s%s%u%s", substr, green, line, reset);
if (cw < 0)
goto error;
return SC_ERR_SPRINTF;
temp += cw;
temp_fmt++;
substr = temp_fmt;
@ -445,7 +437,7 @@ static SCError SCLogMessageGetBuffer(
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - buffer),
"%s%s%s%s", substr, green, function, reset);
if (cw < 0)
goto error;
return SC_ERR_SPRINTF;
temp += cw;
temp_fmt++;
substr = temp_fmt;
@ -456,29 +448,25 @@ static SCError SCLogMessageGetBuffer(
temp_fmt++;
}
if ((temp - buffer) > SC_LOG_MAX_LOG_MSG_LEN) {
if (temp_fmt_h != NULL)
SCFree(temp_fmt_h);
return SC_OK;
}
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - buffer), "%s", substr);
if (cw < 0)
goto error;
if (cw < 0) {
return SC_ERR_SPRINTF;
}
temp += cw;
if ((temp - buffer) > SC_LOG_MAX_LOG_MSG_LEN) {
if (temp_fmt_h != NULL)
SCFree(temp_fmt_h);
return SC_OK;
}
if (error_code != SC_OK) {
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - buffer),
"[%sERRCODE%s: %s%s%s(%s%d%s)] - ", yellow, reset, red, SCErrorToString(error_code), reset, yellow, error_code, reset);
if (cw < 0)
goto error;
if (cw < 0) {
return SC_ERR_SPRINTF;
}
temp += cw;
if ((temp - buffer) > SC_LOG_MAX_LOG_MSG_LEN) {
if (temp_fmt_h != NULL)
SCFree(temp_fmt_h);
return SC_OK;
}
}
@ -489,17 +477,14 @@ static SCError SCLogMessageGetBuffer(
else if (log_level <= SC_LOG_NOTICE)
hi = yellow;
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - buffer), "%s%s%s", hi, message, reset);
if (cw < 0)
goto error;
if (cw < 0) {
return SC_ERR_SPRINTF;
}
temp += cw;
if ((temp - buffer) > SC_LOG_MAX_LOG_MSG_LEN) {
if (temp_fmt_h != NULL)
SCFree(temp_fmt_h);
return SC_OK;
}
SCFree(temp_fmt_h);
if (sc_log_config->op_filter_regex != NULL) {
#define MAX_SUBSTRINGS 30
int ov[MAX_SUBSTRINGS];
@ -514,11 +499,6 @@ static SCError SCLogMessageGetBuffer(
}
return SC_OK;
error:
if (temp_fmt_h != NULL)
SCFree(temp_fmt_h);
return SC_ERR_SPRINTF;
}
static void SCLogReopen(SCLogOPIfaceCtx *op_iface_ctx)

Loading…
Cancel
Save