[Cluster-devel] [PATCH 1/6] libgfs2: Move generic_interrupt() into utils
Steven Whitehouse
swhiteho at redhat.com
Wed Nov 30 15:04:37 UTC 2011
First patch moving user interface code out of the library
Signed-off-by: Steven Whitehouse <swhiteho at redhat.com>
---
gfs2/convert/gfs2_convert.c | 48 +++++++++++++++++++++++++++++++++++++++++++
gfs2/fsck/util.c | 48 +++++++++++++++++++++++++++++++++++++++++++
gfs2/fsck/util.h | 4 +++
gfs2/libgfs2/gfs2_log.c | 48 -------------------------------------------
gfs2/libgfs2/libgfs2.h | 3 --
5 files changed, 100 insertions(+), 51 deletions(-)
diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c
index 396e899..f79b4a4 100644
--- a/gfs2/convert/gfs2_convert.c
+++ b/gfs2/convert/gfs2_convert.c
@@ -2057,6 +2057,54 @@ static void copy_quotas(struct gfs2_sbd *sdp)
inode_put(&oq_ip);
}
+
+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;
+ char response;
+ int err, i;
+
+ FD_ZERO(&rfds);
+ FD_SET(STDIN_FILENO, &rfds);
+
+ tv.tv_sec = 0;
+ tv.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))) {
+ if(err < 0) {
+ log_debug("Error in select() on stdin\n");
+ break;
+ }
+ if(read(STDIN_FILENO, &response, sizeof(char)) < 0) {
+ log_debug("Error in read() on stdin\n");
+ break;
+ }
+ }
+ while (TRUE) {
+ printf("\n%s interrupted during %s: ", caller, where);
+ if (progress)
+ printf("%s.\n", progress);
+ printf("%s", question);
+
+ /* Make sure query is printed out */
+ fflush(NULL);
+ response = gfs2_getch();
+ printf("\n");
+ fflush(NULL);
+ if (strchr(answers, response))
+ break;
+ printf("Bad response, please type ");
+ for (i = 0; i < strlen(answers) - 1; i++)
+ printf("'%c', ", answers[i]);
+ printf(" or '%c'.\n", answers[i]);
+ }
+ return response;
+}
+
static int __attribute__((format(printf, 3, 4))) gfs2_query(int *setonabort,
struct gfs2_options *opts, const char *format, ...)
{
diff --git a/gfs2/fsck/util.c b/gfs2/fsck/util.c
index 0d243e0..ddbc757 100644
--- a/gfs2/fsck/util.c
+++ b/gfs2/fsck/util.c
@@ -87,6 +87,54 @@ void warm_fuzzy_stuff(uint64_t block)
}
}
+
+char generic_interrupt(const char *caller, const char *where,
+ const char *progress, const char *question,
+ const char *answers)
+{
+ fd_set rfds;
+ struct timeval tv;
+ char response;
+ int err, i;
+
+ FD_ZERO(&rfds);
+ FD_SET(STDIN_FILENO, &rfds);
+
+ tv.tv_sec = 0;
+ tv.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))) {
+ if(err < 0) {
+ log_debug("Error in select() on stdin\n");
+ break;
+ }
+ if(read(STDIN_FILENO, &response, sizeof(char)) < 0) {
+ log_debug("Error in read() on stdin\n");
+ break;
+ }
+ }
+ while (TRUE) {
+ printf("\n%s interrupted during %s: ", caller, where);
+ if (progress)
+ printf("%s.\n", progress);
+ printf("%s", question);
+
+ /* Make sure query is printed out */
+ fflush(NULL);
+ response = gfs2_getch();
+ printf("\n");
+ fflush(NULL);
+ if (strchr(answers, response))
+ break;
+ printf("Bad response, please type ");
+ for (i = 0; i < strlen(answers) - 1; i++)
+ printf("'%c', ", answers[i]);
+ printf(" or '%c'.\n", answers[i]);
+ }
+ return response;
+}
+
/* fsck_query: Same as gfs2_query except it adjusts errors_found and
errors_corrected. */
int fsck_query(const char *format, ...)
diff --git a/gfs2/fsck/util.h b/gfs2/fsck/util.h
index b56fe69..7c32404 100644
--- a/gfs2/fsck/util.h
+++ b/gfs2/fsck/util.h
@@ -180,4 +180,8 @@ extern void *gfs2_bmap_destroy(struct gfs2_sbd *sdp, struct gfs2_bmap *il);
extern int gfs2_blockmap_set(struct gfs2_bmap *il, uint64_t block,
enum gfs2_mark_block mark);
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);
+
#endif /* __UTIL_H__ */
diff --git a/gfs2/libgfs2/gfs2_log.c b/gfs2/libgfs2/gfs2_log.c
index aa5ca73..39b09c7 100644
--- a/gfs2/libgfs2/gfs2_log.c
+++ b/gfs2/libgfs2/gfs2_log.c
@@ -84,51 +84,3 @@ char gfs2_getch(void)
tcsetattr (STDIN_FILENO, TCSANOW, &savetermattr);
return ch;
}
-
-char generic_interrupt(const char *caller, const char *where,
- const char *progress, const char *question,
- const char *answers)
-{
- fd_set rfds;
- struct timeval tv;
- char response;
- int err, i;
-
- FD_ZERO(&rfds);
- FD_SET(STDIN_FILENO, &rfds);
-
- tv.tv_sec = 0;
- tv.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))) {
- if(err < 0) {
- log_debug("Error in select() on stdin\n");
- break;
- }
- if(read(STDIN_FILENO, &response, sizeof(char)) < 0) {
- log_debug("Error in read() on stdin\n");
- break;
- }
- }
- while (TRUE) {
- printf("\n%s interrupted during %s: ", caller, where);
- if (progress)
- printf("%s.\n", progress);
- printf("%s", question);
-
- /* Make sure query is printed out */
- fflush(NULL);
- response = gfs2_getch();
- printf("\n");
- fflush(NULL);
- if (strchr(answers, response))
- break;
- printf("Bad response, please type ");
- for (i = 0; i < strlen(answers) - 1; i++)
- printf("'%c', ", answers[i]);
- printf(" or '%c'.\n", answers[i]);
- }
- return response;
-}
-
diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h
index 95fd2b4..80c84fa 100644
--- a/gfs2/libgfs2/libgfs2.h
+++ b/gfs2/libgfs2/libgfs2.h
@@ -662,9 +662,6 @@ extern void decrease_verbosity(void);
extern void print_fsck_log(int priority, const char *file, int line,
const char *format, ...)
__attribute__((format(printf,4,5)));
-extern char generic_interrupt(const char *caller, const char *where,
- const char *progress, const char *question,
- const char *answers);
/* misc.c */
extern int compute_heightsize(struct gfs2_sbd *sdp, uint64_t *heightsize,
--
1.7.4.4
More information about the Cluster-devel
mailing list