]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[libply] Drop terminal class
authorRay Strode <rstrode@redhat.com>
Thu, 27 Aug 2009 03:09:46 +0000 (23:09 -0400)
committerRay Strode <rstrode@redhat.com>
Mon, 28 Sep 2009 15:23:35 +0000 (11:23 -0400)
It was a really lame small wrapper around creating pseudoterminals.
The wrapper didn't buy anything and the name ply-terminal would be
better used for managing tty settings, etc.

src/libply/Makefile.am
src/libply/ply-terminal-session.c
src/libply/ply-terminal.c [deleted file]
src/libply/ply-terminal.h [deleted file]
src/libply/tests/Makefile.am
src/libply/tests/ply-terminal-session-test.am
src/libply/tests/ply-terminal-test.am [deleted file]

index e0cb84de8ce32a02180237a1a3b12243c7560bb3..5c9a8bdbddbce97ff8a96a9697eeacc23f788cdf 100644 (file)
@@ -23,7 +23,6 @@ libply_HEADERS = \
                    ply-logger.h                                              \
                    ply-key-file.h                                            \
                    ply-progress.h                                            \
-                   ply-terminal.h                                            \
                    ply-terminal-session.h                                    \
                    ply-trigger.h                                             \
                    ply-utils.h
@@ -45,7 +44,6 @@ libply_la_SOURCES = ply-event-loop.c                                          \
                    ply-logger.c                                              \
                    ply-key-file.c                                            \
                    ply-progress.c                                            \
-                   ply-terminal.c                                            \
                    ply-terminal-session.c                                    \
                    ply-trigger.c                                             \
                    ply-utils.c
index 2a4ca8db0f3ac2860a57071d82e9d4a44ff835d0..68f487fd07812f53ad2a9c6bef4bef8d99a3943f 100644 (file)
 
 #include "ply-event-loop.h"
 #include "ply-logger.h"
-#include "ply-terminal.h"
 #include "ply-utils.h"
 
 struct _ply_terminal_session
 {
-  ply_terminal_t *terminal;
+  int pseudoterminal_master_fd;
   ply_logger_t *logger;
   ply_event_loop_t *loop;
   char **argv;
@@ -71,7 +70,7 @@ ply_terminal_session_open_console (ply_terminal_session_t *session)
   int fd;
   const char *terminal_name;
 
-  terminal_name = ply_terminal_get_device_name (session->terminal);
+  terminal_name = ptsname (session->pseudoterminal_master_fd);
 
   fd = open (terminal_name, O_RDONLY); 
 
@@ -128,8 +127,8 @@ ply_terminal_session_new (const char * const *argv)
   assert (argv == NULL || argv[0] != NULL);
 
   session = calloc (1, sizeof (ply_terminal_session_t));
+  session->pseudoterminal_master_fd = -1;
   session->argv = argv == NULL ? NULL : ply_copy_string_array (argv);
-  session->terminal = ply_terminal_new ();
   session->logger = ply_logger_new ();
   session->is_running = false;
   session->console_is_redirected = false;
@@ -147,7 +146,8 @@ ply_terminal_session_free (ply_terminal_session_t *session)
   ply_logger_free (session->logger);
 
   ply_free_string_array (session->argv);
-  ply_terminal_free (session->terminal);
+
+  close (session->pseudoterminal_master_fd);
   free (session);
 }
 
@@ -181,7 +181,7 @@ ply_terminal_session_redirect_console (ply_terminal_session_t *session)
 
   assert (session != NULL);
 
-  terminal_name = ply_terminal_get_device_name (session->terminal);
+  terminal_name = ptsname (session->pseudoterminal_master_fd);
 
   assert (terminal_name != NULL);
 
@@ -218,6 +218,49 @@ ply_terminal_session_unredirect_console (ply_terminal_session_t *session)
   session->console_is_redirected = false;
 }
 
