*/
/* -[un]setuplog <logtype> <loglevel> [<filename>]*/
-static void setuplog_internal(const char *logtype, const char *loglevel, const char *filename)
+static void setuplog_internal(const char *loglevel, const char *logtype, const char *filename)
{
int typenum, levelnum;
ptr += templen;
templen = snprintf(ptr, len, "%06u ", (int)tv.tv_usec);
+ if (templen == -1 || templen >= len)
+ return;
+
len -= templen;
ptr += templen;
/* PID */
pid = getpid();
templen = snprintf(ptr, len, "[%d]", pid);
+ if (templen == -1 || templen >= len)
+ return;
len -= templen;
ptr += templen;
templen = snprintf(ptr, len, " {%s:%d}", basename + 1, log_src_linenumber);
else
templen = snprintf(ptr, len, " {%s:%d}", log_src_filename, log_src_linenumber);
- if (templen >= len)
+ if (templen == -1 || templen >= len)
return;
len -= templen;
ptr += templen;
templen = snprintf(ptr, len, " (D%d:", loglevel - 1);
else
templen = snprintf(ptr, len, " (%c:", arr_loglevel_chars[loglevel]);
+ if (templen == -1 || templen >= len)
+ return;
len -= templen;
ptr += templen;
/* Errortype */
if (logtype<num_logtype_strings) {
templen = snprintf(ptr, len, "%s", arr_logtype_strings[logtype]);
+ if (templen == -1 || templen >= len)
+ return;
len -= templen;
ptr += templen;
}
if (inlog)
return;
- inlog = 1;
+ /* Check if requested logtype is setup */
+ if (file_configs[logtype].set)
+ /* Yes */
+ fd = file_configs[logtype].fd;
+ else
+ /* No: use default */
+ fd = file_configs[logtype_default].fd;
+
+ if (fd < 0) {
+ /* no where to send the output, give up */
+ return;
+ }
+
+ inlog = 1;
/* Initialise the Messages */
va_start(args, message);
len = vsnprintf(temp_buffer, MAXLOGSIZE - 1, message, args);
va_end(args);
/* Append \n */
- if (len >= MAXLOGSIZE)
+ if (len ==-1 || len >= MAXLOGSIZE)
/* vsnprintf hit the buffer size*/
temp_buffer[MAXLOGSIZE-2] = '\n';
else {
file_configs[logtype_default].display_options,
loglevel, logtype);
- /* Check if requested logtype is setup */
- if (file_configs[logtype].set)
- /* Yes */
- fd = file_configs[logtype].fd;
- else
- /* No: use default */
- fd = file_configs[logtype_default].fd;
/* If default wasnt setup its fd is -1 */
- if (fd >= 0) {
- iov[0].iov_base = log_details_buffer;
- iov[0].iov_len = strlen(log_details_buffer);
- iov[1].iov_base = temp_buffer;
- iov[1].iov_len = strlen(temp_buffer);
- writev( fd, iov, 2);
- }
+ iov[0].iov_base = log_details_buffer;
+ iov[0].iov_len = strlen(log_details_buffer);
+ iov[1].iov_base = temp_buffer;
+ iov[1].iov_len = strlen(temp_buffer);
+ writev( fd, iov, 2);
inlog = 0;
}
/* Called by the LOG macro for syslog messages */
-void make_syslog_entry(enum loglevels loglevel, enum logtypes logtype, char *message, ...)
+void make_syslog_entry(enum loglevels loglevel, enum logtypes logtype _U_, char *message, ...)
{
va_list args;
char log_buffer[MAXLOGSIZE];
va_start(args, message);
vsnprintf(log_buffer, sizeof(log_buffer), message, args);
va_end(args);
-
+ log_buffer[MAXLOGSIZE -1] = 0;
syslog(get_syslog_equivalent(loglevel), "%s", log_buffer);
inlog = 0;
}
/* finally call setuplog, filename can be NULL */
- setuplog_internal(logtype, loglevel, filename);
+ setuplog_internal(loglevel, logtype, filename);
free(ptrbak);
}
filename = strtok(NULL, " \t");
/* finally call setuplog, filename can be NULL */
- setuplog_internal(str, NULL, filename);
+ setuplog_internal(NULL, str, filename);
free(str);
}