diff options
author | William Jon McCann <jmccann@redhat.com> | 2009-09-14 20:14:41 -0400 |
---|---|---|
committer | William Jon McCann <jmccann@redhat.com> | 2009-09-14 20:14:41 -0400 |
commit | 528ff2ceb4efd5db89e5e677517c6c487deb196a (patch) | |
tree | 0a9269b43d680b2f9161a0c8288016386355bf53 /src | |
parent | 85cfd65a204477e22b258b01d29ab78503074290 (diff) |
log the kernel release and boot arguments at start time
Someone needs to add support for non-Linux platforms.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=23948
Diffstat (limited to 'src')
-rw-r--r-- | src/ck-log-event.c | 42 | ||||
-rw-r--r-- | src/ck-log-event.h | 3 |
2 files changed, 43 insertions, 2 deletions
diff --git a/src/ck-log-event.c b/src/ck-log-event.c index 965a036..66f439c 100644 --- a/src/ck-log-event.c +++ b/src/ck-log-event.c @@ -63,6 +63,8 @@ static void event_system_start_free (CkLogSystemStartEvent *event) { g_assert (event != NULL); + g_free (event->kernel_release); + g_free (event->boot_arguments); } static void @@ -196,6 +198,9 @@ event_system_start_copy (CkLogSystemStartEvent *event, { g_assert (event != NULL); g_assert (event_copy != NULL); + + event_copy->kernel_release = g_strdup (event->kernel_release); + event_copy->boot_arguments = g_strdup (event->boot_arguments); } static void @@ -470,6 +475,10 @@ add_log_for_system_start (GString *str, CkLogSystemStartEvent *e; e = (CkLogSystemStartEvent *)event; + g_string_append_printf (str, + "kernel-release='%s' boot-arguments='%s'", + e->kernel_release ? e->kernel_release : "", + e->boot_arguments ? e->boot_arguments : ""); } static void @@ -855,23 +864,54 @@ parse_log_for_system_restart (const GString *str, static gboolean parse_log_for_system_start (const GString *str, - CkLogEvent *event) + CkLogEvent *event) { gboolean ret; const char *s; + GRegex *re; + GMatchInfo *match_info; + gboolean res; + GError *error; CkLogSystemStartEvent *e; ret = FALSE; + re = NULL; + match_info = NULL; s = skip_header (str->str, str->len); if (s == NULL) { goto out; } + /* kernel-release and boot-arguments are attributes added in 0.4 */ + error = NULL; + re = g_regex_new ("(kernel-release='(?P<release>[^']+)')?[ ]?(boot-arguments='(?P<arguments>.*)')?", 0, 0, &error); + if (re == NULL) { + g_warning (error->message); + goto out; + } + + g_regex_match (re, s, 0, &match_info); + + res = g_match_info_matches (match_info); + if (! res) { + g_warning ("Unable to parse system start event: %s", s); + goto out; + } + e = (CkLogSystemStartEvent *)event; + e->kernel_release = g_match_info_fetch_named (match_info, "release"); + e->boot_arguments = g_match_info_fetch_named (match_info, "arguments"); + ret = TRUE; out: + if (match_info != NULL) { + g_match_info_free (match_info); + } + if (re != NULL) { + g_regex_unref (re); + } return ret; } diff --git a/src/ck-log-event.h b/src/ck-log-event.h index 0c04c1d..65571f0 100644 --- a/src/ck-log-event.h +++ b/src/ck-log-event.h @@ -60,7 +60,8 @@ typedef struct typedef struct { - gpointer dummy; + char *kernel_release; + char *boot_arguments; } CkLogSystemStartEvent; typedef struct |