[Cluster-devel] [PATCH 2/6] libgfs2: Move gfs2_getch into utils

Steven Whitehouse swhiteho at redhat.com
Wed Nov 30 15:04:38 UTC 2011


More UI code being moved out of the library.

Signed-off-by: Steven Whitehouse <swhiteho at redhat.com>
---
 gfs2/convert/gfs2_convert.c |   36 ++++++++++++++++++++++++++++++++----
 gfs2/fsck/util.c            |   28 ++++++++++++++++++++++++++++
 gfs2/fsck/util.h            |    1 +
 gfs2/libgfs2/gfs2_log.c     |   28 ----------------------------
 gfs2/libgfs2/libgfs2.h      |    1 -
 5 files changed, 61 insertions(+), 33 deletions(-)

diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c
index f79b4a4..9f24137 100644
--- a/gfs2/convert/gfs2_convert.c
+++ b/gfs2/convert/gfs2_convert.c
@@ -23,6 +23,7 @@
 #include <sys/time.h>
 #include <errno.h>
 #include <ctype.h>
+#include <termios.h>
 #include <libintl.h>
 #include <locale.h>
 #define _(String) gettext(String)
@@ -2057,24 +2058,51 @@ static void copy_quotas(struct gfs2_sbd *sdp)
 	inode_put(&oq_ip);
 }
 
+static char gfs2_getch(void)
+{
+	struct termios termattr, savetermattr;
+	char ch;
+	ssize_t size;
+
+	tcgetattr (STDIN_FILENO, &termattr);
+	savetermattr = termattr;
+	termattr.c_lflag &= ~(ICANON | IEXTEN | ISIG);
+	termattr.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+	termattr.c_cflag &= ~(CSIZE | PARENB);
+	termattr.c_cflag |= CS8;
+	termattr.c_oflag &= ~(OPOST);
+   	termattr.c_cc[VMIN] = 0;
+	termattr.c_cc[VTIME] = 0;
+
+	tcsetattr (STDIN_FILENO, TCSANOW, &termattr);
+	do {
+		size = read(STDIN_FILENO, &ch, 1);
+		if (size)
+			break;
+		usleep(50000);
+	} while (!size);
+
+	tcsetattr (STDIN_FILENO, TCSANOW, &savetermattr);
+	return ch;
+}
 
 static char generic_interrupt(const char *caller, const char *where,
 		       const char *progress, const char *question,
 		       const char *answers)
 {
 	fd_set rfds;
-	struct timeval tv;
+	struct timeval stv;
 	char response;
 	int err, i;
 
 	FD_ZERO(&rfds);
 	FD_SET(STDIN_FILENO, &rfds);
 
-	tv.tv_sec = 0;
-	tv.tv_usec = 0;
+	stv.tv_sec = 0;
+	stv.tv_usec = 0;
 	/* Make sure there isn't extraneous input before asking the
 	 * user the question */
-	while((err = select(STDIN_FILENO + 1, &rfds, NULL, NULL, &tv))) {
+	while((err = select(STDIN_FILENO + 1, &rfds, NULL, NULL, &stv))) {
 		if(err < 0) {
 			log_debug("Error in select() on stdin\n");
 			break;
diff --git a/gfs2/fsck/util.c b/gfs2/fsck/util.c
index ddbc757..d912920 100644
--- a/gfs2/fsck/util.c
+++ b/gfs2/fsck/util.c
@@ -6,6 +6,7 @@
 #include <unistd.h>
 #include <sys/time.h>
 #include <stdio.h>
+#include <termios.h>
 #include <libintl.h>
 #include <ctype.h>
 #define _(String) gettext(String)
@@ -87,6 +88,33 @@ void warm_fuzzy_stuff(uint64_t block)
 	}
 }
 
+char gfs2_getch(void)
+{
+	struct termios termattr, savetermattr;
+	char ch;
+	ssize_t size;
+
+	tcgetattr (STDIN_FILENO, &termattr);
+	savetermattr = termattr;
+	termattr.c_lflag &= ~(ICANON | IEXTEN | ISIG);
+	termattr.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+	termattr.c_cflag &= ~(CSIZE | PARENB);
+	termattr.c_cflag |= CS8;
+	termattr.c_oflag &= ~(OPOST);
+   	termattr.c_cc[VMIN] = 0;
+	termattr.c_cc[VTIME] = 0;
+
+	tcsetattr (STDIN_FILENO, TCSANOW, &termattr);
+	do {
+		size = read(STDIN_FILENO, &ch, 1);
+		if (size)
+			break;
+		usleep(50000);
+	} while (!size);
+
+	tcsetattr (STDIN_FILENO, TCSANOW, &savetermattr);
+	return ch;
+}
 
 char generic_interrupt(const char *caller, const char *where,
 		       const char *progress, const char *question,
diff --git a/gfs2/fsck/util.h b/gfs2/fsck/util.h
index 7c32404..6de61e2 100644
--- a/gfs2/fsck/util.h
+++ b/gfs2/fsck/util.h
@@ -183,5 +183,6 @@ extern int set_ip_blockmap(struct gfs2_inode *ip, int instree);
 extern char generic_interrupt(const char *caller, const char *where,
                        const char *progress, const char *question,
                        const char *answers);
+extern char gfs2_getch(void);
 
 #endif /* __UTIL_H__ */
diff --git a/gfs2/libgfs2/gfs2_log.c b/gfs2/libgfs2/gfs2_log.c
index 39b09c7..a1ceaeb 100644
--- a/gfs2/libgfs2/gfs2_log.c
+++ b/gfs2/libgfs2/gfs2_log.c
@@ -56,31 +56,3 @@ void print_fsck_log(int priority, const char *file, int line,
 	print_msg(priority, file, line, format, args);
 	va_end(args);
 }
-
-char gfs2_getch(void)
-{
-	struct termios termattr, savetermattr;
-	char ch;
-	ssize_t size;
-
-	tcgetattr (STDIN_FILENO, &termattr);
-	savetermattr = termattr;
-	termattr.c_lflag &= ~(ICANON | IEXTEN | ISIG);
-	termattr.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
-	termattr.c_cflag &= ~(CSIZE | PARENB);
-	termattr.c_cflag |= CS8;
-	termattr.c_oflag &= ~(OPOST);
-   	termattr.c_cc[VMIN] = 0;
-	termattr.c_cc[VTIME] = 0;
-
-	tcsetattr (STDIN_FILENO, TCSANOW, &termattr);
-	do {
-		size = read(STDIN_FILENO, &ch, 1);
-		if (size)
-			break;
-		usleep(50000);
-	} while (!size);
-
-	tcsetattr (STDIN_FILENO, TCSANOW, &savetermattr);
-	return ch;
-}
diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h
index 80c84fa..d02d63e 100644
--- a/gfs2/libgfs2/libgfs2.h
+++ b/gfs2/libgfs2/libgfs2.h
@@ -656,7 +656,6 @@ extern int print_level;
 
 #define stack log_debug("<backtrace> - %s()\n", __func__)
 
-extern char gfs2_getch(void);
 extern void increase_verbosity(void);
 extern void decrease_verbosity(void);
 extern void print_fsck_log(int priority, const char *file, int line,
-- 
1.7.4.4




More information about the Cluster-devel mailing list