+static void
+close_pseudoterminal (ply_terminal_session_t *session)
+{
+  close (session->pseudoterminal_master_fd);
+  session->pseudoterminal_master_fd = -1;
+}
+
+static bool
+open_pseudoterminal (ply_terminal_session_t *session)
+{
+  ply_trace ("opening device '/dev/ptmx'");
+  session->pseudoterminal_master_fd = posix_openpt (O_RDWR | O_NOCTTY);
+
+  if (session->pseudoterminal_master_fd < 0)
+    return false;
+
+  ply_trace (" opened device '/dev/ptmx'");
+
+  ply_trace ("creating pseudoterminal");
+  if (grantpt (session->pseudoterminal_master_fd) < 0)
+    {
+      ply_save_errno ();
+      ply_trace ("could not create psuedoterminal: %m");
+      close_pseudoterminal (session);
+      ply_restore_errno ();
+      return false;
+    }
+  ply_trace ("done creating pseudoterminal");
+
+  ply_trace ("unlocking pseudoterminal");
+  if (unlockpt (session->pseudoterminal_master_fd) < 0)
+    {
+      ply_save_errno ();
+      close_pseudoterminal (session);
+      ply_restore_errno ();
+      return false;
+    }
+  ply_trace ("unlocked pseudoterminal");
+
+  return true;
+}
+
+
 bool 
 ply_terminal_session_run (ply_terminal_session_t              *session,
                           ply_terminal_session_flags_t         flags,
@@ -240,7 +283,7 @@ ply_terminal_session_run (ply_terminal_session_t              *session,
     (flags & PLY_TERMINAL_SESSION_FLAGS_REDIRECT_CONSOLE) != 0;
 
   ply_trace ("creating terminal device");
-  if (!ply_terminal_create_device (session->terminal))
+  if (!open_pseudoterminal (session))
     return false;
   ply_trace ("done creating terminal device");
 
@@ -250,7 +293,7 @@ ply_terminal_session_run (ply_terminal_session_t              *session,
       !ply_terminal_session_redirect_console (session))
     {
       ply_save_errno ();
-      ply_terminal_destroy_device (session->terminal);
+      close_pseudoterminal (session);
       ply_restore_errno ();
       return false;
     }
@@ -264,7 +307,7 @@ ply_terminal_session_run (ply_terminal_session_t              *session,
     {
       ply_save_errno ();
       ply_terminal_session_unredirect_console (session);
-      ply_terminal_destroy_device (session->terminal);
+      close_pseudoterminal (session);
       ply_restore_errno ();
       return false;
     }
@@ -316,12 +359,12 @@ ply_terminal_session_attach (ply_terminal_session_t               *session,
   if (ptmx >= 0)
     {
       ply_trace ("ptmx passed in, using it");
-      ply_terminal_set_fd(session->terminal, ptmx);
+      session->pseudoterminal_master_fd = ptmx;
     }
   else
     {
       ply_trace ("ptmx not passed in, creating one");
-      if (!ply_terminal_create_device (session->terminal))
+      if (!open_pseudoterminal (session))
         {
           ply_trace ("could not create pseudo-terminal: %m");
           return false;
@@ -336,7 +379,7 @@ ply_terminal_session_attach (ply_terminal_session_t               *session,
       !ply_terminal_session_redirect_console (session))
     {
       ply_save_errno ();
-      ply_terminal_destroy_device (session->terminal);
+      close_pseudoterminal (session);
       ply_restore_errno ();
       return false;
     }
@@ -370,7 +413,7 @@ ply_terminal_session_detach (ply_terminal_session_t       *session)
   if (session->created_terminal_device)
     {
       ply_trace ("ptmx wasn't originally passed in, destroying created one");
-      ply_terminal_destroy_device (session->terminal);
+      close_pseudoterminal (session);
       session->created_terminal_device = false;
     }
 
@@ -386,7 +429,7 @@ ply_terminal_session_get_fd (ply_terminal_session_t *session)
 {
   assert (session != NULL);
 
-  return ply_terminal_get_fd (session->terminal);
+  return session->pseudoterminal_master_fd;
 }
 
 static void
diff --git a/src/libply/ply-terminal.c b/src/libply/ply-terminal.c
deleted file mode 100644 (file)
index 9ad293f..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/* ply-terminal.c - psuedoterminal abstraction
- *
- * Copyright (C) 2006, 2007 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- * Written by: Kristian Høgsberg <krh@redhat.com>
- *             Ray Strode <rstrode@redhat.com>
- */
-#include "config.h"
-#include "ply-terminal.h"
-
-#include <assert.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mount.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "ply-logger.h"
-#include "ply-utils.h"
-
-struct _ply_terminal
-{
-  char  *name;
-  int fd;
-};
-
-ply_terminal_t *
-ply_terminal_new (void)
-{
-  ply_terminal_t *terminal;
-
-  terminal = calloc (1, sizeof (ply_terminal_t));
-  terminal->fd = -1;
-
-  return terminal;
-}
-
-void
-ply_terminal_free (ply_terminal_t *terminal)
-{
-  assert (terminal != NULL);
-
-  ply_terminal_destroy_device (terminal);
-  free (terminal);
-}
-
-bool
-ply_terminal_create_device (ply_terminal_t *terminal)
-{
-  assert (terminal != NULL);
-  assert (!ply_terminal_has_device (terminal));
-
-  ply_trace ("opening device '/dev/ptmx'");
-  terminal->fd = posix_openpt (O_RDWR | O_NOCTTY);
-
-  if (terminal->fd < 0)
-    return false;
-
-  ply_trace (" opened device '/dev/ptmx'");
-
-  ply_trace ("creating pseudoterminal");
-  if (grantpt (terminal->fd) < 0)
-    {
-      ply_save_errno ();
-      ply_trace ("could not create psuedoterminal: %m");
-      ply_terminal_destroy_device (terminal);
-      ply_restore_errno ();
-      return false;
-    }
-  ply_trace ("done creating pseudoterminal");
-
-  ply_trace ("unlocking pseudoterminal");
-  if (unlockpt (terminal->fd) < 0)
-    {
-      ply_save_errno ();
-      ply_terminal_destroy_device (terminal);
-      ply_restore_errno ();
-      return false;
-    }
-  ply_trace ("unlocked pseudoterminal");
-
-  terminal->name = strdup (ptsname (terminal->fd));
-  ply_trace ("pseudoterminal '%s' ready for action", terminal->name);
-
-  return true;
-}
-
-bool
-ply_terminal_has_device (ply_terminal_t *terminal)
-{
-  assert (terminal != NULL);
-
-  return terminal->fd >= 0;
-}
-
-void
-ply_terminal_destroy_device (ply_terminal_t *terminal)
-{
-  assert (terminal != NULL);
-
-  free (terminal->name);
-  terminal->name = NULL;
-
-  close (terminal->fd);
-  terminal->fd = -1;
-}
-
-int 
-ply_terminal_get_fd (ply_terminal_t *terminal)
-{
-  assert (terminal != NULL);
-
-  return terminal->fd;
-}
-
-void
-ply_terminal_set_fd (ply_terminal_t *terminal, int fd)
-{
-  assert (terminal != NULL);
-
-  terminal->fd = fd;
-
-  if (terminal->name)
-    {
-      free(terminal->name);
-      terminal->name = NULL;
-    }
-    
-  if (terminal->fd >= 0)
-    terminal->name = strdup (ptsname (terminal->fd));
-}
-
-const char *
-ply_terminal_get_device_name (ply_terminal_t *terminal)
-{
-  assert (terminal != NULL);
-  assert (ply_terminal_has_device (terminal));
-
-  assert (terminal->name != NULL);
-  return terminal->name;
-}
-
-#ifdef PLY_TERMINAL_ENABLE_TEST
-
-#include <stdio.h>
-
-int
-main (int    argc,
-      char **argv)
-{
-  ply_terminal_t *terminal;
-  const char *name;
-  uint8_t byte;
-  int exit_code;
-
-  exit_code = 0;
-
-  terminal = ply_terminal_new ();
-
-  if (!ply_terminal_create_device (terminal))
-    {
-      exit_code = errno;
-      perror ("could not open new terminal");
-      return exit_code;
-    }
-
-  name = ply_terminal_get_device_name (terminal);
-  printf ("terminal name is '%s'\n", name);
-
-  while (read (ply_terminal_get_fd (terminal), 
-               &byte, sizeof (byte)) == 1)
-    printf ("%c", byte);
-
-  ply_terminal_free (terminal);
-
-  return exit_code;
-}
-
-#endif /* PLY_TERMINAL_ENABLE_TEST */
-/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
diff --git a/src/libply/ply-terminal.h b/src/libply/ply-terminal.h
deleted file mode 100644 (file)
index df5af54..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ply-terminal.h - psuedoterminal abstraction
- *
- * Copyright (C) 2007 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- *
- * Written By: Ray Strode <rstrode@redhat.com>
- */
-#ifndef PLY_TERMINAL_H
-#define PLY_TERMINAL_H
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <unistd.h>
-
-typedef struct _ply_terminal ply_terminal_t;
-
-#ifndef PLY_HIDE_FUNCTION_DECLARATIONS
-ply_terminal_t *ply_terminal_new (void);
-void ply_terminal_free (ply_terminal_t *terminal);
-bool ply_terminal_create_device (ply_terminal_t *terminal);
-bool ply_terminal_has_device (ply_terminal_t *terminal);
-void ply_terminal_destroy_device (ply_terminal_t *terminal);
-int ply_terminal_get_fd (ply_terminal_t *terminal);
-void ply_terminal_set_fd (ply_terminal_t *terminal, int fd);
-const char *ply_terminal_get_device_name (ply_terminal_t *terminal);
-#endif
-
-#endif /* PLY_TERMINAL_H */
-/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
index 9ef83381c8d4553ac4d1c53509b2125646323acc..49ba57600274cd32461ef8fab7b42d393ed37dd5 100644 (file)
@@ -6,7 +6,6 @@ TESTS =
 
 if ENABLE_TESTS
 include $(srcdir)/ply-frame-buffer-test.am
-include $(srcdir)/ply-terminal-test.am
 include $(srcdir)/ply-terminal-session-test.am
 include $(srcdir)/ply-logger-test.am
 include $(srcdir)/ply-array-test.am
index 8206f39fb889094add94d70e2ab8180a004b5b12..decb531b4ce89405bdb0842d17a48129d29225fb 100644 (file)
@@ -14,7 +14,5 @@ ply_terminal_session_test_SOURCES =
                           $(srcdir)/../ply-list.c                                     \
                           $(srcdir)/../ply-event-loop.h                               \
                           $(srcdir)/../ply-event-loop.c                               \
-                          $(srcdir)/../ply-terminal.h                                 \
-                          $(srcdir)/../ply-terminal.c                                 \
                           $(srcdir)/../ply-terminal-session.h                         \
                           $(srcdir)/../ply-terminal-session.c
diff --git a/src/libply/tests/ply-terminal-test.am b/src/libply/tests/ply-terminal-test.am
deleted file mode 100644 (file)
index 67a2572..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-TESTS += ply-terminal-test
-
-ply_terminal_test_CFLAGS = $(PLYMOUTH_CFLAGS) -DPLY_TERMINAL_ENABLE_TEST
-ply_terminal_test_LDADD = $(PLYMOUTH_LIBS)
-
-ply_terminal_test_SOURCES =                                                   \
-                          $(srcdir)/../ply-list.h                             \
-                          $(srcdir)/../ply-list.c                             \
-                          $(srcdir)/../ply-logger.h                           \
-                          $(srcdir)/../ply-logger.c                           \
-                          $(srcdir)/../ply-utils.h                            \
-                          $(srcdir)/../ply-utils.c                            \
-                          $(srcdir)/../ply-terminal.h                         \
-                          $(srcdir)/../ply-terminal.c