]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
i don't know
authorRay Strode <rstrode@redhat.com>
Tue, 5 Jun 2007 15:25:41 +0000 (11:25 -0400)
committerRay Strode <rstrode@redhat.com>
Tue, 5 Jun 2007 15:25:41 +0000 (11:25 -0400)
src/main.c
src/ply-event-loop.h
src/ply-terminal-session.c
src/ply-terminal-session.h

index 88fa50ee9ea1a5ba94103fc33d0b629971b6589f..e175fbf7bcb54b4704af75a49ecd7399554becb6 100644 (file)
@@ -62,6 +62,7 @@ on_system_initialized (state_t *state)
 {
   ply_log ("\nGot told system is initialized...\n");
   ply_flush_log ();
+  pause ();
 }
 
 static void
@@ -69,7 +70,14 @@ on_quit (state_t *state)
 {
   ply_log ("\nGot quit request, quitting...\n");
   ply_flush_log ();
-  //ply_event_loop_exit (state->loop, 0);
+//  ply_event_loop_exit (state->loop, 0);
+}
+
+static void
+on_sigusr1 (state_t *state)
+{
+  ply_terminal_session_open_log (state->session, 
+                                 "/var/log/bootmessages.log");
 }
 
 static ply_boot_server_t *
@@ -119,6 +127,11 @@ spawn_session (state_t  *state,
       return NULL;
     }
 
+  ply_event_loop_watch_signal (state->loop,
+                               SIGUSR1,
+                               (ply_event_handler_t) on_sigusr1,
+                               state);
+
   return session;
 }
 
@@ -145,9 +158,7 @@ main (int    argc,
       return EX_UNAVAILABLE;
     }
 
-  ply_terminal_session_start_logging (state.session);
   exit_code = ply_event_loop_run (state.loop);
-  ply_terminal_session_stop_logging (state.session);
 
   ply_terminal_session_free (state.session);
   ply_event_loop_free (state.loop);
index 6cc5d970e7506f880db5190042f52538339f39bd..7a43d077663d08597038ab9d227eb2710f4efb46 100644 (file)
@@ -23,6 +23,7 @@
 #define PLY_EVENT_LOOP_H
 
 #include <stdbool.h>
+#include <signal.h>
 #include <stdint.h>
 
 typedef struct _ply_event_loop ply_event_loop_t;
index 48d7edcfd9872e5fc56fe90127aa5534defacf88..cc580adda3d5400fe9ba59fa12a8f87b7c7e112a 100644 (file)
@@ -59,6 +59,8 @@ struct _ply_terminal_session
 static bool ply_terminal_session_open_console (ply_terminal_session_t *session);
 static bool ply_terminal_session_execute (ply_terminal_session_t *session,
                                           bool                    look_in_path);
+static void ply_terminal_session_start_logging (ply_terminal_session_t *session);
+static void ply_terminal_session_stop_logging (ply_terminal_session_t *session);
 
 static bool
 ply_terminal_session_open_console (ply_terminal_session_t *session)
@@ -259,6 +261,7 @@ ply_terminal_session_run (ply_terminal_session_t              *session,
       session->is_running = true;
       session->done_handler = done_handler;
       session->done_handler_user_data = user_data;
+      ply_terminal_session_start_logging (session);
 
       return true;
     }
@@ -306,8 +309,8 @@ ply_terminal_session_on_new_data (ply_terminal_session_t *session,
     {
       int i;
       for (i = 0; i < bytes_read; i++)
-          if (isprint (buffer[i]))
-              buffer[i] = toupper(buffer[i]);
+        if (isprint (buffer[i]))
+          buffer[i] = toupper(buffer[i]);
       ply_terminal_session_log_bytes (session, buffer, bytes_read);
     }
 
@@ -325,9 +328,11 @@ ply_terminal_session_on_hangup (ply_terminal_session_t *session)
 
   if (session->done_handler != NULL)
     session->done_handler (session->done_handler_user_data, session);
+
+  ply_terminal_session_stop_logging (session);
 }
 
-void 
+static void 
 ply_terminal_session_start_logging (ply_terminal_session_t *session)
 {
   int session_fd;
@@ -348,9 +353,12 @@ ply_terminal_session_start_logging (ply_terminal_session_t *session)
                            ply_terminal_session_on_new_data, 
                            (ply_event_handler_t)
                            ply_terminal_session_on_hangup, session);
+
+  ply_logger_set_output_fd (session->logger, 
+                            open ("/dev/tty1", O_RDWR));
 }
 
-void
+static void
 ply_terminal_session_stop_logging (ply_terminal_session_t *session)
 {
   assert (session != NULL);
@@ -360,6 +368,34 @@ ply_terminal_session_stop_logging (ply_terminal_session_t *session)
     ply_logger_toggle_logging (session->logger);
 }
 
+bool 
+ply_terminal_session_open_log (ply_terminal_session_t *session,
+                               const char             *filename)
+{
+  bool log_is_opened;
+
+  assert (session != NULL);
+  assert (filename != NULL);
+  assert (session->logger != NULL);
+
+  ply_save_errno ();
+  log_is_opened = ply_logger_open_file (session->logger, filename);
+  if (log_is_opened)
+    ply_logger_flush (session->logger);
+  ply_restore_errno ();
+
+  return log_is_opened;
+}
+
+void 
+ply_terminal_session_close_log (ply_terminal_session_t *session)
+{
+  assert (session != NULL);
+  assert (session->logger != NULL);
+
+  return ply_logger_close_file (session->logger);
+}
+
 #ifdef PLY_TERMINAL_SESSION_ENABLE_TEST
 
 #include <stdio.h>
@@ -370,6 +406,7 @@ ply_terminal_session_stop_logging (ply_terminal_session_t *session)
 static void
 on_finished (ply_event_loop_t *loop)
 {
+  ply_event_loop_exit (loop, 0);
 }
 
 int
@@ -389,7 +426,6 @@ main (int    argc,
 
   flags = PLY_TERMINAL_SESSION_FLAGS_RUN_IN_PARENT;
   flags |= PLY_TERMINAL_SESSION_FLAGS_LOOK_IN_PATH;
-  flags |= PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE;
 
   ply_terminal_session_attach_to_event_loop (session, loop);
 
@@ -401,9 +437,9 @@ main (int    argc,
       return errno;
     }
 
-  ply_terminal_session_start_logging (session);
+  ply_terminal_session_open_log (session, "foo.log");
+
   exit_code = ply_event_loop_run (loop);
-  ply_terminal_session_stop_logging (session);
 
   ply_terminal_session_free (session);
 
index d76671da1ba128d5b92c04f6a3edd823004c28b4..3a35a45a166f3a6774517f3193561fde5e2feee1 100644 (file)
@@ -51,9 +51,9 @@ bool ply_terminal_session_run (ply_terminal_session_t       *session,
                                ply_terminal_session_done_handler_t  done_handler,
                                void                                *user_data);
 int ply_terminal_session_get_fd (ply_terminal_session_t *session);
-void ply_terminal_session_start_logging (ply_terminal_session_t *session);
-void ply_terminal_session_stop_logging (ply_terminal_session_t *session);
-
+bool ply_terminal_session_open_log (ply_terminal_session_t *session,
+                                    const char             *filename);
+void ply_terminal_session_close_log (ply_terminal_session_t *session);
 #endif
 
 #endif /* PLY_TERMINAL_SESSION_H */