mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
mysys/my_getopt.c
always process uint/ulong using ulonglong (unsigned) code dbug printout for adjusted option values strings/llstr.c ullstr() - the unsigned brother of llstr() include/m_string.h: ullstr() - the unsigned brother of llstr() mysql-test/t/variables.test: test adjusted for 32bit mysys/my_getopt.c: always process uint/ulong using ulonglong (unsigned) code dbug printout for adjusted option values strings/llstr.c: ullstr() - the unsigned brother of llstr()
This commit is contained in:
@@ -203,6 +203,7 @@ double my_strtod(const char *str, char **end, int *error);
|
|||||||
double my_atof(const char *nptr);
|
double my_atof(const char *nptr);
|
||||||
|
|
||||||
extern char *llstr(longlong value,char *buff);
|
extern char *llstr(longlong value,char *buff);
|
||||||
|
extern char *ullstr(longlong value,char *buff);
|
||||||
#ifndef HAVE_STRTOUL
|
#ifndef HAVE_STRTOUL
|
||||||
extern long strtol(const char *str, char **ptr, int base);
|
extern long strtol(const char *str, char **ptr, int base);
|
||||||
extern ulong strtoul(const char *str, char **ptr, int base);
|
extern ulong strtoul(const char *str, char **ptr, int base);
|
||||||
|
@@ -141,9 +141,9 @@ set GLOBAL myisam_max_sort_file_size=2000000;
|
|||||||
show global variables like 'myisam_max_sort_file_size';
|
show global variables like 'myisam_max_sort_file_size';
|
||||||
select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
|
select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
|
||||||
set GLOBAL myisam_max_sort_file_size=default;
|
set GLOBAL myisam_max_sort_file_size=default;
|
||||||
--replace_result 2147482624 FILE_SIZE 9223372036853727232 FILE_SIZE
|
--replace_result 2146435072 FILE_SIZE 9223372036853727232 FILE_SIZE
|
||||||
show variables like 'myisam_max_sort_file_size';
|
show variables like 'myisam_max_sort_file_size';
|
||||||
--replace_result 2147482624 FILE_SIZE 9223372036853727232 FILE_SIZE
|
--replace_result 2146435072 FILE_SIZE 9223372036853727232 FILE_SIZE
|
||||||
select * from information_schema.session_variables where variable_name like 'myisam_max_sort_file_size';
|
select * from information_schema.session_variables where variable_name like 'myisam_max_sort_file_size';
|
||||||
|
|
||||||
set global net_retry_count=10, session net_retry_count=10;
|
set global net_retry_count=10, session net_retry_count=10;
|
||||||
|
@@ -20,14 +20,6 @@
|
|||||||
#include <mysys_err.h>
|
#include <mysys_err.h>
|
||||||
#include <my_getopt.h>
|
#include <my_getopt.h>
|
||||||
|
|
||||||
#if SIZEOF_LONG < SIZEOF_LONG_LONG
|
|
||||||
#define getopt_ul getopt_ll
|
|
||||||
#define getopt_ul_limit_value getopt_ll_limit_value
|
|
||||||
#else
|
|
||||||
#define getopt_ul getopt_ull
|
|
||||||
#define getopt_ul_limit_value getopt_ull_limit_value
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void default_reporter(enum loglevel level, const char *format, ...);
|
static void default_reporter(enum loglevel level, const char *format, ...);
|
||||||
my_error_reporter my_getopt_error_reporter= &default_reporter;
|
my_error_reporter my_getopt_error_reporter= &default_reporter;
|
||||||
|
|
||||||
@@ -602,14 +594,16 @@ static int setval(const struct my_option *opts, uchar* *value, char *argument,
|
|||||||
*((my_bool*) result_pos)= (my_bool) atoi(argument) != 0;
|
*((my_bool*) result_pos)= (my_bool) atoi(argument) != 0;
|
||||||
break;
|
break;
|
||||||
case GET_INT:
|
case GET_INT:
|
||||||
case GET_UINT: /* fall through */
|
|
||||||
*((int*) result_pos)= (int) getopt_ll(argument, opts, &err);
|
*((int*) result_pos)= (int) getopt_ll(argument, opts, &err);
|
||||||
break;
|
break;
|
||||||
|
case GET_UINT:
|
||||||
|
*((uint*) result_pos)= (uint) getopt_ull(argument, opts, &err);
|
||||||
|
break;
|
||||||
case GET_LONG:
|
case GET_LONG:
|
||||||
*((long*) result_pos)= (long) getopt_ll(argument, opts, &err);
|
*((long*) result_pos)= (long) getopt_ll(argument, opts, &err);
|
||||||
break;
|
break;
|
||||||
case GET_ULONG:
|
case GET_ULONG:
|
||||||
*((long*) result_pos)= (long) getopt_ul(argument, opts, &err);
|
*((long*) result_pos)= (long) getopt_ull(argument, opts, &err);
|
||||||
break;
|
break;
|
||||||
case GET_LL:
|
case GET_LL:
|
||||||
*((longlong*) result_pos)= getopt_ll(argument, opts, &err);
|
*((longlong*) result_pos)= getopt_ll(argument, opts, &err);
|
||||||
@@ -781,13 +775,19 @@ static longlong getopt_ll_limit_value(longlong num,
|
|||||||
const struct my_option *optp)
|
const struct my_option *optp)
|
||||||
{
|
{
|
||||||
ulonglong block_size= (optp->block_size ? (ulonglong) optp->block_size : 1L);
|
ulonglong block_size= (optp->block_size ? (ulonglong) optp->block_size : 1L);
|
||||||
|
longlong old= num;
|
||||||
|
char buf1[255] __attribute__((unused)), buf2[255] __attribute__((unused));
|
||||||
|
|
||||||
if (num > 0 && (ulonglong) num > (ulonglong) optp->max_value &&
|
if (num > 0 && (ulonglong) num > (ulonglong) optp->max_value &&
|
||||||
optp->max_value) /* if max value is not set -> no upper limit */
|
optp->max_value) /* if max value is not set -> no upper limit */
|
||||||
num= (ulonglong) optp->max_value;
|
num= (ulonglong) optp->max_value;
|
||||||
num= ((num - optp->sub_size) / block_size);
|
num= ((num - optp->sub_size) / block_size);
|
||||||
num= (longlong) (num * block_size);
|
num= (longlong) (num * block_size);
|
||||||
return max(num, optp->min_value);
|
num= max(num, optp->min_value);
|
||||||
|
if (num != old)
|
||||||
|
DBUG_PRINT("options", ("option '%s' adjusted %s -> %s",
|
||||||
|
optp->name, llstr(old, buf1), llstr(num, buf2)));
|
||||||
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -806,6 +806,9 @@ static ulonglong getopt_ull(char *arg, const struct my_option *optp, int *err)
|
|||||||
|
|
||||||
ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp)
|
ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp)
|
||||||
{
|
{
|
||||||
|
ulonglong old= num;
|
||||||
|
char buf1[255] __attribute__((unused)), buf2[255] __attribute__((unused));
|
||||||
|
|
||||||
if ((ulonglong) num > (ulonglong) optp->max_value &&
|
if ((ulonglong) num > (ulonglong) optp->max_value &&
|
||||||
optp->max_value) /* if max value is not set -> no upper limit */
|
optp->max_value) /* if max value is not set -> no upper limit */
|
||||||
num= (ulonglong) optp->max_value;
|
num= (ulonglong) optp->max_value;
|
||||||
@@ -816,6 +819,9 @@ ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp)
|
|||||||
}
|
}
|
||||||
if (num < (ulonglong) optp->min_value)
|
if (num < (ulonglong) optp->min_value)
|
||||||
num= (ulonglong) optp->min_value;
|
num= (ulonglong) optp->min_value;
|
||||||
|
if (num != old)
|
||||||
|
DBUG_PRINT("options", ("option '%s' adjusted %s -> %s",
|
||||||
|
optp->name, ullstr(old, buf1), ullstr(num, buf2)));
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -872,7 +878,7 @@ static void init_one_value(const struct my_option *optp, uchar* *variable,
|
|||||||
*((int*) variable)= (int) getopt_ll_limit_value(value, optp);
|
*((int*) variable)= (int) getopt_ll_limit_value(value, optp);
|
||||||
break;
|
break;
|
||||||
case GET_UINT:
|
case GET_UINT:
|
||||||
*((uint*) variable)= (uint) getopt_ll_limit_value(value, optp);
|
*((uint*) variable)= (uint) getopt_ull_limit_value(value, optp);
|
||||||
break;
|
break;
|
||||||
case GET_ENUM:
|
case GET_ENUM:
|
||||||
*((uint*) variable)= (uint) value;
|
*((uint*) variable)= (uint) value;
|
||||||
@@ -881,7 +887,7 @@ static void init_one_value(const struct my_option *optp, uchar* *variable,
|
|||||||
*((long*) variable)= (long) getopt_ll_limit_value(value, optp);
|
*((long*) variable)= (long) getopt_ll_limit_value(value, optp);
|
||||||
break;
|
break;
|
||||||
case GET_ULONG:
|
case GET_ULONG:
|
||||||
*((ulong*) variable)= (ulong) getopt_ul_limit_value(value, optp);
|
*((ulong*) variable)= (ulong) getopt_ull_limit_value(value, optp);
|
||||||
break;
|
break;
|
||||||
case GET_LL:
|
case GET_LL:
|
||||||
*((longlong*) variable)= (longlong) getopt_ll_limit_value(value, optp);
|
*((longlong*) variable)= (longlong) getopt_ll_limit_value(value, optp);
|
||||||
|
@@ -32,3 +32,10 @@ char *llstr(longlong value,char *buff)
|
|||||||
longlong10_to_str(value,buff,-10);
|
longlong10_to_str(value,buff,-10);
|
||||||
return buff;
|
return buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *ullstr(longlong value,char *buff)
|
||||||
|
{
|
||||||
|
longlong10_to_str(value,buff,10);
|
||||||
|
return buff;
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user