2 * Copyright (c) 2015-2017 Red Hat, Inc.
6 * Author: Jan Friesse (jfriesse@redhat.com)
8 * This software licensed under BSD license, the text of which follows:
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are met:
13 * - Redistributions of source code must retain the above copyright notice,
14 * this list of conditions and the following disclaimer.
15 * - Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 * - Neither the name of the Red Hat, Inc. nor the names of its
19 * contributors may be used to endorse or promote products derived from this
20 * software without specific prior written permission.
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32 * THE POSSIBILITY OF SUCH DAMAGE.
40 #include "dynar-str.h"
41 #include "qdevice-heuristics-io.h"
42 #include "qdevice-heuristics-worker.h"
43 #include "qdevice-heuristics-worker-log.h"
46 qdevice_heuristics_worker_log_remove_newlines(struct dynar
*str
)
52 len
= dynar_size(str
);
53 buf
= dynar_data(str
);
55 for (zi
= 0; zi
< len
; zi
++) {
56 if (buf
[zi
] == '\n' || buf
[zi
] == '\r') {
65 qdevice_heuristics_worker_log_printf(struct qdevice_heuristics_worker_instance
*instance
,
66 int priority
, const char *format
, ...)
73 if (dynar_str_cpy(&instance
->log_out_buffer
, "") != -1 &&
74 dynar_str_catf(&instance
->log_out_buffer
, "%u ", priority
) != -1 &&
75 dynar_str_vcatf(&instance
->log_out_buffer
, format
, ap
) != -1 &&
76 qdevice_heuristics_worker_log_remove_newlines(&instance
->log_out_buffer
) != -1 &&
77 dynar_str_cat(&instance
->log_out_buffer
, "\n") != -1) {
79 * It was possible to log everything
81 (void)qdevice_heuristics_io_blocking_write(QDEVICE_HEURISTICS_WORKER_LOG_OUT_FD
,
82 dynar_data(&instance
->log_out_buffer
), dynar_size(&instance
->log_out_buffer
));
85 * As a fallback try to log to syslog
88 openlog("qdevice_heuristics_worker", LOG_PID
, LOG_DAEMON
);
89 syslog(LOG_ERR
, "Log entry sent to syslog instead of parent process");
90 vsyslog(priority
, format
, ap_copy
);