From: Ray Strode Date: Wed, 1 Oct 2008 19:09:07 +0000 (-0400) Subject: change ply_window_new to take a device instead of vt number X-Git-Tag: 0.6.0~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fbaa2f980535f698f42745875786777efb9157fa;p=thirdparty%2Fplymouth.git change ply_window_new to take a device instead of vt number We're going to wrap windows around serial devices, too. --- diff --git a/src/libplybootsplash/ply-window.c b/src/libplybootsplash/ply-window.c index 81e0a54d..04d273fb 100644 --- a/src/libplybootsplash/ply-window.c +++ b/src/libplybootsplash/ply-window.c @@ -136,7 +136,7 @@ struct _ply_window }; ply_window_t * -ply_window_new (int vt_number) +ply_window_new (const char *tty_name) { ply_window_t *window; @@ -145,9 +145,14 @@ ply_window_new (int vt_number) window->line_buffer = ply_buffer_new (); window->frame_buffer = ply_frame_buffer_new (NULL); window->loop = NULL; - asprintf (&window->tty_name, "/dev/tty%d", vt_number); + if (tty_name != NULL) + { + if (strncmp (tty_name, "/dev/", strlen ("/dev/")) == 0) + window->tty_name = strdup (tty_name); + else + asprintf (&window->tty_name, "/dev/%s", tty_name); + } window->tty_fd = -1; - window->vt_number = vt_number; return window; } @@ -448,13 +453,11 @@ ply_window_open (ply_window_t *window) assert (window->tty_name != NULL); assert (window->tty_fd < 0); - if (window->vt_number == 0) + if (window->tty_name == NULL) { char tty_name[512] = ""; window->vt_number = get_active_vt (); - free (window->tty_name); - window->tty_name = NULL; if (readlink ("/proc/self/fd/0", tty_name, sizeof (tty_name) - 1) < 0) return false; @@ -865,20 +868,18 @@ main (int argc, ply_event_loop_t *loop; ply_window_t *window; int exit_code; - int vt_number; + char *tty_name; exit_code = 0; loop = ply_event_loop_new (); - vt_number = 0; if (argc > 1) - vt_number = atoi (argv[1]); - - if (vt_number <= 0) - vt_number = 1; + tty_name = argv[1]; + else + tty_name = "/dev/tty1"; - window = ply_window_new (vt_number); + window = ply_window_new (tty_name); ply_window_attach_to_event_loop (window, loop); ply_window_set_keyboard_input_handler (window, (ply_window_keyboard_input_handler_t) diff --git a/src/libplybootsplash/ply-window.h b/src/libplybootsplash/ply-window.h index 6d040026..b6f361fa 100644 --- a/src/libplybootsplash/ply-window.h +++ b/src/libplybootsplash/ply-window.h @@ -73,7 +73,7 @@ typedef enum } ply_window_color_t; #ifndef PLY_HIDE_FUNCTION_DECLARATIONS -ply_window_t *ply_window_new (int vt_number); +ply_window_t *ply_window_new (const char *name); void ply_window_free (ply_window_t *window); void ply_window_set_keyboard_input_handler (ply_window_t *window, diff --git a/src/main.c b/src/main.c index 032fc807..020d9e62 100644 --- a/src/main.c +++ b/src/main.c @@ -68,7 +68,8 @@ typedef struct static ply_boot_splash_t *start_boot_splash (state_t *state, const char *module_path); -static ply_window_t *create_window (state_t *state, int vt_number); +static ply_window_t *create_window (state_t *state, + const char *tty_name); static void on_session_output (state_t *state, @@ -242,7 +243,7 @@ on_show_splash (state_t *state) { if (state->window == NULL) - state->window = create_window (state, 1); + state->window = create_window (state, state->console); if (plymouth_should_show_default_splash (state)) show_default_splash (state); @@ -369,12 +370,12 @@ on_escape_pressed (state_t *state) static ply_window_t * create_window (state_t *state, - int vt_number) + const char *tty_name) { ply_window_t *window; - ply_trace ("creating window on vt %d", vt_number); - window = ply_window_new (vt_number); + ply_trace ("creating window on %s", tty_name != NULL? tty_name : "active vt"); + window = ply_window_new (tty_name); ply_trace ("attaching window to event loop"); ply_window_attach_to_event_loop (window, state->loop);