Commit 40fcae6d authored by jani@rhols221.adsl.netsonic.fi's avatar jani@rhols221.adsl.netsonic.fi
Browse files

Added my_getopt struct and modified myisamchk to the bk tree.

parent b66cc56a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -42,3 +42,4 @@ bell@sanja.is.com.ua
kaj@work.mysql.com
mwagner@cash.mwagner.org
tom@basil-firewall.home.com
jani@rhols221.adsl.netsonic.fi
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ noinst_HEADERS = config-win.h \
			my_dir.h mysys_err.h my_base.h \
			my_nosys.h my_alarm.h queues.h \
			my_tree.h hash.h thr_alarm.h thr_lock.h \
			getopt.h t_ctype.h violite.h md5.h \
			getopt.h my_getopt.h t_ctype.h violite.h md5.h \
			mysql_version.h.in

# mysql_version.h are generated

include/my_getopt.h

0 → 100644
+46 −0
Original line number Diff line number Diff line
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB

   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 of the License, 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 */

struct my_optarg
{
  char *arg;         /* option argument */
  int  pos;          /* next element in ARGV */
  int  verbose;      /* 0 = inhibit warnings of unrecognized options */
  int  unrecognized; /* position of the unrecognized option */
};


enum get_opt_var_type { GET_NO_ARG, GET_INT, GET_LL, GET_STR };
enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG };

struct my_option
{
  const char *name;                     /* Name of the option */
  const char *comment;                  /* option comment, for autom. --help */
  char       *value;                    /* The variable value */
  const char **str_values;              /* Pointer to possible values */
  enum get_opt_var_type var_type;
  enum get_opt_arg_type arg_type;
  int        id;                        /* unique id or short option */
  long long  def_value;                 /* Default value */
  long long  min_value;                 /* Min allowed value */
  long long  max_value;                 /* Max allowed value */
  long long  sub_size;                  /* Subtract this from given value */
  long       block_size;                /* Value should be a mult. of this */
  int        app_type;                  /* To be used by an application */
  my_bool    changeable_var;            /* If true, the option is a variable */
};
+220 −184
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@

