{
ply_log ("\nGot told system is initialized...\n");
ply_flush_log ();
+ pause ();
}
static void
{
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 *
return NULL;
}
+ ply_event_loop_watch_signal (state->loop,
+ SIGUSR1,
+ (ply_event_handler_t) on_sigusr1,
+ state);
+
return session;
}
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);
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)
session->is_running = true;
session->done_handler = done_handler;
session->done_handler_user_data = user_data;
+ ply_terminal_session_start_logging (session);
return true;
}
{
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);
}
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;
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);
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>
static void
on_finished (ply_event_loop_t *loop)
{
+ ply_event_loop_exit (loop, 0);
}
int
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);
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);