Loading .bzrignore +1 −0 Original line number Diff line number Diff line Loading @@ -447,3 +447,4 @@ vio/test-sslserver vio/viotest-ssl sql-bench/test-transactions libmysqld/sql_do.cc extra/mysql_install extra/Makefile.am +1 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ INCLUDES = @MT_INCLUDES@ -I$(srcdir)/../include -I../include -I.. LDADD = @CLIENT_EXTRA_LDFLAGS@ ../mysys/libmysys.a \ ../dbug/libdbug.a ../strings/libmystrings.a bin_PROGRAMS = replace comp_err perror resolveip my_print_defaults \ resolve_stack_dump resolve_stack_dump mysql_install OMIT_DEPENDENCIES = pthread.h stdio.h __stdio.h stdlib.h __stdlib.h math.h\ __math.h time.h __time.h unistd.h __unistd.h types.h \ Loading extra/mysql_install.c +194 −2 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ #define INSTALL_VERSION "1.0" #define DONT_USE_RAID #include <global.h> #include <my_global.h> #include <m_ctype.h> #include <my_sys.h> #include <m_string.h> Loading @@ -29,13 +29,195 @@ #include <errno.h> #include <getopt.h> #define ANSWERS_CHUNCK 32 int have_gui=0; struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"help", no_argument, 0, '?'}, {"version", no_argument, 0, 'V'}, {0, 0,0,0} }; /* For now, not much exciting here, but we'll add more once we add GUI support */ typedef struct { FILE* out; FILE* in; const char* question; int default_ind; DYNAMIC_ARRAY answers; } QUESTION_WIDGET; static void usage(); static void die(const char* fmt, ...); static void print_version(void); static char get_answer_char(int ans_ind); static int ask_user(const char* question,int default_ind, ...); static void add_answer(QUESTION_WIDGET* w, const char* ans); static void display_question(QUESTION_WIDGET* w); static int init_question_widget(QUESTION_WIDGET* w, const char* question, int default_ind); static void end_question_widget(QUESTION_WIDGET* w); static int get_answer(QUESTION_WIDGET* w); static char answer_from_char(char c); static void invalid_answer(QUESTION_WIDGET* w); enum {IMODE_STANDARD=0,IMODE_CUSTOM,IMODE_UPGRAGE} install_mode = IMODE_STANDARD; static char get_answer_char(int ans_ind) { return 'a' + ans_ind; } static void invalid_answer(QUESTION_WIDGET* w) { if (!have_gui) { fprintf(w->out, "ERROR: invalid answer, try again...\a\n"); } } static char answer_from_char(char c) { return c - 'a'; } static void die(const char* fmt, ...) { va_list args; va_start(args, fmt); fprintf(stderr, "%s: ", my_progname); vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); va_end(args); exit(1); } static void display_question(QUESTION_WIDGET* w) { if (!have_gui) { uint i,num_answers=w->answers.elements; DYNAMIC_ARRAY* answers = &w->answers; fprintf(w->out,"\n%s\n\n",w->question); for (i=0; i<num_answers; i++) { char* ans; get_dynamic(answers,(gptr)&ans,i); fprintf(w->out,"%c - %s\n",get_answer_char(i),ans); } fprintf(w->out,"q - Abort Install/Upgrade\n\n"); } } static void add_answer(QUESTION_WIDGET* w, const char* ans) { insert_dynamic(&w->answers,(gptr)&ans); } static int init_question_widget(QUESTION_WIDGET* w, const char* question, int default_ind) { if (have_gui) { w->in = w->out = 0; } else { w->out = stdout; w->in = stdin; } w->question = question; w->default_ind = default_ind; if (init_dynamic_array(&w->answers,sizeof(char*), ANSWERS_CHUNCK,ANSWERS_CHUNCK)) die("Out of memory"); return 0; } static void end_question_widget(QUESTION_WIDGET* w) { delete_dynamic(&w->answers); } static int get_answer(QUESTION_WIDGET* w) { if (!have_gui) { char buf[32]; int ind; char c; if (!fgets(buf,sizeof(buf),w->in)) die("Failed fgets on input stream"); switch ((c=tolower(*buf))) { case '\n': return w->default_ind; case 'q': die("Install/Upgrade aborted"); default: ind = answer_from_char(c); if (ind >= 0 && ind < (int)w->answers.elements) return ind; } } return -1; } static int ask_user(const char* question,int default_ind, ...) { va_list args; char* opt; QUESTION_WIDGET w; int ans; va_start(args,default_ind); init_question_widget(&w,question,default_ind); for (;(opt=va_arg(args,char*));) { add_answer(&w,opt); } for (;;) { display_question(&w); if ((ans = get_answer(&w)) >= 0) break; invalid_answer(&w); } end_question_widget(&w); va_end(args); return ans; } static int parse_args(int argc, char **argv) { int c, option_index = 0; while((c = getopt_long(argc, argv, "?V", long_options, &option_index)) != EOF) { switch(c) { case 'V': print_version(); exit(0); case '?': usage(); exit(0); default: usage(); exit(1); } } return 0; } static void print_version(void) { printf("%s Ver %s Distrib %s, for %s (%s)\n",my_progname,INSTALL_VERSION, Loading @@ -55,6 +237,16 @@ static void usage() -V, --version Output version information and exit.\n"); } int main(int argc, char** argv) { MY_INIT(argv[0]); parse_args(argc,argv); install_mode = ask_user("Please select install/upgrade mode", install_mode, "Standard Install", "Custom Install", "Upgrade",0); printf("mode=%d\n", install_mode); return 0; } Loading Loading
.bzrignore +1 −0 Original line number Diff line number Diff line Loading @@ -447,3 +447,4 @@ vio/test-sslserver vio/viotest-ssl sql-bench/test-transactions libmysqld/sql_do.cc extra/mysql_install
extra/Makefile.am +1 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ INCLUDES = @MT_INCLUDES@ -I$(srcdir)/../include -I../include -I.. LDADD = @CLIENT_EXTRA_LDFLAGS@ ../mysys/libmysys.a \ ../dbug/libdbug.a ../strings/libmystrings.a bin_PROGRAMS = replace comp_err perror resolveip my_print_defaults \ resolve_stack_dump resolve_stack_dump mysql_install OMIT_DEPENDENCIES = pthread.h stdio.h __stdio.h stdlib.h __stdlib.h math.h\ __math.h time.h __time.h unistd.h __unistd.h types.h \ Loading
extra/mysql_install.c +194 −2 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ #define INSTALL_VERSION "1.0" #define DONT_USE_RAID #include <global.h> #include <my_global.h> #include <m_ctype.h> #include <my_sys.h> #include <m_string.h> Loading @@ -29,13 +29,195 @@ #include <errno.h> #include <getopt.h> #define ANSWERS_CHUNCK 32 int have_gui=0; struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"help", no_argument, 0, '?'}, {"version", no_argument, 0, 'V'}, {0, 0,0,0} }; /* For now, not much exciting here, but we'll add more once we add GUI support */ typedef struct { FILE* out; FILE* in; const char* question; int default_ind; DYNAMIC_ARRAY answers; } QUESTION_WIDGET; static void usage(); static void die(const char* fmt, ...); static void print_version(void); static char get_answer_char(int ans_ind); static int ask_user(const char* question,int default_ind, ...); static void add_answer(QUESTION_WIDGET* w, const char* ans); static void display_question(QUESTION_WIDGET* w); static int init_question_widget(QUESTION_WIDGET* w, const char* question, int default_ind); static void end_question_widget(QUESTION_WIDGET* w); static int get_answer(QUESTION_WIDGET* w); static char answer_from_char(char c); static void invalid_answer(QUESTION_WIDGET* w); enum {IMODE_STANDARD=0,IMODE_CUSTOM,IMODE_UPGRAGE} install_mode = IMODE_STANDARD; static char get_answer_char(int ans_ind) { return 'a' + ans_ind; } static void invalid_answer(QUESTION_WIDGET* w) { if (!have_gui) { fprintf(w->out, "ERROR: invalid answer, try again...\a\n"); } } static char answer_from_char(char c) { return c - 'a'; } static void die(const char* fmt, ...) { va_list args; va_start(args, fmt); fprintf(stderr, "%s: ", my_progname); vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); va_end(args); exit(1); } static void display_question(QUESTION_WIDGET* w) { if (!have_gui) { uint i,num_answers=w->answers.elements; DYNAMIC_ARRAY* answers = &w->answers; fprintf(w->out,"\n%s\n\n",w->question); for (i=0; i<num_answers; i++) { char* ans; get_dynamic(answers,(gptr)&ans,i); fprintf(w->out,"%c - %s\n",get_answer_char(i),ans); } fprintf(w->out,"q - Abort Install/Upgrade\n\n"); } } static void add_answer(QUESTION_WIDGET* w, const char* ans) { insert_dynamic(&w->answers,(gptr)&ans); } static int init_question_widget(QUESTION_WIDGET* w, const char* question, int default_ind) { if (have_gui) { w->in = w->out = 0; } else { w->out = stdout; w->in = stdin; } w->question = question; w->default_ind = default_ind; if (init_dynamic_array(&w->answers,sizeof(char*), ANSWERS_CHUNCK,ANSWERS_CHUNCK)) die("Out of memory"); return 0; } static void end_question_widget(QUESTION_WIDGET* w) { delete_dynamic(&w->answers); } static int get_answer(QUESTION_WIDGET* w) { if (!have_gui) { char buf[32]; int ind; char c; if (!fgets(buf,sizeof(buf),w->in)) die("Failed fgets on input stream"); switch ((c=tolower(*buf))) { case '\n': return w->default_ind; case 'q': die("Install/Upgrade aborted"); default: ind = answer_from_char(c); if (ind >= 0 && ind < (int)w->answers.elements) return ind; } } return -1; } static int ask_user(const char* question,int default_ind, ...) { va_list args; char* opt; QUESTION_WIDGET w; int ans; va_start(args,default_ind); init_question_widget(&w,question,default_ind); for (;(opt=va_arg(args,char*));) { add_answer(&w,opt); } for (;;) { display_question(&w); if ((ans = get_answer(&w)) >= 0) break; invalid_answer(&w); } end_question_widget(&w); va_end(args); return ans; } static int parse_args(int argc, char **argv) { int c, option_index = 0; while((c = getopt_long(argc, argv, "?V", long_options, &option_index)) != EOF) { switch(c) { case 'V': print_version(); exit(0); case '?': usage(); exit(0); default: usage(); exit(1); } } return 0; } static void print_version(void) { printf("%s Ver %s Distrib %s, for %s (%s)\n",my_progname,INSTALL_VERSION, Loading @@ -55,6 +237,16 @@ static void usage() -V, --version Output version information and exit.\n"); } int main(int argc, char** argv) { MY_INIT(argv[0]); parse_args(argc,argv); install_mode = ask_user("Please select install/upgrade mode", install_mode, "Standard Install", "Custom Install", "Upgrade",0); printf("mode=%d\n", install_mode); return 0; } Loading