X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal%2Fjournalctl.c;h=cccd8a7692af2748e158c1541f3e7c4c864af56a;hb=a9cdc94f7ff40f22a3cf9472f612a80730a1b010;hp=5980eb0b48b8c45d61d05ff863abb7344e860e5d;hpb=15804cebfdf7bef91db1374967ee813cd4a93588;p=elogind.git
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 5980eb0b4..cccd8a769 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -19,6 +19,7 @@
along with systemd; If not, see .
***/
+#include
#include
#include
#include
@@ -33,8 +34,6 @@
#include
#include
#include
-#include
-#include
#include
@@ -57,7 +56,7 @@
static OutputMode arg_output = OUTPUT_SHORT;
static bool arg_follow = false;
-static bool arg_show_all = false;
+static bool arg_all = false;
static bool arg_no_pager = false;
static unsigned arg_lines = 0;
static bool arg_no_tail = false;
@@ -87,15 +86,15 @@ static enum {
static int help(void) {
- printf("%s [OPTIONS...] [MATCH]\n\n"
+ printf("%s [OPTIONS...] [MATCHES...]\n\n"
"Query the journal.\n\n"
"Flags:\n"
- " -c --cursor=CURSOR Start showing entries from specified cursor\n"
" --since=DATE Start showing entries newer or of the specified date\n"
" --until=DATE Stop showing entries older or of the specified date\n"
+ " -c --cursor=CURSOR Start showing entries from specified cursor\n"
" -b --this-boot Show data only from current boot\n"
" -u --unit=UNIT Show data only from the specified unit\n"
- " -p --priority=RANGE Show only messages within the specified priority range\n\n"
+ " -p --priority=RANGE Show only messages within the specified priority range\n"
" -f --follow Follow journal\n"
" -n --lines[=INTEGER] Number of journal entries to show\n"
" --no-tail Show all lines, even in follow mode\n"
@@ -197,7 +196,6 @@ static int parse_argv(int argc, char *argv[]) {
case 'f':
arg_follow = true;
- signal(SIGWINCH, columns_cache_reset);
break;
case 'o':
@@ -217,7 +215,7 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'a':
- arg_show_all = true;
+ arg_all = true;
break;
case 'n':
@@ -400,21 +398,6 @@ static int parse_argv(int argc, char *argv[]) {
return 1;
}
-static bool on_tty(void) {
- static int t = -1;
-
- /* Note that this is invoked relatively early, before we start
- * the pager. That means the value we return reflects whether
- * we originally were started on a tty, not if we currently
- * are. But this is intended, since we want colour and so on
- * when run in our own pager. */
-
- if (_unlikely_(t < 0))
- t = isatty(STDOUT_FILENO) > 0;
-
- return t;
-}
-
static int generate_new_id128(void) {
sd_id128_t id;
int r;
@@ -563,8 +546,6 @@ static int add_priorities(sd_journal *j) {
if (arg_priorities & (1 << i)) {
match[sizeof(match)-2] = '0' + i;
- log_info("adding match %s", match);
-
r = sd_journal_add_match(j, match, strlen(match));
if (r < 0) {
log_error("Failed to add match: %s", strerror(-r));
@@ -697,7 +678,7 @@ static int setup_keys(void) {
goto finish;
}
- if (isatty(STDOUT_FILENO)) {
+ if (on_tty()) {
fprintf(stderr,
"\n"
"The new key pair has been generated. The " ANSI_HIGHLIGHT_ON "secret sealing key" ANSI_HIGHLIGHT_OFF " has been written to\n"
@@ -719,7 +700,7 @@ static int setup_keys(void) {
printf("/%llx-%llx\n", (unsigned long long) n, (unsigned long long) arg_interval);
- if (isatty(STDOUT_FILENO)) {
+ if (on_tty()) {
char tsb[FORMAT_TIMESPAN_MAX], *hn;
fprintf(stderr,
@@ -737,9 +718,7 @@ static int setup_keys(void) {
#ifdef HAVE_QRENCODE
/* If this is not an UTF-8 system don't print any QR codes */
- setlocale(LC_CTYPE, "");
-
- if (streq_ptr(nl_langinfo(CODESET), "UTF-8")) {
+ if (is_locale_utf8()) {
fputs("\nTo transfer the verification key to your phone please scan the QR code below:\n\n", stderr);
print_qr_code(stderr, seed, seed_size, n, arg_interval, hn, machine);
}
@@ -840,9 +819,9 @@ int main(int argc, char *argv[]) {
bool need_seek = false;
sd_id128_t previous_boot_id;
bool previous_boot_id_valid = false;
- bool have_pager;
unsigned n_shown = 0;
+ setlocale(LC_ALL, "");
log_parse_environment();
log_open();
@@ -850,6 +829,8 @@ int main(int argc, char *argv[]) {
if (r <= 0)
goto finish;
+ signal(SIGWINCH, columns_lines_cache_reset);
+
if (arg_action == ACTION_NEW_ID128) {
r = generate_new_id128();
goto finish;
@@ -926,11 +907,16 @@ int main(int argc, char *argv[]) {
SD_JOURNAL_FOREACH_UNIQUE(j, data, size) {
const void *eq;
+ if (arg_lines > 0 && n_shown >= arg_lines)
+ break;
+
eq = memchr(data, '=', size);
if (eq)
printf("%.*s\n", (int) (size - ((const uint8_t*) eq - (const uint8_t*) data + 1)), (const char*) eq + 1);
else
printf("%.*s\n", (int) size, (const char*) data);
+
+ n_shown ++;
}
r = 0;
@@ -978,8 +964,8 @@ int main(int argc, char *argv[]) {
goto finish;
}
- on_tty();
- have_pager = !arg_no_pager && !arg_follow && pager_open();
+ if (!arg_no_pager && !arg_follow)
+ pager_open();
if (!arg_quiet) {
usec_t start, end;
@@ -1042,8 +1028,8 @@ int main(int argc, char *argv[]) {
}
flags =
- arg_show_all * OUTPUT_SHOW_ALL |
- have_pager * OUTPUT_FULL_WIDTH |
+ arg_all * OUTPUT_SHOW_ALL |
+ (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH |
on_tty() * OUTPUT_COLOR;
r = output_journal(stdout, j, arg_output, 0, flags);