Merge
This commit is contained in:
commit
656b0cc15a
@ -59,7 +59,7 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <violite.h>
|
#include <violite.h>
|
||||||
#include <regex.h> /* Our own version of lib */
|
#include "my_regex.h" /* Our own version of lib */
|
||||||
#ifdef HAVE_SYS_WAIT_H
|
#ifdef HAVE_SYS_WAIT_H
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#endif
|
#endif
|
||||||
@ -212,7 +212,7 @@ static int got_end_timer= FALSE;
|
|||||||
static void timer_output(void);
|
static void timer_output(void);
|
||||||
static ulonglong timer_now(void);
|
static ulonglong timer_now(void);
|
||||||
|
|
||||||
static regex_t ps_re; /* Holds precompiled re for valid PS statements */
|
static my_regex_t ps_re; /* Holds precompiled re for valid PS statements */
|
||||||
static void ps_init_re(void);
|
static void ps_init_re(void);
|
||||||
static int ps_match_re(char *);
|
static int ps_match_re(char *);
|
||||||
static char *ps_eprint(int);
|
static char *ps_eprint(int);
|
||||||
@ -3767,12 +3767,13 @@ static void ps_init_re(void)
|
|||||||
"[[:space:]]*UPDATE[[:space:]]+MULTI[[:space:]]|"
|
"[[:space:]]*UPDATE[[:space:]]+MULTI[[:space:]]|"
|
||||||
"[[:space:]]*INSERT[[:space:]]+SELECT[[:space:]])";
|
"[[:space:]]*INSERT[[:space:]]+SELECT[[:space:]])";
|
||||||
|
|
||||||
int err= regcomp(&ps_re, ps_re_str, (REG_EXTENDED | REG_ICASE | REG_NOSUB),
|
int err= my_regcomp(&ps_re, ps_re_str,
|
||||||
&my_charset_latin1);
|
(REG_EXTENDED | REG_ICASE | REG_NOSUB),
|
||||||
|
&my_charset_latin1);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
char erbuf[100];
|
char erbuf[100];
|
||||||
int len= regerror(err, &ps_re, erbuf, sizeof(erbuf));
|
int len= my_regerror(err, &ps_re, erbuf, sizeof(erbuf));
|
||||||
fprintf(stderr, "error %s, %d/%d `%s'\n",
|
fprintf(stderr, "error %s, %d/%d `%s'\n",
|
||||||
ps_eprint(err), len, (int)sizeof(erbuf), erbuf);
|
ps_eprint(err), len, (int)sizeof(erbuf), erbuf);
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -3782,7 +3783,7 @@ static void ps_init_re(void)
|
|||||||
|
|
||||||
static int ps_match_re(char *stmt_str)
|
static int ps_match_re(char *stmt_str)
|
||||||
{
|
{
|
||||||
int err= regexec(&ps_re, stmt_str, (size_t)0, NULL, 0);
|
int err= my_regexec(&ps_re, stmt_str, (size_t)0, NULL, 0);
|
||||||
|
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
return 1;
|
return 1;
|
||||||
@ -3791,7 +3792,7 @@ static int ps_match_re(char *stmt_str)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
char erbuf[100];
|
char erbuf[100];
|
||||||
int len= regerror(err, &ps_re, erbuf, sizeof(erbuf));
|
int len= my_regerror(err, &ps_re, erbuf, sizeof(erbuf));
|
||||||
fprintf(stderr, "error %s, %d/%d `%s'\n",
|
fprintf(stderr, "error %s, %d/%d `%s'\n",
|
||||||
ps_eprint(err), len, (int)sizeof(erbuf), erbuf);
|
ps_eprint(err), len, (int)sizeof(erbuf), erbuf);
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -3801,7 +3802,7 @@ static int ps_match_re(char *stmt_str)
|
|||||||
static char *ps_eprint(int err)
|
static char *ps_eprint(int err)
|
||||||
{
|
{
|
||||||
static char epbuf[100];
|
static char epbuf[100];
|
||||||
size_t len= regerror(REG_ITOA|err, (regex_t *)NULL, epbuf, sizeof(epbuf));
|
size_t len= my_regerror(REG_ITOA|err, (my_regex_t *)NULL, epbuf, sizeof(epbuf));
|
||||||
assert(len <= sizeof(epbuf));
|
assert(len <= sizeof(epbuf));
|
||||||
return(epbuf);
|
return(epbuf);
|
||||||
}
|
}
|
||||||
@ -3809,7 +3810,7 @@ static char *ps_eprint(int err)
|
|||||||
|
|
||||||
static void ps_free_reg(void)
|
static void ps_free_reg(void)
|
||||||
{
|
{
|
||||||
regfree(&ps_re);
|
my_regfree(&ps_re);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
@ -680,7 +680,8 @@ sub mtr_mysqladmin_shutdown {
|
|||||||
mtr_add_arg($args, "shutdown");
|
mtr_add_arg($args, "shutdown");
|
||||||
# We don't wait for termination of mysqladmin
|
# We don't wait for termination of mysqladmin
|
||||||
my $pid= mtr_spawn($::exe_mysqladmin, $args,
|
my $pid= mtr_spawn($::exe_mysqladmin, $args,
|
||||||
"", $::path_manager_log, $::path_manager_log, "");
|
"", $::path_manager_log, $::path_manager_log, "",
|
||||||
|
{ append_log_file => 1 });
|
||||||
$mysql_admin_pids{$pid}= 1;
|
$mysql_admin_pids{$pid}= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,37 +2,35 @@
|
|||||||
# -*- cperl -*-
|
# -*- cperl -*-
|
||||||
|
|
||||||
# This is a transformation of the "mysql-test-run" Bourne shell script
|
# This is a transformation of the "mysql-test-run" Bourne shell script
|
||||||
# to Perl. This is just an intermediate step, the goal is to rewrite
|
# to Perl. There are reasons this rewrite is not the prettiest Perl
|
||||||
# the Perl script to C. The complexity of the mysql-test-run script
|
# you have seen
|
||||||
# makes it a bit hard to write and debug it as a C program directly,
|
|
||||||
# so this is considered a prototype.
|
|
||||||
#
|
#
|
||||||
# Because of this the Perl coding style may in some cases look a bit
|
# - The original script is huge and for most part uncommented,
|
||||||
# funny. The rules used are
|
# not even a usage description of the flags.
|
||||||
#
|
#
|
||||||
# - The coding style is as close as possible to the C/C++ MySQL
|
# - There has been an attempt to write a replacement in C for the
|
||||||
# coding standard.
|
# original Bourne shell script. It was kind of working but lacked
|
||||||
|
# lot of functionality to really be a replacement. Not to redo
|
||||||
|
# that mistake and catch all the obscure features of the original
|
||||||
|
# script, the rewrite in Perl is more close to the original script
|
||||||
|
# meaning it also share some of the ugly parts as well.
|
||||||
#
|
#
|
||||||
# - Where NULL is to be returned, the undefined value is used.
|
# - The original intention was that this script was to be a prototype
|
||||||
|
# to be the base for a new C version with full functionality. Since
|
||||||
|
# then it was decided that the Perl version should replace the
|
||||||
|
# Bourne shell version, but the Perl style still reflects the wish
|
||||||
|
# to make the Perl to C step easy.
|
||||||
#
|
#
|
||||||
# - Regexp comparisons are simple and can be translated to strcmp
|
# Some coding style from the original intent has been kept
|
||||||
# and other string functions. To ease this transformation matching
|
|
||||||
# is done in the lib "lib/mtr_match.pl", i.e. regular expressions
|
|
||||||
# should be avoided in the main program.
|
|
||||||
#
|
#
|
||||||
# - The "unless" construct is not to be used. It is the same as "if !".
|
# - To make this Perl script easy to alter even for those that not
|
||||||
#
|
# code Perl that often, the coding style is as close as possible to
|
||||||
# - opendir/readdir/closedir is used instead of glob()/<*>.
|
# the C/C++ MySQL coding standard.
|
||||||
#
|
#
|
||||||
# - All lists of arguments to send to commands are Perl lists/arrays,
|
# - All lists of arguments to send to commands are Perl lists/arrays,
|
||||||
# not strings we append args to. Within reason, most string
|
# not strings we append args to. Within reason, most string
|
||||||
# concatenation for arguments should be avoided.
|
# concatenation for arguments should be avoided.
|
||||||
#
|
#
|
||||||
# - sprintf() is to be used, within reason, for all string creation.
|
|
||||||
# This mtr_add_arg() function is also based on sprintf(), i.e. you
|
|
||||||
# use a format string and put the variable argument in the argument
|
|
||||||
# list.
|
|
||||||
#
|
|
||||||
# - Functions defined in the main program are not to be prefixed,
|
# - Functions defined in the main program are not to be prefixed,
|
||||||
# functions in "library files" are to be prefixed with "mtr_" (for
|
# functions in "library files" are to be prefixed with "mtr_" (for
|
||||||
# Mysql-Test-Run). There are some exceptions, code that fits best in
|
# Mysql-Test-Run). There are some exceptions, code that fits best in
|
||||||
@ -476,6 +474,7 @@ sub command_line_setup () {
|
|||||||
# Read the command line
|
# Read the command line
|
||||||
# Note: Keep list, and the order, in sync with usage at end of this file
|
# Note: Keep list, and the order, in sync with usage at end of this file
|
||||||
|
|
||||||
|
Getopt::Long::Configure("pass_through");
|
||||||
GetOptions(
|
GetOptions(
|
||||||
# Control what engine/variation to run
|
# Control what engine/variation to run
|
||||||
'embedded-server' => \$opt_embedded_server,
|
'embedded-server' => \$opt_embedded_server,
|
||||||
@ -566,7 +565,21 @@ sub command_line_setup () {
|
|||||||
usage("");
|
usage("");
|
||||||
}
|
}
|
||||||
|
|
||||||
@opt_cases= @ARGV;
|
foreach my $arg ( @ARGV )
|
||||||
|
{
|
||||||
|
if ( $arg =~ /^--skip-/ )
|
||||||
|
{
|
||||||
|
push(@opt_extra_mysqld_opt, $arg);
|
||||||
|
}
|
||||||
|
elsif ( $arg =~ /^-/ )
|
||||||
|
{
|
||||||
|
usage("Invalid option \"$arg\"");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
push(@opt_cases, $arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Set the "var/" directory, as it is the base for everything else
|
# Set the "var/" directory, as it is the base for everything else
|
||||||
@ -755,78 +768,96 @@ sub command_line_setup () {
|
|||||||
|
|
||||||
# Put this into a hash, will be a C struct
|
# Put this into a hash, will be a C struct
|
||||||
|
|
||||||
$master->[0]->{'path_myddir'}= "$opt_vardir/master-data";
|
$master->[0]=
|
||||||
$master->[0]->{'path_myerr'}= "$opt_vardir/log/master.err";
|
{
|
||||||
$master->[0]->{'path_mylog'}= "$opt_vardir/log/master.log";
|
path_myddir => "$opt_vardir/master-data",
|
||||||
$master->[0]->{'path_mypid'}= "$opt_vardir/run/master.pid";
|
path_myerr => "$opt_vardir/log/master.err",
|
||||||
$master->[0]->{'path_mysock'}= "$opt_tmpdir/master.sock";
|
path_mylog => "$opt_vardir/log/master.log",
|
||||||
$master->[0]->{'path_myport'}= $opt_master_myport;
|
path_mypid => "$opt_vardir/run/master.pid",
|
||||||
$master->[0]->{'start_timeout'}= 400; # enough time create innodb tables
|
path_mysock => "$opt_tmpdir/master.sock",
|
||||||
|
path_myport => $opt_master_myport,
|
||||||
|
start_timeout => 400, # enough time create innodb tables
|
||||||
|
|
||||||
$master->[0]->{'ndbcluster'}= 1; # ndbcluster not started
|
ndbcluster => 1, # ndbcluster not started
|
||||||
|
};
|
||||||
|
|
||||||
$master->[1]->{'path_myddir'}= "$opt_vardir/master1-data";
|
$master->[1]=
|
||||||
$master->[1]->{'path_myerr'}= "$opt_vardir/log/master1.err";
|
{
|
||||||
$master->[1]->{'path_mylog'}= "$opt_vardir/log/master1.log";
|
path_myddir => "$opt_vardir/master1-data",
|
||||||
$master->[1]->{'path_mypid'}= "$opt_vardir/run/master1.pid";
|
path_myerr => "$opt_vardir/log/master1.err",
|
||||||
$master->[1]->{'path_mysock'}= "$opt_tmpdir/master1.sock";
|
path_mylog => "$opt_vardir/log/master1.log",
|
||||||
$master->[1]->{'path_myport'}= $opt_master_myport + 1;
|
path_mypid => "$opt_vardir/run/master1.pid",
|
||||||
$master->[1]->{'start_timeout'}= 400; # enough time create innodb tables
|
path_mysock => "$opt_tmpdir/master1.sock",
|
||||||
|
path_myport => $opt_master_myport + 1,
|
||||||
|
start_timeout => 400, # enough time create innodb tables
|
||||||
|
};
|
||||||
|
|
||||||
$slave->[0]->{'path_myddir'}= "$opt_vardir/slave-data";
|
$slave->[0]=
|
||||||
$slave->[0]->{'path_myerr'}= "$opt_vardir/log/slave.err";
|
{
|
||||||
$slave->[0]->{'path_mylog'}= "$opt_vardir/log/slave.log";
|
path_myddir => "$opt_vardir/slave-data",
|
||||||
$slave->[0]->{'path_mypid'}= "$opt_vardir/run/slave.pid";
|
path_myerr => "$opt_vardir/log/slave.err",
|
||||||
$slave->[0]->{'path_mysock'}= "$opt_tmpdir/slave.sock";
|
path_mylog => "$opt_vardir/log/slave.log",
|
||||||
$slave->[0]->{'path_myport'}= $opt_slave_myport;
|
path_mypid => "$opt_vardir/run/slave.pid",
|
||||||
$slave->[0]->{'start_timeout'}= 400;
|
path_mysock => "$opt_tmpdir/slave.sock",
|
||||||
|
path_myport => $opt_slave_myport,
|
||||||
|
start_timeout => 400,
|
||||||
|
};
|
||||||
|
|
||||||
$slave->[1]->{'path_myddir'}= "$opt_vardir/slave1-data";
|
$slave->[1]=
|
||||||
$slave->[1]->{'path_myerr'}= "$opt_vardir/log/slave1.err";
|
{
|
||||||
$slave->[1]->{'path_mylog'}= "$opt_vardir/log/slave1.log";
|
path_myddir => "$opt_vardir/slave1-data",
|
||||||
$slave->[1]->{'path_mypid'}= "$opt_vardir/run/slave1.pid";
|
path_myerr => "$opt_vardir/log/slave1.err",
|
||||||
$slave->[1]->{'path_mysock'}= "$opt_tmpdir/slave1.sock";
|
path_mylog => "$opt_vardir/log/slave1.log",
|
||||||
$slave->[1]->{'path_myport'}= $opt_slave_myport + 1;
|
path_mypid => "$opt_vardir/run/slave1.pid",
|
||||||
$slave->[1]->{'start_timeout'}= 300;
|
path_mysock => "$opt_tmpdir/slave1.sock",
|
||||||
|
path_myport => $opt_slave_myport + 1,
|
||||||
|
start_timeout => 300,
|
||||||
|
};
|
||||||
|
|
||||||
$slave->[2]->{'path_myddir'}= "$opt_vardir/slave2-data";
|
$slave->[2]=
|
||||||
$slave->[2]->{'path_myerr'}= "$opt_vardir/log/slave2.err";
|
{
|
||||||
$slave->[2]->{'path_mylog'}= "$opt_vardir/log/slave2.log";
|
path_myddir => "$opt_vardir/slave2-data",
|
||||||
$slave->[2]->{'path_mypid'}= "$opt_vardir/run/slave2.pid";
|
path_myerr => "$opt_vardir/log/slave2.err",
|
||||||
$slave->[2]->{'path_mysock'}= "$opt_tmpdir/slave2.sock";
|
path_mylog => "$opt_vardir/log/slave2.log",
|
||||||
$slave->[2]->{'path_myport'}= $opt_slave_myport + 2;
|
path_mypid => "$opt_vardir/run/slave2.pid",
|
||||||
$slave->[2]->{'start_timeout'}= 300;
|
path_mysock => "$opt_tmpdir/slave2.sock",
|
||||||
|
path_myport => $opt_slave_myport + 2,
|
||||||
|
start_timeout => 300,
|
||||||
|
};
|
||||||
|
|
||||||
$instance_manager->{'path_err'}= "$opt_vardir/log/im.err";
|
$instance_manager=
|
||||||
$instance_manager->{'path_log'}= "$opt_vardir/log/im.log";
|
{
|
||||||
$instance_manager->{'path_pid'}= "$opt_vardir/run/im.pid";
|
path_err => "$opt_vardir/log/im.err",
|
||||||
$instance_manager->{'path_sock'}= "$opt_tmpdir/im.sock";
|
path_log => "$opt_vardir/log/im.log",
|
||||||
$instance_manager->{'port'}= $im_port;
|
path_pid => "$opt_vardir/run/im.pid",
|
||||||
$instance_manager->{'start_timeout'}= $master->[0]->{'start_timeout'};
|
path_sock => "$opt_tmpdir/im.sock",
|
||||||
$instance_manager->{'admin_login'}= 'im_admin';
|
port => $im_port,
|
||||||
$instance_manager->{'admin_password'}= 'im_admin_secret';
|
start_timeout => $master->[0]->{'start_timeout'},
|
||||||
$instance_manager->{'admin_sha1'}= '*598D51AD2DFF7792045D6DF3DDF9AA1AF737B295';
|
admin_login => 'im_admin',
|
||||||
$instance_manager->{'password_file'}= "$opt_vardir/im.passwd";
|
admin_password => 'im_admin_secret',
|
||||||
$instance_manager->{'defaults_file'}= "$opt_vardir/im.cnf";
|
admin_sha1 => '*598D51AD2DFF7792045D6DF3DDF9AA1AF737B295',
|
||||||
|
password_file => "$opt_vardir/im.passwd",
|
||||||
$instance_manager->{'instances'}->[0]->{'server_id'}= 1;
|
defaults_file => "$opt_vardir/im.cnf",
|
||||||
$instance_manager->{'instances'}->[0]->{'port'}= $im_mysqld1_port;
|
};
|
||||||
$instance_manager->{'instances'}->[0]->{'path_datadir'}=
|
|
||||||
"$opt_vardir/im_mysqld_1.data";
|
|
||||||
$instance_manager->{'instances'}->[0]->{'path_sock'}=
|
|
||||||
"$opt_vardir/mysqld_1.sock";
|
|
||||||
$instance_manager->{'instances'}->[0]->{'path_pid'}=
|
|
||||||
"$opt_vardir/mysqld_1.pid";
|
|
||||||
|
|
||||||
$instance_manager->{'instances'}->[1]->{'server_id'}= 2;
|
$instance_manager->{'instances'}->[0]=
|
||||||
$instance_manager->{'instances'}->[1]->{'port'}= $im_mysqld2_port;
|
{
|
||||||
$instance_manager->{'instances'}->[1]->{'path_datadir'}=
|
server_id => 1,
|
||||||
"$opt_vardir/im_mysqld_2.data";
|
port => $im_mysqld1_port,
|
||||||
$instance_manager->{'instances'}->[1]->{'path_sock'}=
|
path_datadir => "$opt_vardir/im_mysqld_1.data",
|
||||||
"$opt_vardir/mysqld_2.sock";
|
path_sock => "$opt_vardir/mysqld_1.sock",
|
||||||
$instance_manager->{'instances'}->[1]->{'path_pid'}=
|
path_pid => "$opt_vardir/mysqld_1.pid",
|
||||||
"$opt_vardir/mysqld_2.pid";
|
};
|
||||||
$instance_manager->{'instances'}->[1]->{'nonguarded'}= 1;
|
|
||||||
|
$instance_manager->{'instances'}->[1]=
|
||||||
|
{
|
||||||
|
server_id => 2,
|
||||||
|
port => $im_mysqld2_port,
|
||||||
|
path_datadir => "$opt_vardir/im_mysqld_2.data",
|
||||||
|
path_sock => "$opt_vardir/mysqld_2.sock",
|
||||||
|
path_pid => "$opt_vardir/mysqld_2.pid",
|
||||||
|
nonguarded => 1,
|
||||||
|
};
|
||||||
|
|
||||||
if ( $opt_extern )
|
if ( $opt_extern )
|
||||||
{
|
{
|
||||||
@ -2137,7 +2168,8 @@ sub mysqld_start ($$$$) {
|
|||||||
{
|
{
|
||||||
if ( $pid= mtr_spawn($exe, $args, "",
|
if ( $pid= mtr_spawn($exe, $args, "",
|
||||||
$master->[$idx]->{'path_myerr'},
|
$master->[$idx]->{'path_myerr'},
|
||||||
$master->[$idx]->{'path_myerr'}, "",
|
$master->[$idx]->{'path_myerr'},
|
||||||
|
"",
|
||||||
{ append_log_file => 1 }) )
|
{ append_log_file => 1 }) )
|
||||||
{
|
{
|
||||||
return sleep_until_file_created($master->[$idx]->{'path_mypid'},
|
return sleep_until_file_created($master->[$idx]->{'path_mypid'},
|
||||||
@ -2149,7 +2181,8 @@ sub mysqld_start ($$$$) {
|
|||||||
{
|
{
|
||||||
if ( $pid= mtr_spawn($exe, $args, "",
|
if ( $pid= mtr_spawn($exe, $args, "",
|
||||||
$slave->[$idx]->{'path_myerr'},
|
$slave->[$idx]->{'path_myerr'},
|
||||||
$slave->[$idx]->{'path_myerr'}, "",
|
$slave->[$idx]->{'path_myerr'},
|
||||||
|
"",
|
||||||
{ append_log_file => 1 }) )
|
{ append_log_file => 1 }) )
|
||||||
{
|
{
|
||||||
return sleep_until_file_created($slave->[$idx]->{'path_mypid'},
|
return sleep_until_file_created($slave->[$idx]->{'path_mypid'},
|
||||||
|
@ -12,7 +12,7 @@ group client_global_pch =
|
|||||||
'm_ctype.h', 'mysqld_error.h',
|
'm_ctype.h', 'mysqld_error.h',
|
||||||
'my_list.h', 'my_sys.h', 'my_net.h',
|
'my_list.h', 'my_sys.h', 'my_net.h',
|
||||||
'myisam.h', 'myisampack.h', '.\myisam\myisamdef.h',
|
'myisam.h', 'myisampack.h', '.\myisam\myisamdef.h',
|
||||||
'.\regex\regex.h'
|
'.\regex\my_regex.h'
|
||||||
|
|
||||||
group server_global_pch =
|
group server_global_pch =
|
||||||
'os2.h',
|
'os2.h',
|
||||||
@ -38,7 +38,7 @@ group server_global_pch =
|
|||||||
'my_tree.h', '..\mysys\my_static.h', 'netdb.h',
|
'my_tree.h', '..\mysys\my_static.h', 'netdb.h',
|
||||||
'thr_alarm.h', 'heap.h', '..\myisam\fulltext.h',
|
'thr_alarm.h', 'heap.h', '..\myisam\fulltext.h',
|
||||||
'..\myisam\ftdefs.h', 'myisammrg.h',
|
'..\myisam\ftdefs.h', 'myisammrg.h',
|
||||||
'.\regex\regex.h'
|
'.\regex\my_regex.h'
|
||||||
|
|
||||||
group server_pch =
|
group server_pch =
|
||||||
'ha_heap.h', 'ha_myisammrg.h', 'opt_ft.h',
|
'ha_heap.h', 'ha_myisammrg.h', 'opt_ft.h',
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
|
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
|
||||||
noinst_LIBRARIES = libregex.a
|
noinst_LIBRARIES = libregex.a
|
||||||
LDADD= libregex.a $(top_builddir)/strings/libmystrings.a
|
LDADD= libregex.a $(top_builddir)/strings/libmystrings.a
|
||||||
noinst_HEADERS = cclass.h cname.h regex2.h utils.h engine.c regex.h
|
noinst_HEADERS = cclass.h cname.h regex2.h utils.h engine.c my_regex.h
|
||||||
libregex_a_SOURCES = regerror.c regcomp.c regexec.c regfree.c reginit.c
|
libregex_a_SOURCES = regerror.c regcomp.c regexec.c regfree.c reginit.c
|
||||||
noinst_PROGRAMS = re
|
noinst_PROGRAMS = re
|
||||||
re_SOURCES = split.c debug.c main.c
|
re_SOURCES = split.c debug.c main.c
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <regex.h>
|
|
||||||
|
#include "my_regex.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "regex2.h"
|
#include "regex2.h"
|
||||||
#include "debug.ih"
|
#include "debug.ih"
|
||||||
@ -15,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
regprint(r, d)
|
regprint(r, d)
|
||||||
regex_t *r;
|
my_regex_t *r;
|
||||||
FILE *d;
|
FILE *d;
|
||||||
{
|
{
|
||||||
register struct re_guts *g = r->re_g;
|
register struct re_guts *g = r->re_g;
|
||||||
|
@ -4,7 +4,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* === debug.c === */
|
/* === debug.c === */
|
||||||
void regprint(regex_t *r, FILE *d);
|
void regprint(my_regex_t *r, FILE *d);
|
||||||
static void s_print(CHARSET_INFO *charset, register struct re_guts *g, FILE *d);
|
static void s_print(CHARSET_INFO *charset, register struct re_guts *g, FILE *d);
|
||||||
static char *regchar(CHARSET_INFO *charset, int ch,char *buf);
|
static char *regchar(CHARSET_INFO *charset, int ch,char *buf);
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
struct match {
|
struct match {
|
||||||
struct re_guts *g;
|
struct re_guts *g;
|
||||||
int eflags;
|
int eflags;
|
||||||
regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
|
my_regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
|
||||||
char *offp; /* offsets work from here */
|
char *offp; /* offsets work from here */
|
||||||
char *beginp; /* start of string -- virtual NUL precedes */
|
char *beginp; /* start of string -- virtual NUL precedes */
|
||||||
char *endp; /* end of string -- virtual NUL here */
|
char *endp; /* end of string -- virtual NUL here */
|
||||||
@ -68,7 +68,7 @@ CHARSET_INFO *charset;
|
|||||||
register struct re_guts *g;
|
register struct re_guts *g;
|
||||||
char *str;
|
char *str;
|
||||||
size_t nmatch;
|
size_t nmatch;
|
||||||
regmatch_t pmatch[];
|
my_regmatch_t pmatch[];
|
||||||
int eflags;
|
int eflags;
|
||||||
{
|
{
|
||||||
register char *endp;
|
register char *endp;
|
||||||
@ -148,8 +148,8 @@ int eflags;
|
|||||||
|
|
||||||
/* oh my, he wants the subexpressions... */
|
/* oh my, he wants the subexpressions... */
|
||||||
if (m->pmatch == NULL)
|
if (m->pmatch == NULL)
|
||||||
m->pmatch = (regmatch_t *)malloc((m->g->nsub + 1) *
|
m->pmatch = (my_regmatch_t *)malloc((m->g->nsub + 1) *
|
||||||
sizeof(regmatch_t));
|
sizeof(my_regmatch_t));
|
||||||
if (m->pmatch == NULL) {
|
if (m->pmatch == NULL) {
|
||||||
if (m->lastpos != NULL)
|
if (m->lastpos != NULL)
|
||||||
free((char *)m->lastpos);
|
free((char *)m->lastpos);
|
||||||
|
@ -4,7 +4,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* === engine.c === */
|
/* === engine.c === */
|
||||||
static int matcher(CHARSET_INFO *charset,register struct re_guts *g, char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
|
static int matcher(CHARSET_INFO *charset,register struct re_guts *g, char *string, size_t nmatch, my_regmatch_t pmatch[], int eflags);
|
||||||
static char *dissect(CHARSET_INFO *charset,register struct match *m, char *start, char *stop, sopno startst, sopno stopst);
|
static char *dissect(CHARSET_INFO *charset,register struct match *m, char *start, char *stop, sopno startst, sopno stopst);
|
||||||
static char *backref(CHARSET_INFO *charset, register struct match *m, char *start, char *stop, sopno startst, sopno stopst, sopno lev);
|
static char *backref(CHARSET_INFO *charset, register struct match *m, char *start, char *stop, sopno startst, sopno stopst, sopno lev);
|
||||||
static char *fast(CHARSET_INFO *charset, register struct match *m, char *start, char *stop, sopno startst, sopno stopst);
|
static char *fast(CHARSET_INFO *charset, register struct match *m, char *start, char *stop, sopno startst, sopno stopst);
|
||||||
|
52
regex/main.c
52
regex/main.c
@ -1,9 +1,9 @@
|
|||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <regex.h>
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include "my_regex.h"
|
||||||
#include "main.ih"
|
#include "main.ih"
|
||||||
|
|
||||||
char *progname;
|
char *progname;
|
||||||
@ -27,9 +27,9 @@ int main(argc, argv)
|
|||||||
int argc;
|
int argc;
|
||||||
char *argv[];
|
char *argv[];
|
||||||
{
|
{
|
||||||
regex_t re;
|
my_regex_t re;
|
||||||
# define NS 10
|
# define NS 10
|
||||||
regmatch_t subs[NS];
|
my_regmatch_t subs[NS];
|
||||||
char erbuf[100];
|
char erbuf[100];
|
||||||
int err;
|
int err;
|
||||||
size_t len;
|
size_t len;
|
||||||
@ -74,9 +74,9 @@ char *argv[];
|
|||||||
exit(status);
|
exit(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
err = regcomp(&re, argv[optind++], copts, &my_charset_latin1);
|
err = my_regcomp(&re, argv[optind++], copts, &my_charset_latin1);
|
||||||
if (err) {
|
if (err) {
|
||||||
len = regerror(err, &re, erbuf, sizeof(erbuf));
|
len = my_regerror(err, &re, erbuf, sizeof(erbuf));
|
||||||
fprintf(stderr, "error %s, %d/%d `%s'\n",
|
fprintf(stderr, "error %s, %d/%d `%s'\n",
|
||||||
eprint(err), (int) len, (int) sizeof(erbuf), erbuf);
|
eprint(err), (int) len, (int) sizeof(erbuf), erbuf);
|
||||||
exit(status);
|
exit(status);
|
||||||
@ -84,7 +84,7 @@ char *argv[];
|
|||||||
regprint(&re, stdout);
|
regprint(&re, stdout);
|
||||||
|
|
||||||
if (optind >= argc) {
|
if (optind >= argc) {
|
||||||
regfree(&re);
|
my_regfree(&re);
|
||||||
exit(status);
|
exit(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,9 +92,9 @@ char *argv[];
|
|||||||
subs[0].rm_so = startoff;
|
subs[0].rm_so = startoff;
|
||||||
subs[0].rm_eo = strlen(argv[optind]) - endoff;
|
subs[0].rm_eo = strlen(argv[optind]) - endoff;
|
||||||
}
|
}
|
||||||
err = regexec(&re, argv[optind], (size_t)NS, subs, eopts);
|
err = my_regexec(&re, argv[optind], (size_t)NS, subs, eopts);
|
||||||
if (err) {
|
if (err) {
|
||||||
len = regerror(err, &re, erbuf, sizeof(erbuf));
|
len = my_regerror(err, &re, erbuf, sizeof(erbuf));
|
||||||
fprintf(stderr, "error %s, %d/%d `%s'\n",
|
fprintf(stderr, "error %s, %d/%d `%s'\n",
|
||||||
eprint(err), (int) len, (int) sizeof(erbuf), erbuf);
|
eprint(err), (int) len, (int) sizeof(erbuf), erbuf);
|
||||||
exit(status);
|
exit(status);
|
||||||
@ -136,7 +136,7 @@ FILE *in;
|
|||||||
const char *badpat = "invalid regular expression";
|
const char *badpat = "invalid regular expression";
|
||||||
# define SHORT 10
|
# define SHORT 10
|
||||||
const char *bpname = "REG_BADPAT";
|
const char *bpname = "REG_BADPAT";
|
||||||
regex_t re;
|
my_regex_t re;
|
||||||
|
|
||||||
while (fgets(inbuf, sizeof(inbuf), in) != NULL) {
|
while (fgets(inbuf, sizeof(inbuf), in) != NULL) {
|
||||||
line++;
|
line++;
|
||||||
@ -163,27 +163,27 @@ FILE *in;
|
|||||||
options('c', f[1]) &~ REG_EXTENDED);
|
options('c', f[1]) &~ REG_EXTENDED);
|
||||||
}
|
}
|
||||||
|
|
||||||
ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf));
|
ne = my_regerror(REG_BADPAT, (my_regex_t *)NULL, erbuf, sizeof(erbuf));
|
||||||
if (strcmp(erbuf, badpat) != 0 || ne != strlen(badpat)+1) {
|
if (strcmp(erbuf, badpat) != 0 || ne != strlen(badpat)+1) {
|
||||||
fprintf(stderr, "end: regerror() test gave `%s' not `%s'\n",
|
fprintf(stderr, "end: regerror() test gave `%s' not `%s'\n",
|
||||||
erbuf, badpat);
|
erbuf, badpat);
|
||||||
status = 1;
|
status = 1;
|
||||||
}
|
}
|
||||||
ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, (size_t)SHORT);
|
ne = my_regerror(REG_BADPAT, (my_regex_t *)NULL, erbuf, (size_t)SHORT);
|
||||||
if (strncmp(erbuf, badpat, SHORT-1) != 0 || erbuf[SHORT-1] != '\0' ||
|
if (strncmp(erbuf, badpat, SHORT-1) != 0 || erbuf[SHORT-1] != '\0' ||
|
||||||
ne != strlen(badpat)+1) {
|
ne != strlen(badpat)+1) {
|
||||||
fprintf(stderr, "end: regerror() short test gave `%s' not `%.*s'\n",
|
fprintf(stderr, "end: regerror() short test gave `%s' not `%.*s'\n",
|
||||||
erbuf, SHORT-1, badpat);
|
erbuf, SHORT-1, badpat);
|
||||||
status = 1;
|
status = 1;
|
||||||
}
|
}
|
||||||
ne = regerror(REG_ITOA|REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf));
|
ne = my_regerror(REG_ITOA|REG_BADPAT, (my_regex_t *)NULL, erbuf, sizeof(erbuf));
|
||||||
if (strcmp(erbuf, bpname) != 0 || ne != strlen(bpname)+1) {
|
if (strcmp(erbuf, bpname) != 0 || ne != strlen(bpname)+1) {
|
||||||
fprintf(stderr, "end: regerror() ITOA test gave `%s' not `%s'\n",
|
fprintf(stderr, "end: regerror() ITOA test gave `%s' not `%s'\n",
|
||||||
erbuf, bpname);
|
erbuf, bpname);
|
||||||
status = 1;
|
status = 1;
|
||||||
}
|
}
|
||||||
re.re_endp = bpname;
|
re.re_endp = bpname;
|
||||||
ne = regerror(REG_ATOI, &re, erbuf, sizeof(erbuf));
|
ne = my_regerror(REG_ATOI, &re, erbuf, sizeof(erbuf));
|
||||||
if (atoi(erbuf) != (int)REG_BADPAT) {
|
if (atoi(erbuf) != (int)REG_BADPAT) {
|
||||||
fprintf(stderr, "end: regerror() ATOI test gave `%s' not `%ld'\n",
|
fprintf(stderr, "end: regerror() ATOI test gave `%s' not `%ld'\n",
|
||||||
erbuf, (long)REG_BADPAT);
|
erbuf, (long)REG_BADPAT);
|
||||||
@ -208,9 +208,9 @@ char *f3;
|
|||||||
char *f4;
|
char *f4;
|
||||||
int opts; /* may not match f1 */
|
int opts; /* may not match f1 */
|
||||||
{
|
{
|
||||||
regex_t re;
|
my_regex_t re;
|
||||||
# define NSUBS 10
|
# define NSUBS 10
|
||||||
regmatch_t subs[NSUBS];
|
my_regmatch_t subs[NSUBS];
|
||||||
# define NSHOULD 15
|
# define NSHOULD 15
|
||||||
char *should[NSHOULD];
|
char *should[NSHOULD];
|
||||||
int nshould;
|
int nshould;
|
||||||
@ -226,10 +226,10 @@ int opts; /* may not match f1 */
|
|||||||
strcpy(f0copy, f0);
|
strcpy(f0copy, f0);
|
||||||
re.re_endp = (opts®_PEND) ? f0copy + strlen(f0copy) : NULL;
|
re.re_endp = (opts®_PEND) ? f0copy + strlen(f0copy) : NULL;
|
||||||
fixstr(f0copy);
|
fixstr(f0copy);
|
||||||
err = regcomp(&re, f0copy, opts, &my_charset_latin1);
|
err = my_regcomp(&re, f0copy, opts, &my_charset_latin1);
|
||||||
if (err != 0 && (!opt('C', f1) || err != efind(f2))) {
|
if (err != 0 && (!opt('C', f1) || err != efind(f2))) {
|
||||||
/* unexpected error or wrong error */
|
/* unexpected error or wrong error */
|
||||||
len = regerror(err, &re, erbuf, sizeof(erbuf));
|
len = my_regerror(err, &re, erbuf, sizeof(erbuf));
|
||||||
fprintf(stderr, "%d: %s error %s, %d/%d `%s'\n",
|
fprintf(stderr, "%d: %s error %s, %d/%d `%s'\n",
|
||||||
line, type, eprint(err), len,
|
line, type, eprint(err), len,
|
||||||
(int) sizeof(erbuf), erbuf);
|
(int) sizeof(erbuf), erbuf);
|
||||||
@ -243,7 +243,7 @@ int opts; /* may not match f1 */
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
regfree(&re);
|
my_regfree(&re);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,11 +256,11 @@ int opts; /* may not match f1 */
|
|||||||
subs[0].rm_so = strchr(f2, '(') - f2 + 1;
|
subs[0].rm_so = strchr(f2, '(') - f2 + 1;
|
||||||
subs[0].rm_eo = strchr(f2, ')') - f2;
|
subs[0].rm_eo = strchr(f2, ')') - f2;
|
||||||
}
|
}
|
||||||
err = regexec(&re, f2copy, NSUBS, subs, options('e', f1));
|
err = my_regexec(&re, f2copy, NSUBS, subs, options('e', f1));
|
||||||
|
|
||||||
if (err != 0 && (f3 != NULL || err != REG_NOMATCH)) {
|
if (err != 0 && (f3 != NULL || err != REG_NOMATCH)) {
|
||||||
/* unexpected error or wrong error */
|
/* unexpected error or wrong error */
|
||||||
len = regerror(err, &re, erbuf, sizeof(erbuf));
|
len = my_regerror(err, &re, erbuf, sizeof(erbuf));
|
||||||
fprintf(stderr, "%d: %s exec error %s, %d/%d `%s'\n",
|
fprintf(stderr, "%d: %s exec error %s, %d/%d `%s'\n",
|
||||||
line, type, eprint(err), len,
|
line, type, eprint(err), len,
|
||||||
(int) sizeof(erbuf), erbuf);
|
(int) sizeof(erbuf), erbuf);
|
||||||
@ -282,7 +282,7 @@ int opts; /* may not match f1 */
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (err != 0 || f4 == NULL) {
|
if (err != 0 || f4 == NULL) {
|
||||||
regfree(&re);
|
my_regfree(&re);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,7 +303,7 @@ int opts; /* may not match f1 */
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
regfree(&re);
|
my_regfree(&re);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -404,7 +404,7 @@ register char *p;
|
|||||||
char * /* NULL or complaint */
|
char * /* NULL or complaint */
|
||||||
check(str, sub, should)
|
check(str, sub, should)
|
||||||
char *str;
|
char *str;
|
||||||
regmatch_t sub;
|
my_regmatch_t sub;
|
||||||
char *should;
|
char *should;
|
||||||
{
|
{
|
||||||
register int len;
|
register int len;
|
||||||
@ -485,7 +485,7 @@ int err;
|
|||||||
static char epbuf[100];
|
static char epbuf[100];
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
len = regerror(REG_ITOA|err, (regex_t *)NULL, epbuf, sizeof(epbuf));
|
len = my_regerror(REG_ITOA|err, (my_regex_t *)NULL, epbuf, sizeof(epbuf));
|
||||||
assert(len <= sizeof(epbuf));
|
assert(len <= sizeof(epbuf));
|
||||||
return(epbuf);
|
return(epbuf);
|
||||||
}
|
}
|
||||||
@ -499,11 +499,11 @@ efind(name)
|
|||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
static char efbuf[100];
|
static char efbuf[100];
|
||||||
regex_t re;
|
my_regex_t re;
|
||||||
|
|
||||||
sprintf(efbuf, "REG_%s", name);
|
sprintf(efbuf, "REG_%s", name);
|
||||||
assert(strlen(efbuf) < sizeof(efbuf));
|
assert(strlen(efbuf) < sizeof(efbuf));
|
||||||
re.re_endp = efbuf;
|
re.re_endp = efbuf;
|
||||||
(void) regerror(REG_ATOI, &re, efbuf, sizeof(efbuf));
|
(void) my_regerror(REG_ATOI, &re, efbuf, sizeof(efbuf));
|
||||||
return(atoi(efbuf));
|
return(atoi(efbuf));
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ void rx_try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts);
|
|||||||
int options(int type, char *s);
|
int options(int type, char *s);
|
||||||
int opt(int c, char *s);
|
int opt(int c, char *s);
|
||||||
void fixstr(register char *p);
|
void fixstr(register char *p);
|
||||||
char *check(char *str, regmatch_t sub, char *should);
|
char *check(char *str, my_regmatch_t sub, char *should);
|
||||||
static char *eprint(int err);
|
static char *eprint(int err);
|
||||||
static int efind(char *name);
|
static int efind(char *name);
|
||||||
|
|
||||||
|
@ -20,15 +20,15 @@ typedef struct {
|
|||||||
const char *re_endp; /* end pointer for REG_PEND */
|
const char *re_endp; /* end pointer for REG_PEND */
|
||||||
struct re_guts *re_g; /* none of your business :-) */
|
struct re_guts *re_g; /* none of your business :-) */
|
||||||
CHARSET_INFO *charset; /* For ctype things */
|
CHARSET_INFO *charset; /* For ctype things */
|
||||||
} regex_t;
|
} my_regex_t;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
regoff_t rm_so; /* start of match */
|
regoff_t rm_so; /* start of match */
|
||||||
regoff_t rm_eo; /* end of match */
|
regoff_t rm_eo; /* end of match */
|
||||||
} regmatch_t;
|
} my_regmatch_t;
|
||||||
|
|
||||||
|
|
||||||
/* === regcomp.c === */
|
/* === regcomp.c === */
|
||||||
extern int regcomp(regex_t *, const char *, int, CHARSET_INFO *charset);
|
extern int my_regcomp(my_regex_t *, const char *, int, CHARSET_INFO *charset);
|
||||||
#define REG_BASIC 0000
|
#define REG_BASIC 0000
|
||||||
#define REG_EXTENDED 0001
|
#define REG_EXTENDED 0001
|
||||||
#define REG_ICASE 0002
|
#define REG_ICASE 0002
|
||||||
@ -58,11 +58,11 @@ extern int regcomp(regex_t *, const char *, int, CHARSET_INFO *charset);
|
|||||||
#define REG_INVARG 16
|
#define REG_INVARG 16
|
||||||
#define REG_ATOI 255 /* convert name to number (!) */
|
#define REG_ATOI 255 /* convert name to number (!) */
|
||||||
#define REG_ITOA 0400 /* convert number to name (!) */
|
#define REG_ITOA 0400 /* convert number to name (!) */
|
||||||
extern size_t regerror(int, const regex_t *, char *, size_t);
|
extern size_t my_regerror(int, const my_regex_t *, char *, size_t);
|
||||||
|
|
||||||
|
|
||||||
/* === regexec.c === */
|
/* === regexec.c === */
|
||||||
extern int regexec(const regex_t *, const char *, size_t, regmatch_t [], int);
|
extern int my_regexec(const my_regex_t *, const char *, size_t, my_regmatch_t [], int);
|
||||||
#define REG_NOTBOL 00001
|
#define REG_NOTBOL 00001
|
||||||
#define REG_NOTEOL 00002
|
#define REG_NOTEOL 00002
|
||||||
#define REG_STARTEND 00004
|
#define REG_STARTEND 00004
|
||||||
@ -72,12 +72,12 @@ extern int regexec(const regex_t *, const char *, size_t, regmatch_t [], int);
|
|||||||
|
|
||||||
|
|
||||||
/* === regfree.c === */
|
/* === regfree.c === */
|
||||||
extern void regfree(regex_t *);
|
extern void my_regfree(my_regex_t *);
|
||||||
|
|
||||||
/* === reginit.c === */
|
/* === reginit.c === */
|
||||||
|
|
||||||
extern void regex_init(CHARSET_INFO *cs); /* Should be called for multithread progs */
|
extern void my_regex_init(CHARSET_INFO *cs); /* Should be called for multithread progs */
|
||||||
extern void regex_end(void); /* If one wants a clean end */
|
extern void my_regex_end(void); /* If one wants a clean end */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
@ -1,11 +1,11 @@
|
|||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
#include <regex.h>
|
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "my_regex.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "regex2.h"
|
#include "regex2.h"
|
||||||
|
|
||||||
@ -100,8 +100,8 @@ static int never = 0; /* for use in asserts; shuts lint up */
|
|||||||
= #define REG_DUMP 0200
|
= #define REG_DUMP 0200
|
||||||
*/
|
*/
|
||||||
int /* 0 success, otherwise REG_something */
|
int /* 0 success, otherwise REG_something */
|
||||||
regcomp(preg, pattern, cflags, charset)
|
my_regcomp(preg, pattern, cflags, charset)
|
||||||
regex_t *preg;
|
my_regex_t *preg;
|
||||||
const char *pattern;
|
const char *pattern;
|
||||||
int cflags;
|
int cflags;
|
||||||
CHARSET_INFO *charset;
|
CHARSET_INFO *charset;
|
||||||
@ -117,7 +117,7 @@ CHARSET_INFO *charset;
|
|||||||
# define GOODFLAGS(f) ((f)&~REG_DUMP)
|
# define GOODFLAGS(f) ((f)&~REG_DUMP)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
regex_init(charset); /* Init cclass if neaded */
|
my_regex_init(charset); /* Init cclass if neaded */
|
||||||
preg->charset=charset;
|
preg->charset=charset;
|
||||||
cflags = GOODFLAGS(cflags);
|
cflags = GOODFLAGS(cflags);
|
||||||
if ((cflags®_EXTENDED) && (cflags®_NOSPEC))
|
if ((cflags®_EXTENDED) && (cflags®_NOSPEC))
|
||||||
@ -199,7 +199,7 @@ CHARSET_INFO *charset;
|
|||||||
|
|
||||||
/* win or lose, we're done */
|
/* win or lose, we're done */
|
||||||
if (p->error != 0) /* lose */
|
if (p->error != 0) /* lose */
|
||||||
regfree(preg);
|
my_regfree(preg);
|
||||||
return(p->error);
|
return(p->error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
#include <regex.h>
|
|
||||||
|
|
||||||
|
#include "my_regex.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "regerror.ih"
|
#include "regerror.ih"
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ static struct rerr {
|
|||||||
*/
|
*/
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
size_t
|
size_t
|
||||||
regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
|
my_regerror(int errcode, const my_regex_t *preg, char *errbuf, size_t errbuf_size)
|
||||||
{
|
{
|
||||||
register struct rerr *r;
|
register struct rerr *r;
|
||||||
register size_t len;
|
register size_t len;
|
||||||
@ -101,7 +101,7 @@ regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
|
|||||||
*/
|
*/
|
||||||
static char *
|
static char *
|
||||||
regatoi(preg, localbuf)
|
regatoi(preg, localbuf)
|
||||||
const regex_t *preg;
|
const my_regex_t *preg;
|
||||||
char *localbuf;
|
char *localbuf;
|
||||||
{
|
{
|
||||||
register struct rerr *r;
|
register struct rerr *r;
|
||||||
|
@ -4,7 +4,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* === regerror.c === */
|
/* === regerror.c === */
|
||||||
static char *regatoi(const regex_t *preg, char *localbuf);
|
static char *regatoi(const my_regex_t *preg, char *localbuf);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -8,11 +8,10 @@
|
|||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
#include <regex.h>
|
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include "my_regex.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "regex2.h"
|
#include "regex2.h"
|
||||||
|
|
||||||
@ -110,11 +109,11 @@ static int nope = 0; /* for use in asserts; shuts lint up */
|
|||||||
* have been prototyped.
|
* have been prototyped.
|
||||||
*/
|
*/
|
||||||
int /* 0 success, REG_NOMATCH failure */
|
int /* 0 success, REG_NOMATCH failure */
|
||||||
regexec(preg, str, nmatch, pmatch, eflags)
|
my_regexec(preg, str, nmatch, pmatch, eflags)
|
||||||
const regex_t *preg;
|
const my_regex_t *preg;
|
||||||
const char *str;
|
const char *str;
|
||||||
size_t nmatch;
|
size_t nmatch;
|
||||||
regmatch_t pmatch[];
|
my_regmatch_t pmatch[];
|
||||||
int eflags;
|
int eflags;
|
||||||
{
|
{
|
||||||
register struct re_guts *g = preg->re_g;
|
register struct re_guts *g = preg->re_g;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <regex.h>
|
#include "my_regex.h"
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "regex2.h"
|
#include "regex2.h"
|
||||||
@ -12,8 +12,8 @@
|
|||||||
= extern void regfree(regex_t *);
|
= extern void regfree(regex_t *);
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
regfree(preg)
|
my_regfree(preg)
|
||||||
regex_t *preg;
|
my_regex_t *preg;
|
||||||
{
|
{
|
||||||
register struct re_guts *g;
|
register struct re_guts *g;
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
static bool regex_inited=0;
|
static bool regex_inited=0;
|
||||||
|
|
||||||
void regex_init(CHARSET_INFO *cs)
|
void my_regex_init(CHARSET_INFO *cs)
|
||||||
{
|
{
|
||||||
char buff[CCLASS_LAST][256];
|
char buff[CCLASS_LAST][256];
|
||||||
int count[CCLASS_LAST];
|
int count[CCLASS_LAST];
|
||||||
@ -67,7 +67,7 @@ void regex_init(CHARSET_INFO *cs)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void regex_end()
|
void my_regex_end()
|
||||||
{
|
{
|
||||||
if (regex_inited)
|
if (regex_inited)
|
||||||
{
|
{
|
||||||
|
@ -3072,14 +3072,14 @@ Item_func_regex::fix_fields(THD *thd, Item **ref)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
int error;
|
int error;
|
||||||
if ((error= regcomp(&preg,res->c_ptr(),
|
if ((error= my_regcomp(&preg,res->c_ptr(),
|
||||||
((cmp_collation.collation->state &
|
((cmp_collation.collation->state &
|
||||||
(MY_CS_BINSORT | MY_CS_CSSORT)) ?
|
(MY_CS_BINSORT | MY_CS_CSSORT)) ?
|
||||||
REG_EXTENDED | REG_NOSUB :
|
REG_EXTENDED | REG_NOSUB :
|
||||||
REG_EXTENDED | REG_NOSUB | REG_ICASE),
|
REG_EXTENDED | REG_NOSUB | REG_ICASE),
|
||||||
cmp_collation.collation)))
|
cmp_collation.collation)))
|
||||||
{
|
{
|
||||||
(void) regerror(error,&preg,buff,sizeof(buff));
|
(void) my_regerror(error,&preg,buff,sizeof(buff));
|
||||||
my_error(ER_REGEXP_ERROR, MYF(0), buff);
|
my_error(ER_REGEXP_ERROR, MYF(0), buff);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -3121,15 +3121,15 @@ longlong Item_func_regex::val_int()
|
|||||||
prev_regexp.copy(*res2);
|
prev_regexp.copy(*res2);
|
||||||
if (regex_compiled)
|
if (regex_compiled)
|
||||||
{
|
{
|
||||||
regfree(&preg);
|
my_regfree(&preg);
|
||||||
regex_compiled=0;
|
regex_compiled=0;
|
||||||
}
|
}
|
||||||
if (regcomp(&preg,res2->c_ptr_safe(),
|
if (my_regcomp(&preg,res2->c_ptr_safe(),
|
||||||
((cmp_collation.collation->state &
|
((cmp_collation.collation->state &
|
||||||
(MY_CS_BINSORT | MY_CS_CSSORT)) ?
|
(MY_CS_BINSORT | MY_CS_CSSORT)) ?
|
||||||
REG_EXTENDED | REG_NOSUB :
|
REG_EXTENDED | REG_NOSUB :
|
||||||
REG_EXTENDED | REG_NOSUB | REG_ICASE),
|
REG_EXTENDED | REG_NOSUB | REG_ICASE),
|
||||||
cmp_collation.collation))
|
cmp_collation.collation))
|
||||||
{
|
{
|
||||||
null_value=1;
|
null_value=1;
|
||||||
return 0;
|
return 0;
|
||||||
@ -3138,7 +3138,7 @@ longlong Item_func_regex::val_int()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
null_value=0;
|
null_value=0;
|
||||||
return regexec(&preg,res->c_ptr(),0,(regmatch_t*) 0,0) ? 0 : 1;
|
return my_regexec(&preg,res->c_ptr(),0,(my_regmatch_t*) 0,0) ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3148,7 +3148,7 @@ void Item_func_regex::cleanup()
|
|||||||
Item_bool_func::cleanup();
|
Item_bool_func::cleanup();
|
||||||
if (regex_compiled)
|
if (regex_compiled)
|
||||||
{
|
{
|
||||||
regfree(&preg);
|
my_regfree(&preg);
|
||||||
regex_compiled=0;
|
regex_compiled=0;
|
||||||
}
|
}
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
@ -1002,11 +1002,11 @@ public:
|
|||||||
|
|
||||||
#ifdef USE_REGEX
|
#ifdef USE_REGEX
|
||||||
|
|
||||||
#include <regex.h>
|
#include "my_regex.h"
|
||||||
|
|
||||||
class Item_func_regex :public Item_bool_func
|
class Item_func_regex :public Item_bool_func
|
||||||
{
|
{
|
||||||
regex_t preg;
|
my_regex_t preg;
|
||||||
bool regex_compiled;
|
bool regex_compiled;
|
||||||
bool regex_is_const;
|
bool regex_is_const;
|
||||||
String prev_regexp;
|
String prev_regexp;
|
||||||
|
@ -1098,7 +1098,7 @@ void clean_up(bool print_message)
|
|||||||
my_free((gptr) ssl_acceptor_fd, MYF(MY_ALLOW_ZERO_PTR));
|
my_free((gptr) ssl_acceptor_fd, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
#endif /* HAVE_OPENSSL */
|
#endif /* HAVE_OPENSSL */
|
||||||
#ifdef USE_REGEX
|
#ifdef USE_REGEX
|
||||||
regex_end();
|
my_regex_end();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (print_message && errmesg)
|
if (print_message && errmesg)
|
||||||
@ -2605,7 +2605,7 @@ static int init_common_variables(const char *conf_file_name, int argc,
|
|||||||
set_var_init();
|
set_var_init();
|
||||||
mysys_uses_curses=0;
|
mysys_uses_curses=0;
|
||||||
#ifdef USE_REGEX
|
#ifdef USE_REGEX
|
||||||
regex_init(&my_charset_latin1);
|
my_regex_init(&my_charset_latin1);
|
||||||
#endif
|
#endif
|
||||||
if (!(default_charset_info= get_charset_by_csname(default_character_set_name,
|
if (!(default_charset_info= get_charset_by_csname(default_character_set_name,
|
||||||
MY_CS_PRIMARY,
|
MY_CS_PRIMARY,
|
||||||
@ -6219,7 +6219,7 @@ static void mysql_init_variables(void)
|
|||||||
#else
|
#else
|
||||||
have_openssl=SHOW_OPTION_NO;
|
have_openssl=SHOW_OPTION_NO;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_BROKEN_REALPATH
|
#if !defined(HAVE_REALPATH) || defined(HAVE_BROKEN_REALPATH)
|
||||||
have_symlink=SHOW_OPTION_NO;
|
have_symlink=SHOW_OPTION_NO;
|
||||||
#else
|
#else
|
||||||
have_symlink=SHOW_OPTION_YES;
|
have_symlink=SHOW_OPTION_YES;
|
||||||
@ -6916,7 +6916,7 @@ static void get_options(int argc,char **argv)
|
|||||||
usage();
|
usage();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
#if defined(HAVE_BROKEN_REALPATH)
|
#if !defined(HAVE_REALPATH) || defined(HAVE_BROKEN_REALPATH)
|
||||||
my_use_symdir=0;
|
my_use_symdir=0;
|
||||||
my_disable_symlinks=1;
|
my_disable_symlinks=1;
|
||||||
have_symlink=SHOW_OPTION_NO;
|
have_symlink=SHOW_OPTION_NO;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user