示例#1
0
文件: log.c 项目: glensc/lighttpd
int log_error_write(server *srv, const char *filename, unsigned int line, const char *fmt, ...) {
	va_list ap;

	if (-1 == log_buffer_prepare(srv->errorlog_buf, srv, filename, line)) return 0;

	va_start(ap, fmt);
	log_buffer_append_printf(srv->errorlog_buf, fmt, ap);
	va_end(ap);

	log_write(srv, srv->errorlog_buf);

	return 0;
}
示例#2
0
int log_error_write_multiline_buffer(server *srv, const char *filename, unsigned int line, buffer *multiline, const char *fmt, ...) {
    va_list ap;
    size_t prefix_used;
    buffer *b = srv->errorlog_buf;
    char *pos, *end, *current_line;

    if (multiline->used < 2) return 0;

    if (-1 == log_buffer_prepare(b, srv, filename, line)) return 0;

    va_start(ap, fmt);
    log_buffer_append_printf(b, fmt, ap);
    va_end(ap);

    prefix_used = b->used;

    current_line = pos = multiline->ptr;
    end = multiline->ptr + multiline->used;

    for ( ; pos < end ; ++pos) {
        switch (*pos) {
        case '\n':
        case '\r':
        case '\0': /* handles end of string */
            if (current_line < pos) {
                /* truncate to prefix */
                b->used = prefix_used;
                b->ptr[b->used - 1] = '\0';

                buffer_append_string_len(b, current_line, pos - current_line);
                log_write(srv, b);
            }
            current_line = pos + 1;
            break;
        default:
            break;
        }
    }

    return 0;
}