#include <m_ctype.h>
#include <stdarg.h>
#include <getopt.h>
#include <my_getopt.h>
#include <assert.h>
#ifdef HAVE_SYS_VADVICE_H
#include <sys/vadvise.h>
@@ -169,58 +169,75 @@ static CHANGEABLE_VAR changeable_vars[] = {

enum options {
  OPT_CHARSETS_DIR=256, OPT_SET_CHARSET,OPT_START_CHECK_POS,
  OPT_CORRECT_CHECKSUM
  OPT_CORRECT_CHECKSUM, OPT_KEY_BUFFER_SIZE, OPT_MYISAM_BLOCK_SIZE,
  OPT_READ_BUFFER_SIZE, OPT_WRITE_BUFFER_SIZE, OPT_SORT_BUFFER_SIZE,
  OPT_SORT_KEY_BLOCKS, OPT_DECODE_BITS, OPT_FT_MIN_WORD_LEN,
  OPT_FT_MAX_WORD_LEN, OPT_FT_MAX_WORD_LEN_FOR_SORT
};


static struct option long_options[] =
static struct my_option my_long_options[] =
{
  {"analyze",		no_argument,	  0, 'a'},
  {"block-search",      required_argument,0, 'b'},
  {"backup",		no_argument,	  0, 'B'},
  {"character-sets-dir",required_argument,0, OPT_CHARSETS_DIR},
  {"check",	        no_argument,	  0, 'c'},
  {"check-only-changed",no_argument,	  0, 'C'},
  {"correct-checksum",  no_argument,	  0, OPT_CORRECT_CHECKSUM},
  {"analyze", "", 0, 0, GET_NO_ARG, NO_ARG, 'a', 0, 0, 0, 0, 0, 0, 0},
  {"block-search", "", 0, 0, GET_LL, REQUIRED_ARG, 'b', 0, 0, 0, 0, 0, 0, 0},
  {"backup", "", 0, 0, GET_NO_ARG, NO_ARG, 'B', 0, 0, 0, 0, 0, 0, 0},
  {"character-sets-dir", "", 0, 0, GET_STR, REQUIRED_ARG, OPT_CHARSETS_DIR, 0, 0, 0, 0, 0, 0, 0},

  {"check", "", 0, 0, GET_NO_ARG, NO_ARG, 'c', 0, 0, 0, 0, 0, 0, 0},
  {"check-only-changed", "", 0, 0, GET_NO_ARG, NO_ARG, 'C', 0, 0, 0, 0, 0, 0, 0},

  {"correct-checksum", "", 0, 0, GET_NO_ARG, NO_ARG, OPT_CORRECT_CHECKSUM, 0, 0, 0, 0, 0, 0, 0},
#ifndef DBUG_OFF
  {"debug",	       optional_argument, 0, '#'},
  {"debug", "", 0, 0, GET_STR, OPT_ARG, '#', 0, 0, 0, 0, 0, 0, 0},
#endif
  {"description",      no_argument,	  0, 'd'},
  {"data-file-length", required_argument, 0, 'D'},
  {"extend-check",     no_argument,	  0, 'e'},
  {"fast",	       no_argument,	  0, 'F'},
  {"force",	       no_argument,	  0, 'f'},
  {"help",	       no_argument,	  0, '?'},
  {"information",      no_argument,	  0, 'i'},
  {"keys-used",        required_argument, 0, 'k'},
  {"medium-check",     no_argument,	  0, 'm'},
  {"quick",	       no_argument,	  0, 'q'},
  {"read-only",        no_argument,	  0, 'T'},
  {"recover",	       no_argument,	  0, 'r'},
  {"safe-recover",     no_argument,	  0, 'o'},
  {"start-check-pos",  required_argument, 0, OPT_START_CHECK_POS},
  {"set-auto-increment",optional_argument, 0, 'A'},
  {"set-character-set",required_argument,0,OPT_SET_CHARSET},
  {"set-variable",     required_argument, 0, 'O'},
  {"silent",	       no_argument,	  0, 's'},
  {"sort-index",       no_argument,	  0, 'S'},
  {"sort-records",     required_argument, 0, 'R'},
  {"sort-recover",     no_argument,	  0, 'n'},
  {"tmpdir",	       required_argument, 0, 't'},
  {"update-state",     no_argument,	  0, 'U'},
  {"unpack",	       no_argument,	  0, 'u'},
  {"verbose",	       no_argument,	  0, 'v'},
  {"version",	       no_argument,	  0, 'V'},
  {"wait",	       no_argument,	  0, 'w'},
  {0, 0, 0, 0}
  {"description", "", 0, 0, GET_NO_ARG, NO_ARG, 'd', 0, 0, 0, 0, 0, 0, 0},
  {"data-file-length", "", 0, 0, GET_LL, REQUIRED_ARG, 'D', 0, 0, 0, 0, 0, 0, 0},
  {"extend-check", "", 0, 0, GET_NO_ARG, NO_ARG, 'e', 0, 0, 0, 0, 0, 0, 0},
  {"fast", "", 0, 0, GET_NO_ARG, NO_ARG, 'F', 0, 0, 0, 0, 0, 0, 0},
  {"force", "", 0, 0, GET_NO_ARG, NO_ARG, 'f', 0, 0, 0, 0, 0, 0, 0},
  {"help", "", 0, 0, GET_NO_ARG, NO_ARG, '?', 0, 0, 0, 0, 0, 0, 0},
  {"information", "", 0, 0, GET_NO_ARG, NO_ARG, 'i', 0, 0, 0, 0, 0, 0, 0},
  {"keys-used", "", 0, 0, GET_LL, REQUIRED_ARG, 'k', 0, 0, 0, 0, 0, 0, 0},
  {"medium-check", "", 0, 0, GET_NO_ARG, NO_ARG, 'm', 0, 0, 0, 0, 0, 0, 0},
  {"quick", "", 0, 0, GET_NO_ARG, NO_ARG, 'q', 0, 0, 0, 0, 0, 0, 0},
  {"read-only", "", 0, 0, GET_NO_ARG, NO_ARG, 'T', 0, 0, 0, 0, 0, 0, 0},
  {"recover", "", 0, 0, GET_NO_ARG, NO_ARG, 'r', 0, 0, 0, 0, 0, 0, 0},
  {"safe-recover", "", 0, 0, GET_NO_ARG, NO_ARG, 'o', 0, 0, 0, 0, 0, 0, 0},
  {"start-check-pos", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_START_CHECK_POS, 0, 0, 0, 0, 0, 0, 0},
  {"set-auto-increment", "", 0, 0, GET_LL, OPT_ARG, 'A', 0, 0, 0, 0, 0, 0, 0},
  {"set-character-set", "", 0, 0, GET_STR, REQUIRED_ARG, OPT_SET_CHARSET, 0, 0, 0, 0, 0, 0, 0},
  {"set-variable", "", 0, 0, GET_STR, REQUIRED_ARG, 'O', 0, 0, 0, 0, 0, 0, 0},
  {"silent", "", 0, 0, GET_NO_ARG, NO_ARG, 's', 0, 0, 0, 0, 0, 0, 0},
  {"sort-index", "", 0, 0, GET_NO_ARG, NO_ARG, 'S', 0, 0, 0, 0, 0, 0, 0},
  {"sort-records", "", 0, 0, GET_INT, REQUIRED_ARG, 'R', 0, 0, 0, 0, 0, 0, 0},
  {"sort-recover", "", 0, 0, GET_NO_ARG, NO_ARG, 'n', 0, 0, 0, 0, 0, 0, 0},
  {"tmpdir", "", 0, 0, GET_STR, REQUIRED_ARG, 't', 0, 0, 0, 0, 0, 0, 0},
  {"update-state", "", 0, 0, GET_NO_ARG, NO_ARG, 'U', 0, 0, 0, 0, 0, 0, 0},
  {"unpack", "", 0, 0, GET_NO_ARG, NO_ARG, 'u', 0, 0, 0, 0, 0, 0, 0},
  {"verbose", "", 0, 0, GET_NO_ARG, NO_ARG, 'v', 0, 0, 0, 0, 0, 0, 0},
  {"version", "", 0, 0, GET_NO_ARG, NO_ARG, 'V', 0, 0, 0, 0, 0, 0, 0},
  {"wait", "", 0, 0, GET_NO_ARG, NO_ARG, 'w', 0, 0, 0, 0, 0, 0, 0},
  /* variables begin here */
  { "key_buffer_size", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_KEY_BUFFER_SIZE, 0, 0, 0, 0, 0, 0, 1}, 
  { "myisam_block_size", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_MYISAM_BLOCK_SIZE, 0, 0, 0, 0, 0, 0, 1}, 
  { "read_buffer_size", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_READ_BUFFER_SIZE, 0, 0, 0, 0, 0, 0, 1}, 
  { "write_buffer_size", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_WRITE_BUFFER_SIZE, 0, 0, 0, 0, 0, 0, 1}, 
  { "sort_buffer_size", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_SORT_BUFFER_SIZE, 0, 0, 0, 0, 0, 0, 1}, 
  { "sort_key_blocks", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_SORT_KEY_BLOCKS, 0, 0, 0, 0, 0, 0, 1},
  { "decode_bits", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_DECODE_BITS, 0, 0, 0, 0, 0, 0, 1},
  { "ft_min_word_len", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_FT_MIN_WORD_LEN, 0, 0, 0, 0, 0, 0, 1},
  { "ft_max_word_len", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_FT_MAX_WORD_LEN, 0, 0, 0, 0, 0, 0, 1},
  { "ft_max_word_len_for_sort", "", 0, 0, GET_LL, REQUIRED_ARG, OPT_FT_MAX_WORD_LEN_FOR_SORT, 0, 0, 0, 0, 0, 0, 1},
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};


static void print_version(void)
{
  printf("%s  Ver 2.0 for %s at %s\n",my_progname,SYSTEM_TYPE,
  printf("%s  Ver 2.1 for %s at %s\n", my_progname, SYSTEM_TYPE,
	 MACHINE_TYPE);
}


static void usage(void)
{
  uint i;
@@ -315,33 +332,25 @@ static void usage(void)

	 /* Read options */

static void get_options(register int *argc,register char ***argv)
static my_bool get_one_option(int optid, const struct my_option *opt,
			      char *argument)
{
  int c,option_index=0;
  uint old_testflag;
  char buff[255], *end;

  load_defaults("my",load_default_groups,argc,argv);
  default_argv= *argv;
  set_all_changeable_vars(changeable_vars);
  if (isatty(fileno(stdout)))
    check_param.testflag|=T_WRITE_LOOP;
  while ((c=getopt_long(*argc,*argv,
			"aBcCdeifF?lqrmnosSTuUvVw#:b:D:k:O:R:A::t:",
			long_options, &option_index)) != EOF)
  {
    switch(c) {
  switch(optid) {
  case 'a':
    check_param.testflag|= T_STATISTICS;
    break;
  case 'A':
      if (optarg)
	check_param.auto_increment_value=strtoull(optarg,NULL,0);
    if (argument)
      check_param.auto_increment_value=strtoull(argument, NULL, 0);
    else
      check_param.auto_increment_value=0;	/* Set to max used value */
    check_param.testflag|= T_AUTO_INC;
    break;
  case 'b':
      check_param.search_after_block=strtoul(optarg,NULL,10);
    check_param.search_after_block=strtoul(argument, NULL, 10);
    break;
  case 'B':
    check_param.testflag|= T_BACKUP_DATA;
@@ -353,7 +362,7 @@ static void get_options(register int *argc,register char ***argv)
    check_param.testflag|= T_CHECK | T_CHECK_ONLY_CHANGED;
    break;
  case 'D':
      check_param.max_data_file_length=strtoll(optarg,NULL,10);
    check_param.max_data_file_length=strtoll(argument, NULL, 10);
    break;
  case 's':				/* silent */
    if (check_param.testflag & T_SILENT)
@@ -381,7 +390,7 @@ static void get_options(register int *argc,register char ***argv)
    check_param.testflag|=T_FAST;
    break;
  case 'k':
      check_param.keys_in_use= (ulonglong) strtoll(optarg,NULL,10);
    check_param.keys_in_use= (ulonglong) strtoll(argument, NULL, 10);
    break;
  case 'm':
    check_param.testflag|= T_MEDIUM;		/* Medium check */
@@ -409,7 +418,21 @@ static void get_options(register int *argc,register char ***argv)
    check_param.verbose++;
    break;
  case 'O':
      if (set_changeable_var(optarg, changeable_vars))
    /* this is a temporary fix for variables to work until my_getopt */
    /* can my_set_changeable_vars */
  case OPT_KEY_BUFFER_SIZE:
  case OPT_MYISAM_BLOCK_SIZE:
  case OPT_READ_BUFFER_SIZE: 
  case OPT_WRITE_BUFFER_SIZE:
  case OPT_SORT_BUFFER_SIZE:
  case OPT_SORT_KEY_BLOCKS:
  case OPT_DECODE_BITS:
  case OPT_FT_MIN_WORD_LEN:
  case OPT_FT_MAX_WORD_LEN:
  case OPT_FT_MAX_WORD_LEN_FOR_SORT:
    end= buff;
    end= strmov(strmov(strmov(end, opt->name), "="), argument);
    if (set_changeable_var(buff, changeable_vars))
    {
      usage();
      exit(1);
@@ -418,7 +441,7 @@ static void get_options(register int *argc,register char ***argv)
  case 'R':				/* Sort records */
    old_testflag=check_param.testflag;
    check_param.testflag|= T_SORT_RECORDS;
      check_param.opt_sort_key=(uint) atoi(optarg)-1;
    check_param.opt_sort_key=(uint) atoi(argument) - 1;
    if (check_param.opt_sort_key >= MI_MAX_KEY)
    {
      fprintf(stderr,
@@ -432,7 +455,7 @@ static void get_options(register int *argc,register char ***argv)
    check_param.testflag|= T_SORT_INDEX;
    break;
  case 't':
      check_param.tmpdir=optarg;
    check_param.tmpdir=argument;
    break;
  case 'T':
    check_param.testflag|= T_READONLY;
@@ -441,7 +464,7 @@ static void get_options(register int *argc,register char ***argv)
    check_param.testflag|= T_UPDATE_STATE;
    break;
  case '#':
      DBUG_PUSH(optarg ? optarg : "d:t:o,/tmp/myisamchk.trace");
    DBUG_PUSH(argument ? argument : "d:t:o,/tmp/myisamchk.trace");
    break;
  case 'V':
    print_version();
@@ -450,14 +473,14 @@ static void get_options(register int *argc,register char ***argv)
    check_param.testflag|=T_CALC_CHECKSUM;
    break;
  case OPT_CHARSETS_DIR:
      charsets_dir = optarg;
    charsets_dir= argument;
    break;
  case OPT_SET_CHARSET:
      set_charset_name=optarg;
    set_charset_name= argument;
    break;
#ifdef DEBUG					/* Only useful if debugging */
  case OPT_START_CHECK_POS:
      check_param.start_check_pos=strtoull(optarg,NULL,0);
    check_param.start_check_pos=strtoull(argument, NULL, 0);
    break;
#endif
  case '?':
@@ -465,13 +488,26 @@ static void get_options(register int *argc,register char ***argv)
    exit(0);
  }
}


static void get_options(register int *argc,register char ***argv)
{
  int c,option_index=0;

  load_defaults("my",load_default_groups,argc,argv);
  default_argv= *argv;
  set_all_changeable_vars(changeable_vars);
  if (isatty(fileno(stdout)))
    check_param.testflag|=T_WRITE_LOOP;

  if (handle_options(argc, argv, my_long_options, get_one_option))
    exit(1);

  /* If using repair, then update checksum if one uses --update-state */
  if ((check_param.testflag & T_UPDATE_STATE) &&
      (check_param.testflag & (T_REP | T_REP_BY_SORT)))
    check_param.testflag|= T_CALC_CHECKSUM;

  (*argc)-=optind;
  (*argv)+=optind;
  if (*argc == 0)
  {
    usage();
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
			my_delete.c my_rename.c my_redel.c my_tempnam.c \
			my_chsize.c my_lread.c my_lwrite.c my_clock.c \
			my_quick.c my_lockmem.c my_static.c \
			getopt.c getopt1.c getvar.c my_mkdir.c \
			getopt.c getopt1.c my_getopt.c getvar.c my_mkdir.c \
			default.c my_compress.c checksum.c raid.cc my_net.c \
			my_vsnprintf.c charset.c my_bitmap.c my_bit.c md5.c
EXTRA_DIST =		thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
Loading