summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2007-06-05 11:25:41 -0400
committerRay Strode <rstrode@redhat.com>2007-06-05 11:25:41 -0400
commitbc4b031f1c4a66e073b6cb150b5bc856d5b016f4 (patch)
treec0601a6d001deaddf80d58202c093189332aeb27 /src
parent94efb1940a8cf1af78d7a7f395ed71b6f0cbce81 (diff)
i don't know
Diffstat (limited to 'src')
-rw-r--r--src/main.c17
-rw-r--r--src/ply-event-loop.h1
-rw-r--r--src/ply-terminal-session.c50
-rw-r--r--src/ply-terminal-session.h6
4 files changed, 61 insertions, 13 deletions
diff --git a/src/main.c b/src/main.c
index 88fa50e..e175fbf 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);
diff --git a/src/ply-event-loop.h b/src/ply-event-loop.h
index 6cc5d97..7a43d07 100644
--- a/src/ply-event-loop.h
+++ b/src/ply-event-loop.h
@@ -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;
diff --git a/src/ply-terminal-session.c b/src/ply-terminal-session.c
index 48d7edc..cc580ad 100644
--- a/src/ply-terminal-session.c
+++ b/src/ply-terminal-session.c
@@ -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);
diff --git a/src/ply-terminal-session.h b/src/ply-terminal-session.h
index d76671d..3a35a45 100644
--- a/src/ply-terminal-session.h
+++ b/src/ply-terminal-session.h
@@ -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 */