mirror of
https://github.com/systemd/systemd.git
synced 2024-10-29 21:55:36 +03:00
b4096cecff
The need to set errno is very very ugly, but at least it is thread-safe and works correctly. Using strerror() is likely to be wrong, so let's not recommend that. People who do a lot of logging would provide use some wrapper that sets errno like we do, so nudge people towards %m. I tested that all the separate .c files compile cleanly.
46 lines
1.0 KiB
C
46 lines
1.0 KiB
C
/* SPDX-License-Identifier: CC0-1.0 */
|
|
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <systemd/sd-journal.h>
|
|
|
|
int main(int argc, char *argv[]) {
|
|
int r;
|
|
sd_journal *j;
|
|
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
|
|
if (r < 0) {
|
|
errno = -r;
|
|
fprintf(stderr, "Failed to open journal: %m\n");
|
|
return 1;
|
|
}
|
|
for (;;) {
|
|
const void *d;
|
|
size_t l;
|
|
r = sd_journal_next(j);
|
|
if (r < 0) {
|
|
errno = -r;
|
|
fprintf(stderr, "Failed to iterate to next entry: %m\n");
|
|
break;
|
|
}
|
|
if (r == 0) {
|
|
/* Reached the end, let's wait for changes, and try again */
|
|
r = sd_journal_wait(j, (uint64_t) -1);
|
|
if (r < 0) {
|
|
errno = -r;
|
|
fprintf(stderr, "Failed to wait for changes: %m\n");
|
|
break;
|
|
}
|
|
continue;
|
|
}
|
|
r = sd_journal_get_data(j, "MESSAGE", &d, &l);
|
|
if (r < 0) {
|
|
errno = -r;
|
|
fprintf(stderr, "Failed to read message field: %m\n");
|
|
continue;
|
|
}
|
|
printf("%.*s\n", (int) l, (const char*) d);
|
|
}
|
|
sd_journal_close(j);
|
|
return 0;
|
|
}
|