From: Ray Strode Date: Mon, 25 Jan 2010 22:29:31 +0000 (-0500) Subject: [client] debug mode if plymouth:debug in /proc/cmdline X-Git-Tag: 0.8.0~74 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9c7b34fba3d1a1ccd65749c2c5ee04ab4977751;p=thirdparty%2Fplymouth.git [client] debug mode if plymouth:debug in /proc/cmdline We currently do this for the daemon. We should do it for the client as well. --- diff --git a/src/client/plymouth.c b/src/client/plymouth.c index 8669fd2a..aa20b3e8 100644 --- a/src/client/plymouth.c +++ b/src/client/plymouth.c @@ -37,11 +37,16 @@ #include "ply-logger.h" #include "ply-utils.h" +#ifndef PLY_MAX_COMMAND_LINE_SIZE +#define PLY_MAX_COMMAND_LINE_SIZE 512 +#endif + typedef struct { ply_event_loop_t *loop; ply_boot_client_t *client; ply_command_parser_t *command_parser; + char kernel_command_line[PLY_MAX_COMMAND_LINE_SIZE]; } state_t; typedef struct @@ -624,6 +629,32 @@ on_quit_request (state_t *state, on_failure, state); } +static bool +get_kernel_command_line (state_t *state) +{ + int fd; + + ply_trace ("opening /proc/cmdline"); + fd = open ("proc/cmdline", O_RDONLY); + + if (fd < 0) + { + ply_trace ("couldn't open it: %m"); + return false; + } + + ply_trace ("reading kernel command line"); + if (read (fd, state->kernel_command_line, sizeof (state->kernel_command_line)) < 0) + { + ply_trace ("couldn't read it: %m"); + return false; + } + + ply_trace ("Kernel command line is: '%s'", state->kernel_command_line); + close (fd); + return true; +} + int main (int argc, char **argv) @@ -776,6 +807,13 @@ main (int argc, return 0; } + if (get_kernel_command_line (&state)) + { + if (strstr (state.kernel_command_line, "plymouth:debug") != NULL + && !ply_is_tracing ()) + ply_toggle_tracing (); + } + if (should_be_verbose && !ply_is_tracing ()) ply_toggle_tracing ();