512
533
static struct my_option my_long_options[] =
514
535
{"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG,
516
537
{"auto-generate-sql-select-columns", OPT_SLAP_AUTO_GENERATE_SELECT_COLUMNS,
517
"Provide a string to use for the select fields used in auto tests.",
518
(char**) &auto_generate_selected_columns_opt,
519
(char**) &auto_generate_selected_columns_opt,
520
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
538
"Provide a string to use for the select fields used in auto tests.",
539
(char**) &auto_generate_selected_columns_opt,
540
(char**) &auto_generate_selected_columns_opt,
541
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
521
542
{"auto-generate-sql", 'a',
522
"Generate SQL where not supplied by file or command line.",
523
(char**) &auto_generate_sql, (char**) &auto_generate_sql,
524
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
543
"Generate SQL where not supplied by file or command line.",
544
(char**) &auto_generate_sql, (char**) &auto_generate_sql,
545
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
525
546
{"auto-generate-sql-add-autoincrement", OPT_SLAP_AUTO_GENERATE_ADD_AUTO,
526
"Add an AUTO_INCREMENT column to auto-generated tables.",
527
(char**) &auto_generate_sql_autoincrement,
528
(char**) &auto_generate_sql_autoincrement,
529
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
547
"Add an AUTO_INCREMENT column to auto-generated tables.",
548
(char**) &auto_generate_sql_autoincrement,
549
(char**) &auto_generate_sql_autoincrement,
550
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
530
551
{"auto-generate-sql-execute-number", OPT_SLAP_AUTO_GENERATE_EXECUTE_QUERIES,
531
"Set this number to generate a set number of queries to run.",
532
(char**) &auto_actual_queries, (char**) &auto_actual_queries,
533
0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
552
"Set this number to generate a set number of queries to run.",
553
(char**) &auto_actual_queries, (char**) &auto_actual_queries,
554
0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
534
555
{"auto-generate-sql-guid-primary", OPT_SLAP_AUTO_GENERATE_GUID_PRIMARY,
535
"Add GUID based primary keys to auto-generated tables.",
536
(char**) &auto_generate_sql_guid_primary,
537
(char**) &auto_generate_sql_guid_primary,
538
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
556
"Add GUID based primary keys to auto-generated tables.",
557
(char**) &auto_generate_sql_guid_primary,
558
(char**) &auto_generate_sql_guid_primary,
559
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
539
560
{"auto-generate-sql-load-type", OPT_SLAP_AUTO_GENERATE_SQL_LOAD_TYPE,
540
"Specify test load type: mixed, update, write, key, or read; default is mixed.",
541
(char**) &opt_auto_generate_sql_type, (char**) &opt_auto_generate_sql_type,
542
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
561
"Specify test load type: mixed, update, write, key, or read; default is mixed.",
562
(char**) &opt_auto_generate_sql_type, (char**) &opt_auto_generate_sql_type,
563
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
543
564
{"auto-generate-sql-secondary-indexes",
544
OPT_SLAP_AUTO_GENERATE_SECONDARY_INDEXES,
545
"Number of secondary indexes to add to auto-generated tables.",
546
(char**) &auto_generate_sql_secondary_indexes,
547
(char**) &auto_generate_sql_secondary_indexes, 0,
548
GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
565
OPT_SLAP_AUTO_GENERATE_SECONDARY_INDEXES,
566
"Number of secondary indexes to add to auto-generated tables.",
567
(char**) &auto_generate_sql_secondary_indexes,
568
(char**) &auto_generate_sql_secondary_indexes, 0,
569
GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
549
570
{"auto-generate-sql-unique-query-number",
550
OPT_SLAP_AUTO_GENERATE_UNIQUE_QUERY_NUM,
551
"Number of unique queries to generate for automatic tests.",
552
(char**) &auto_generate_sql_unique_query_number,
553
(char**) &auto_generate_sql_unique_query_number,
554
0, GET_ULL, REQUIRED_ARG, 10, 0, 0, 0, 0, 0},
571
OPT_SLAP_AUTO_GENERATE_UNIQUE_QUERY_NUM,
572
"Number of unique queries to generate for automatic tests.",
573
(char**) &auto_generate_sql_unique_query_number,
574
(char**) &auto_generate_sql_unique_query_number,
575
0, GET_ULL, REQUIRED_ARG, 10, 0, 0, 0, 0, 0},
555
576
{"auto-generate-sql-unique-write-number",
556
OPT_SLAP_AUTO_GENERATE_UNIQUE_WRITE_NUM,
557
"Number of unique queries to generate for auto-generate-sql-write-number.",
558
(char**) &auto_generate_sql_unique_write_number,
559
(char**) &auto_generate_sql_unique_write_number,
560
0, GET_ULL, REQUIRED_ARG, 10, 0, 0, 0, 0, 0},
577
OPT_SLAP_AUTO_GENERATE_UNIQUE_WRITE_NUM,
578
"Number of unique queries to generate for auto-generate-sql-write-number.",
579
(char**) &auto_generate_sql_unique_write_number,
580
(char**) &auto_generate_sql_unique_write_number,
581
0, GET_ULL, REQUIRED_ARG, 10, 0, 0, 0, 0, 0},
561
582
{"auto-generate-sql-write-number", OPT_SLAP_AUTO_GENERATE_WRITE_NUM,
562
"Number of row inserts to perform for each thread (default is 100).",
563
(char**) &auto_generate_sql_number, (char**) &auto_generate_sql_number,
564
0, GET_ULL, REQUIRED_ARG, 100, 0, 0, 0, 0, 0},
583
"Number of row inserts to perform for each thread (default is 100).",
584
(char**) &auto_generate_sql_number, (char**) &auto_generate_sql_number,
585
0, GET_ULL, REQUIRED_ARG, 100, 0, 0, 0, 0, 0},
565
586
{"burnin", OPT_SLAP_BURNIN, "Run full test case in infinite loop.",
566
(char**) &opt_burnin, (char**) &opt_burnin, 0, GET_BOOL, NO_ARG, 0, 0, 0,
587
(char**) &opt_burnin, (char**) &opt_burnin, 0, GET_BOOL, NO_ARG, 0, 0, 0,
568
589
{"ignore-sql-errors", OPT_SLAP_IGNORE_SQL_ERRORS,
569
"Ignore SQL erros in query run.",
570
(char**) &opt_ignore_sql_errors,
571
(char**) &opt_ignore_sql_errors,
572
0, GET_BOOL, NO_ARG, 0, 0, 0,
590
"Ignore SQL erros in query run.",
591
(char**) &opt_ignore_sql_errors,
592
(char**) &opt_ignore_sql_errors,
593
0, GET_BOOL, NO_ARG, 0, 0, 0,
574
595
{"commit", OPT_SLAP_COMMIT, "Commit records every X number of statements.",
575
(char**) &commit_rate, (char**) &commit_rate, 0, GET_UINT, REQUIRED_ARG,
577
{"compress", 'C', "Use compression in server/client protocol.",
578
(char**) &opt_compress, (char**) &opt_compress, 0, GET_BOOL, NO_ARG, 0, 0, 0,
596
(char**) &commit_rate, (char**) &commit_rate, 0, GET_UINT, REQUIRED_ARG,
580
598
{"concurrency", 'c', "Number of clients to simulate for query to run.",
581
(char**) &concurrency_str, (char**) &concurrency_str, 0, GET_STR,
582
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
599
(char**) &concurrency_str, (char**) &concurrency_str, 0, GET_STR,
600
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
583
601
{"create", OPT_SLAP_CREATE_STRING, "File or string to use create tables.",
584
(char**) &create_string, (char**) &create_string, 0, GET_STR, REQUIRED_ARG,
602
(char**) &create_string, (char**) &create_string, 0, GET_STR, REQUIRED_ARG,
586
604
{"create-schema", OPT_CREATE_SLAP_SCHEMA, "Schema to run tests in.",
587
(char**) &create_schema_string, (char**) &create_schema_string, 0, GET_STR,
588
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
605
(char**) &create_schema_string, (char**) &create_schema_string, 0, GET_STR,
606
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
589
607
{"csv", OPT_SLAP_CSV,
590
"Generate CSV output to named file or to stdout if no file is named.",
591
(char**) &opt_csv_str, (char**) &opt_csv_str, 0, GET_STR,
592
OPT_ARG, 0, 0, 0, 0, 0, 0},
593
{"debug-check", OPT_DEBUG_CHECK, "Check memory and open file usage at exit.",
594
(char**) &debug_check_flag, (char**) &debug_check_flag, 0,
595
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
596
{"debug-info", 'T', "Print some debug info at exit.", (char**) &debug_info_flag,
597
(char**) &debug_info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
608
"Generate CSV output to named file or to stdout if no file is named.",
609
(char**) &opt_csv_str, (char**) &opt_csv_str, 0, GET_STR,
610
OPT_ARG, 0, 0, 0, 0, 0, 0},
598
611
{"delayed-start", OPT_SLAP_DELAYED_START,
599
"Delay the startup of threads by a random number of microsends (the maximum of the delay)",
600
(char**) &opt_delayed_start, (char**) &opt_delayed_start, 0, GET_UINT,
601
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
612
"Delay the startup of threads by a random number of microsends (the maximum of the delay)",
613
(char**) &opt_delayed_start, (char**) &opt_delayed_start, 0, GET_UINT,
614
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
602
615
{"delimiter", 'F',
603
"Delimiter to use in SQL statements supplied in file or command line.",
604
(char**) &delimiter, (char**) &delimiter, 0, GET_STR, REQUIRED_ARG,
616
"Delimiter to use in SQL statements supplied in file or command line.",
617
(char**) &delimiter, (char**) &delimiter, 0, GET_STR, REQUIRED_ARG,
606
619
{"detach", OPT_SLAP_DETACH,
607
"Detach (close and reopen) connections after X number of requests.",
608
(char**) &detach_rate, (char**) &detach_rate, 0, GET_UINT, REQUIRED_ARG,
620
"Detach (close and reopen) connections after X number of requests.",
621
(char**) &detach_rate, (char**) &detach_rate, 0, GET_UINT, REQUIRED_ARG,
610
623
{"engine", 'e', "Storage engine to use for creating the table.",
611
(char**) &default_engine, (char**) &default_engine, 0,
612
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
624
(char**) &default_engine, (char**) &default_engine, 0,
625
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
613
626
{"host", 'h', "Connect to host.", (char**) &host, (char**) &host, 0, GET_STR,
614
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
627
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
615
628
{"iterations", 'i', "Number of times to run the tests.", (char**) &iterations,
616
(char**) &iterations, 0, GET_UINT, REQUIRED_ARG, 1, 0, 0, 0, 0, 0},
629
(char**) &iterations, 0, GET_UINT, REQUIRED_ARG, 1, 0, 0, 0, 0, 0},
617
630
{"label", OPT_SLAP_LABEL, "Label to use for print and csv output.",
618
(char**) &opt_label, (char**) &opt_label, 0,
619
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
631
(char**) &opt_label, (char**) &opt_label, 0,
632
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
620
633
{"number-blob-cols", OPT_SLAP_BLOB_COL,
621
"Number of BLOB columns to create table with if specifying --auto-generate-sql. Example --number-blob-cols=3:1024/2048 would give you 3 blobs with a random size between 1024 and 2048. ",
622
(char**) &num_blob_cols_opt, (char**) &num_blob_cols_opt, 0, GET_STR, REQUIRED_ARG,
634
"Number of BLOB columns to create table with if specifying --auto-generate-sql. Example --number-blob-cols=3:1024/2048 would give you 3 blobs with a random size between 1024 and 2048. ",
635
(char**) &num_blob_cols_opt, (char**) &num_blob_cols_opt, 0, GET_STR, REQUIRED_ARG,
624
637
{"number-char-cols", 'x',
625
"Number of VARCHAR columns to create in table if specifying --auto-generate-sql.",
626
(char**) &num_char_cols_opt, (char**) &num_char_cols_opt, 0, GET_STR, REQUIRED_ARG,
638
"Number of VARCHAR columns to create in table if specifying --auto-generate-sql.",
639
(char**) &num_char_cols_opt, (char**) &num_char_cols_opt, 0, GET_STR, REQUIRED_ARG,
628
641
{"number-int-cols", 'y',
629
"Number of INT columns to create in table if specifying --auto-generate-sql.",
630
(char**) &num_int_cols_opt, (char**) &num_int_cols_opt, 0, GET_STR, REQUIRED_ARG,
642
"Number of INT columns to create in table if specifying --auto-generate-sql.",
643
(char**) &num_int_cols_opt, (char**) &num_int_cols_opt, 0, GET_STR, REQUIRED_ARG,
632
645
{"number-of-queries", OPT_DRIZZLE_NUMBER_OF_QUERY,
633
"Limit each client to this number of queries (this is not exact).",
634
(char**) &num_of_query, (char**) &num_of_query, 0,
635
GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
646
"Limit each client to this number of queries (this is not exact).",
647
(char**) &num_of_query, (char**) &num_of_query, 0,
648
GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
636
649
{"only-print", OPT_DRIZZLE_ONLY_PRINT,
637
"This causes drizzleslap to not connect to the databases, but instead print "
638
"out what it would have done instead.",
639
(char**) &opt_only_print, (char**) &opt_only_print, 0, GET_BOOL, NO_ARG,
642
"Password to use when connecting to server. If password is not given it's "
643
"asked from the tty.", 0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
644
{"port", 'P', "Port number to use for connection.", (char**) &opt_drizzle_port,
645
(char**) &opt_drizzle_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0,
650
"This causes drizzleslap to not connect to the databases, but instead print "
651
"out what it would have done instead.",
652
(char**) &opt_only_print, (char**) &opt_only_print, 0, GET_BOOL, NO_ARG,
655
"Password to use when connecting to server. If password is not given it's "
656
"asked from the tty.", 0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
657
{"port", 'p', "Port number to use for connection.",
658
0, 0, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
647
659
{"post-query", OPT_SLAP_POST_QUERY,
648
"Query to run or file containing query to execute after tests have completed.",
649
(char**) &user_supplied_post_statements,
650
(char**) &user_supplied_post_statements,
651
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
660
"Query to run or file containing query to execute after tests have completed.",
661
(char**) &user_supplied_post_statements,
662
(char**) &user_supplied_post_statements,
663
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
652
664
{"post-system", OPT_SLAP_POST_SYSTEM,
653
"system() string to execute after tests have completed.",
654
(char**) &post_system,
655
(char**) &post_system,
656
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
665
"system() string to execute after tests have completed.",
666
(char**) &post_system,
667
(char**) &post_system,
668
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
657
669
{"pre-query", OPT_SLAP_PRE_QUERY,
658
"Query to run or file containing query to execute before running tests.",
659
(char**) &user_supplied_pre_statements,
660
(char**) &user_supplied_pre_statements,
661
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
670
"Query to run or file containing query to execute before running tests.",
671
(char**) &user_supplied_pre_statements,
672
(char**) &user_supplied_pre_statements,
673
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
662
674
{"pre-system", OPT_SLAP_PRE_SYSTEM,
663
"system() string to execute before running tests.",
664
(char**) &pre_system,
665
(char**) &pre_system,
666
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
675
"system() string to execute before running tests.",
676
(char**) &pre_system,
677
(char**) &pre_system,
678
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
667
679
{"protocol", OPT_DRIZZLE_PROTOCOL,
668
"The protocol of connection (tcp,socket,pipe,memory).",
669
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
680
"The protocol of connection (tcp,socket,pipe,memory).",
681
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
670
682
{"query", 'q', "Query to run or file containing query to run.",
671
(char**) &user_supplied_query, (char**) &user_supplied_query,
672
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
683
(char**) &user_supplied_query, (char**) &user_supplied_query,
684
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
673
685
{"set-random-seed", OPT_SLAP_SET_RANDOM_SEED,
674
"Seed for random number generator (srandom(3))",
675
(char**)&opt_set_random_seed,
676
(char**)&opt_set_random_seed,0,
677
GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
686
"Seed for random number generator (srandom(3))",
687
(char**)&opt_set_random_seed,
688
(char**)&opt_set_random_seed,0,
689
GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
678
690
{"silent", 's', "Run program in silent mode - no output.",
679
(char**) &opt_silent, (char**) &opt_silent, 0, GET_BOOL, NO_ARG,
691
(char**) &opt_silent, (char**) &opt_silent, 0, GET_BOOL, NO_ARG,
681
693
{"socket", 'S', "Socket file to use for connection.",
682
(char**) &opt_drizzle_unix_port, (char**) &opt_drizzle_unix_port, 0, GET_STR,
683
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
694
(char**) &opt_drizzle_unix_port, (char**) &opt_drizzle_unix_port, 0, GET_STR,
695
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
684
696
{"timer-length", OPT_SLAP_TIMER_LENGTH,
685
"Require drizzleslap to run each specific test a certain amount of time in seconds.",
686
(char**) &opt_timer_length, (char**) &opt_timer_length, 0, GET_UINT,
687
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
688
#ifndef DONT_ALLOW_USER_CHANGE
697
"Require drizzleslap to run each specific test a certain amount of time in seconds.",
698
(char**) &opt_timer_length, (char**) &opt_timer_length, 0, GET_UINT,
699
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
689
700
{"user", 'u', "User for login if not current user.", (char**) &user,
690
(char**) &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
701
(char**) &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
693
"More verbose output; you can use this multiple times to get even more "
694
"verbose output.", (char**) &verbose, (char**) &verbose, 0,
695
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
703
"More verbose output; you can use this multiple times to get even more "
704
"verbose output.", (char**) &verbose, (char**) &verbose, 0,
705
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
696
706
{"version", 'V', "Output version information and exit.", 0, 0, 0, GET_NO_ARG,
697
NO_ARG, 0, 0, 0, 0, 0, 0},
707
NO_ARG, 0, 0, 0, 0, 0, 0},
698
708
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
702
712
static void print_version(void)
704
printf("%s Ver %s Distrib %s, for %s (%s)\n",my_progname, SLAP_VERSION,
705
drizzle_get_client_info(),SYSTEM_TYPE,MACHINE_TYPE);
714
printf("%s Ver %s Distrib %s, for %s-%s (%s)\n",my_progname, SLAP_VERSION,
715
drizzle_version(),HOST_VENDOR,HOST_OS,HOST_CPU);
709
719
static void usage(void)
712
puts("Copyright (C) 2005 DRIZZLE AB");
722
puts("Copyright (C) 2008 Sun Microsystems");
713
723
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\
714
724
\nand you are welcome to modify and redistribute it under the GPL \
716
726
puts("Run a query multiple times against the server\n");
717
727
printf("Usage: %s [OPTIONS]\n",my_progname);
718
print_defaults("my",load_default_groups);
728
print_defaults("drizzle",load_default_groups);
719
729
my_print_help(my_long_options);
723
get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
732
bool get_one_option(int optid, const struct my_option *, char *argument)
735
uint64_t temp_drizzle_port= 0;
742
temp_drizzle_port= (uint64_t) strtoul(argument, &endchar, 10);
743
/* if there is an alpha character this is not a valid port */
744
if (strlen(endchar) != 0)
746
fprintf(stderr, _("Non-integer value supplied for port. If you are trying to enter a password please use --password instead.\n"));
749
/* If the port number is > 65535 it is not a valid port
750
This also helps with potential data loss casting unsigned long to a
752
if ((temp_drizzle_port == 0) || (temp_drizzle_port > 65535))
754
fprintf(stderr, _("Value supplied for port is not valid.\n"));
759
opt_drizzle_port= (uint32_t) temp_drizzle_port;
734
765
char *start= argument;
735
my_free(opt_password, MYF(MY_ALLOW_ZERO_PTR));
736
opt_password= my_strdup(argument,MYF(MY_FAE));
737
while (*argument) *argument++= 'x'; /* Destroy argument */
768
opt_password = strdup(argument);
769
if (opt_password == NULL)
771
fprintf(stderr, "Memory allocation error while copying password. "
777
/* Overwriting password with 'x' */
739
start[1]= 0; /* Cut length of argument */
782
/* Cut length of argument */