Merge work:/my/mysql-4.1 into narttu.mysql.fi:/my/mysql-4.1
This commit is contained in:
commit
d9965d3174
@ -1239,7 +1239,7 @@ filename_completion_function(const char *text, int state)
|
|||||||
/* otherwise, get first entry where first */
|
/* otherwise, get first entry where first */
|
||||||
/* filename_len characters are equal */
|
/* filename_len characters are equal */
|
||||||
if (entry->d_name[0] == filename[0]
|
if (entry->d_name[0] == filename[0]
|
||||||
#if defined(__SVR4) || defined(__linux__)
|
#ifdef HAVE_DIRENT_H
|
||||||
&& strlen(entry->d_name) >= filename_len
|
&& strlen(entry->d_name) >= filename_len
|
||||||
#else
|
#else
|
||||||
&& entry->d_namlen >= filename_len
|
&& entry->d_namlen >= filename_len
|
||||||
@ -1252,7 +1252,7 @@ filename_completion_function(const char *text, int state)
|
|||||||
if (entry) { /* match found */
|
if (entry) { /* match found */
|
||||||
|
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
#if defined(__SVR4) || defined(__linux__)
|
#ifdef HAVE_DIRENT_H
|
||||||
len = strlen(entry->d_name) +
|
len = strlen(entry->d_name) +
|
||||||
#else
|
#else
|
||||||
len = entry->d_namlen +
|
len = entry->d_namlen +
|
||||||
|
@ -1825,6 +1825,7 @@ AC_CHECK_FUNCS(alarm bmove \
|
|||||||
sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \
|
sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \
|
||||||
pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \
|
pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \
|
||||||
pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
|
pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
|
||||||
|
pthread_attr_getstacksize \
|
||||||
pthread_condattr_create rwlock_init pthread_rwlock_rdlock \
|
pthread_condattr_create rwlock_init pthread_rwlock_rdlock \
|
||||||
fchmod getpass getpassphrase initgroups mlockall)
|
fchmod getpass getpassphrase initgroups mlockall)
|
||||||
|
|
||||||
|
@ -143,6 +143,11 @@ typedef uint rf_SetTimer;
|
|||||||
#define HAVE_NAMED_PIPE /* We can only create pipes on NT */
|
#define HAVE_NAMED_PIPE /* We can only create pipes on NT */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* We need to close files to break connections on shutdown */
|
||||||
|
#ifndef SIGNAL_WITH_VIO_CLOSE
|
||||||
|
#define SIGNAL_WITH_VIO_CLOSE
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Use all character sets in MySQL */
|
/* Use all character sets in MySQL */
|
||||||
#define USE_MB 1
|
#define USE_MB 1
|
||||||
#define USE_MB_IDENT 1
|
#define USE_MB_IDENT 1
|
||||||
@ -324,4 +329,4 @@ inline double ulonglong2double(ulonglong value)
|
|||||||
#define statistic_increment(V,L) thread_safe_increment((V),(L))
|
#define statistic_increment(V,L) thread_safe_increment((V),(L))
|
||||||
|
|
||||||
#define shared_memory_buffer_length 16000
|
#define shared_memory_buffer_length 16000
|
||||||
#define default_shared_memory_base_name "MYSQL";
|
#define default_shared_memory_base_name "MYSQL"
|
||||||
|
@ -110,6 +110,7 @@
|
|||||||
#define __STDC_EXT__ 1 /* To get large file support on hpux */
|
#define __STDC_EXT__ 1 /* To get large file support on hpux */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HPUX11
|
||||||
/*
|
/*
|
||||||
Fix warnings on HPUX11
|
Fix warnings on HPUX11
|
||||||
There is something really strange with HPUX11 include files as you get
|
There is something really strange with HPUX11 include files as you get
|
||||||
@ -117,11 +118,10 @@
|
|||||||
do the following:
|
do the following:
|
||||||
*/
|
*/
|
||||||
#if !defined(_XOPEN_SOURCE_EXTENDED) && ! defined(__cplusplus)
|
#if !defined(_XOPEN_SOURCE_EXTENDED) && ! defined(__cplusplus)
|
||||||
#define _XOPEN_SOURCE_EXTENDED
|
#define _XOPEN_SOURCE_EXTENDED 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Fix type of socklen as this is depending on the above define */
|
/* Fix type of socklen as this is depending on the above define */
|
||||||
#ifdef HPUX11
|
|
||||||
#undef SOCKET_SIZE_TYPE
|
#undef SOCKET_SIZE_TYPE
|
||||||
#ifdef _XOPEN_SOURCE_EXTENDED
|
#ifdef _XOPEN_SOURCE_EXTENDED
|
||||||
#define SOCKET_SIZE_TYPE socklen_t
|
#define SOCKET_SIZE_TYPE socklen_t
|
||||||
|
@ -37,16 +37,22 @@ typedef struct xml_stack_st
|
|||||||
void *user_data;
|
void *user_data;
|
||||||
int (*enter)(struct xml_stack_st *st,const char *val, uint len);
|
int (*enter)(struct xml_stack_st *st,const char *val, uint len);
|
||||||
int (*value)(struct xml_stack_st *st,const char *val, uint len);
|
int (*value)(struct xml_stack_st *st,const char *val, uint len);
|
||||||
int (*leave)(struct xml_stack_st *st,const char *val, uint len);
|
int (*leave_xml)(struct xml_stack_st *st,const char *val, uint len);
|
||||||
} MY_XML_PARSER;
|
} MY_XML_PARSER;
|
||||||
|
|
||||||
void my_xml_parser_create(MY_XML_PARSER *st);
|
void my_xml_parser_create(MY_XML_PARSER *st);
|
||||||
void my_xml_parser_free(MY_XML_PARSER *st);
|
void my_xml_parser_free(MY_XML_PARSER *st);
|
||||||
int my_xml_parse(MY_XML_PARSER *st,const char *str, uint len);
|
int my_xml_parse(MY_XML_PARSER *st,const char *str, uint len);
|
||||||
|
|
||||||
void my_xml_set_value_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, const char *, uint len));
|
void my_xml_set_value_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *,
|
||||||
void my_xml_set_enter_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, const char *, uint len));
|
const char *,
|
||||||
void my_xml_set_leave_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, const char *, uint len));
|
uint len));
|
||||||
|
void my_xml_set_enter_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *,
|
||||||
|
const char *,
|
||||||
|
uint len));
|
||||||
|
void my_xml_set_leave_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *,
|
||||||
|
const char *,
|
||||||
|
uint len));
|
||||||
void my_xml_set_user_data(MY_XML_PARSER *st, void *);
|
void my_xml_set_user_data(MY_XML_PARSER *st, void *);
|
||||||
|
|
||||||
uint my_xml_error_pos(MY_XML_PARSER *st);
|
uint my_xml_error_pos(MY_XML_PARSER *st);
|
||||||
|
@ -43,8 +43,8 @@ enum thr_lock_type { TL_IGNORE=-1,
|
|||||||
*/
|
*/
|
||||||
TL_WRITE_ALLOW_WRITE,
|
TL_WRITE_ALLOW_WRITE,
|
||||||
/*
|
/*
|
||||||
Write lock, but allow other threads to read / write.
|
Write lock, but allow other threads to read.
|
||||||
Used by ALTER TABLE in MySQL to mark to allow readers
|
Used by ALTER TABLE in MySQL to allow readers
|
||||||
to use the table until ALTER TABLE is finished.
|
to use the table until ALTER TABLE is finished.
|
||||||
*/
|
*/
|
||||||
TL_WRITE_ALLOW_READ,
|
TL_WRITE_ALLOW_READ,
|
||||||
|
@ -27,7 +27,7 @@ CLEANFILES = $(test_SCRIPTS)
|
|||||||
dist-hook:
|
dist-hook:
|
||||||
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
||||||
$(distdir)/std_data
|
$(distdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(srcdir)/t/*.opt $(srcdir)/t/*.sh $(distdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.test $(srcdir)/t/*.opt $(srcdir)/t/*.sh $(srcdir)/t/*.slave-mi $(distdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include
|
$(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include
|
||||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r
|
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.000001 $(distdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.000001 $(distdir)/std_data
|
||||||
@ -41,6 +41,8 @@ install-data-local:
|
|||||||
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
|
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(DESTDIR)$(testdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.test $(DESTDIR)$(testdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.opt $(DESTDIR)$(testdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.opt $(DESTDIR)$(testdir)/t
|
||||||
|
$(INSTALL_DATA) $(srcdir)/t/*.sh $(DESTDIR)$(testdir)/t
|
||||||
|
$(INSTALL_DATA) $(srcdir)/t/*.slave-mi $(DESTDIR)$(testdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(DESTDIR)$(testdir)/r
|
$(INSTALL_DATA) $(srcdir)/r/*.result $(DESTDIR)$(testdir)/r
|
||||||
$(INSTALL_DATA) $(srcdir)/r/*.require $(DESTDIR)$(testdir)/r
|
$(INSTALL_DATA) $(srcdir)/r/*.require $(DESTDIR)$(testdir)/r
|
||||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
||||||
|
@ -1937,14 +1937,14 @@ int Rand_log_event::write_data(IO_CACHE* file)
|
|||||||
#ifdef MYSQL_CLIENT
|
#ifdef MYSQL_CLIENT
|
||||||
void Rand_log_event::print(FILE* file, bool short_form, char* last_db)
|
void Rand_log_event::print(FILE* file, bool short_form, char* last_db)
|
||||||
{
|
{
|
||||||
char llbuff[22];
|
char llbuff[22],llbuff2[22];
|
||||||
if (!short_form)
|
if (!short_form)
|
||||||
{
|
{
|
||||||
print_header(file);
|
print_header(file);
|
||||||
fprintf(file, "\tRand\n");
|
fprintf(file, "\tRand\n");
|
||||||
}
|
}
|
||||||
fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n",
|
fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n",
|
||||||
llstr(seed1, llbuff),llstr(seed2, llbuff));
|
llstr(seed1, llbuff),llstr(seed2, llbuff2));
|
||||||
fflush(file);
|
fflush(file);
|
||||||
}
|
}
|
||||||
#endif // MYSQL_CLIENT
|
#endif // MYSQL_CLIENT
|
||||||
|
@ -2352,6 +2352,7 @@ int main(int argc, char **argv)
|
|||||||
if (init_thread_environment())
|
if (init_thread_environment())
|
||||||
unireg_abort(1);
|
unireg_abort(1);
|
||||||
pthread_attr_setstacksize(&connection_attrib,thread_stack);
|
pthread_attr_setstacksize(&connection_attrib,thread_stack);
|
||||||
|
#ifdef HAVE_PTHREAD_ATTR_GETSTACKSIZE
|
||||||
{
|
{
|
||||||
/* Retrieve used stack size; Needed for checking stack overflows */
|
/* Retrieve used stack size; Needed for checking stack overflows */
|
||||||
size_t stack_size;
|
size_t stack_size;
|
||||||
@ -2363,6 +2364,7 @@ int main(int argc, char **argv)
|
|||||||
thread_stack= stack_size;
|
thread_stack= stack_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
(void) thr_setconcurrency(concurrency); // 10 by default
|
(void) thr_setconcurrency(concurrency); // 10 by default
|
||||||
|
|
||||||
select_thread=pthread_self();
|
select_thread=pthread_self();
|
||||||
|
@ -59,13 +59,13 @@ static int init_failsafe_rpl_thread(THD* thd)
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("init_failsafe_rpl_thread");
|
DBUG_ENTER("init_failsafe_rpl_thread");
|
||||||
thd->system_thread = thd->bootstrap = 1;
|
thd->system_thread = thd->bootstrap = 1;
|
||||||
|
thd->host_or_ip= "";
|
||||||
thd->client_capabilities = 0;
|
thd->client_capabilities = 0;
|
||||||
my_net_init(&thd->net, 0);
|
my_net_init(&thd->net, 0);
|
||||||
thd->net.read_timeout = slave_net_timeout;
|
thd->net.read_timeout = slave_net_timeout;
|
||||||
thd->max_client_packet_length=thd->net.max_packet;
|
thd->max_client_packet_length=thd->net.max_packet;
|
||||||
thd->master_access= ~0;
|
thd->master_access= ~0;
|
||||||
thd->priv_user = 0;
|
thd->priv_user = 0;
|
||||||
thd->system_thread = 1;
|
|
||||||
pthread_mutex_lock(&LOCK_thread_count);
|
pthread_mutex_lock(&LOCK_thread_count);
|
||||||
thd->thread_id = thread_id++;
|
thd->thread_id = thread_id++;
|
||||||
pthread_mutex_unlock(&LOCK_thread_count);
|
pthread_mutex_unlock(&LOCK_thread_count);
|
||||||
|
@ -1863,6 +1863,7 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("init_slave_thread");
|
DBUG_ENTER("init_slave_thread");
|
||||||
thd->system_thread = thd->bootstrap = 1;
|
thd->system_thread = thd->bootstrap = 1;
|
||||||
|
thd->host_or_ip= "";
|
||||||
thd->client_capabilities = 0;
|
thd->client_capabilities = 0;
|
||||||
my_net_init(&thd->net, 0);
|
my_net_init(&thd->net, 0);
|
||||||
thd->net.read_timeout = slave_net_timeout;
|
thd->net.read_timeout = slave_net_timeout;
|
||||||
@ -1870,7 +1871,6 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
|
|||||||
thd->priv_user = 0;
|
thd->priv_user = 0;
|
||||||
thd->slave_thread = 1;
|
thd->slave_thread = 1;
|
||||||
thd->options = (((opt_log_slave_updates) ? OPTION_BIN_LOG:0) | OPTION_AUTO_IS_NULL) ;
|
thd->options = (((opt_log_slave_updates) ? OPTION_BIN_LOG:0) | OPTION_AUTO_IS_NULL) ;
|
||||||
thd->system_thread = 1;
|
|
||||||
thd->client_capabilities = CLIENT_LOCAL_FILES;
|
thd->client_capabilities = CLIENT_LOCAL_FILES;
|
||||||
thd->real_id=pthread_self();
|
thd->real_id=pthread_self();
|
||||||
pthread_mutex_lock(&LOCK_thread_count);
|
pthread_mutex_lock(&LOCK_thread_count);
|
||||||
|
@ -83,7 +83,7 @@ THD::THD():user_time(0), is_fatal_error(0),
|
|||||||
global_read_lock(0), bootstrap(0)
|
global_read_lock(0), bootstrap(0)
|
||||||
{
|
{
|
||||||
host=user=priv_user=db=query=ip=0;
|
host=user=priv_user=db=query=ip=0;
|
||||||
host_or_ip="unknown ip";
|
host_or_ip= "connecting host";
|
||||||
locked=killed=count_cuted_fields=some_tables_deleted=no_errors=password=
|
locked=killed=count_cuted_fields=some_tables_deleted=no_errors=password=
|
||||||
query_start_used=prepare_command=0;
|
query_start_used=prepare_command=0;
|
||||||
db_length=query_length=col_access=0;
|
db_length=query_length=col_access=0;
|
||||||
|
@ -588,6 +588,7 @@ public:
|
|||||||
|
|
||||||
bzero((char*) &thd.net,sizeof(thd.net)); // Safety
|
bzero((char*) &thd.net,sizeof(thd.net)); // Safety
|
||||||
thd.system_thread=1;
|
thd.system_thread=1;
|
||||||
|
thd.host_or_ip= "";
|
||||||
bzero((char*) &info,sizeof(info));
|
bzero((char*) &info,sizeof(info));
|
||||||
pthread_mutex_init(&mutex,MY_MUTEX_INIT_FAST);
|
pthread_mutex_init(&mutex,MY_MUTEX_INIT_FAST);
|
||||||
pthread_cond_init(&cond,NULL);
|
pthread_cond_init(&cond,NULL);
|
||||||
|
@ -1326,10 +1326,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
|||||||
thd_info->user=thd->strdup(tmp->user ? tmp->user :
|
thd_info->user=thd->strdup(tmp->user ? tmp->user :
|
||||||
(tmp->system_thread ?
|
(tmp->system_thread ?
|
||||||
"system user" : "unauthenticated user"));
|
"system user" : "unauthenticated user"));
|
||||||
thd_info->host=thd->strdup(tmp->host ? tmp->host :
|
thd_info->host= thd->strdup(tmp->host_or_ip);
|
||||||
(tmp->ip ? tmp->ip :
|
|
||||||
(tmp->system_thread ? "none" :
|
|
||||||
"connecting host")));
|
|
||||||
if ((thd_info->db=tmp->db)) // Safe test
|
if ((thd_info->db=tmp->db)) // Safe test
|
||||||
thd_info->db=thd->strdup(thd_info->db);
|
thd_info->db=thd->strdup(thd_info->db);
|
||||||
thd_info->command=(int) tmp->command;
|
thd_info->command=(int) tmp->command;
|
||||||
|
@ -37,6 +37,7 @@ typedef struct xml_attr_st
|
|||||||
const char *end;
|
const char *end;
|
||||||
} MY_XML_ATTR;
|
} MY_XML_ATTR;
|
||||||
|
|
||||||
|
|
||||||
static const char *lex2str(int lex)
|
static const char *lex2str(int lex)
|
||||||
{
|
{
|
||||||
switch(lex)
|
switch(lex)
|
||||||
@ -97,7 +98,8 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a)
|
|||||||
else if ( (p->cur[0]=='"') || (p->cur[0]=='\'') )
|
else if ( (p->cur[0]=='"') || (p->cur[0]=='\'') )
|
||||||
{
|
{
|
||||||
p->cur++;
|
p->cur++;
|
||||||
for( ; ( p->cur < p->end ) && (p->cur[0]!=a->beg[0]); p->cur++);
|
for( ; ( p->cur < p->end ) && (p->cur[0] != a->beg[0]); p->cur++)
|
||||||
|
{}
|
||||||
a->end=p->cur;
|
a->end=p->cur;
|
||||||
if (a->beg[0]==p->cur[0])p->cur++;
|
if (a->beg[0]==p->cur[0])p->cur++;
|
||||||
a->beg++;
|
a->beg++;
|
||||||
@ -106,7 +108,10 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for( ; (p->cur < p->end) && !strchr("?'\"=/<> \t\r\n", p->cur[0]); p->cur++);
|
for(;
|
||||||
|
(p->cur < p->end) && !strchr("?'\"=/<> \t\r\n", p->cur[0]);
|
||||||
|
p->cur++)
|
||||||
|
{}
|
||||||
a->end=p->cur;
|
a->end=p->cur;
|
||||||
my_xml_norm_text(a);
|
my_xml_norm_text(a);
|
||||||
lex=MY_XML_IDENT;
|
lex=MY_XML_IDENT;
|
||||||
@ -145,6 +150,7 @@ static int my_xml_enter(MY_XML_PARSER *st, const char *str, uint len)
|
|||||||
return st->enter ? st->enter(st,st->attr,st->attrend-st->attr) : MY_XML_OK;
|
return st->enter ? st->enter(st,st->attr,st->attrend-st->attr) : MY_XML_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void mstr(char *s,const char *src,uint l1, uint l2)
|
static void mstr(char *s,const char *src,uint l1, uint l2)
|
||||||
{
|
{
|
||||||
l1 = l1<l2 ? l1 : l2;
|
l1 = l1<l2 ? l1 : l2;
|
||||||
@ -152,6 +158,7 @@ static void mstr(char *s,const char *src,uint l1, uint l2)
|
|||||||
s[l1]='\0';
|
s[l1]='\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int my_xml_leave(MY_XML_PARSER *p, const char *str, uint slen)
|
static int my_xml_leave(MY_XML_PARSER *p, const char *str, uint slen)
|
||||||
{
|
{
|
||||||
char *e;
|
char *e;
|
||||||
@ -172,7 +179,7 @@ static int my_xml_leave(MY_XML_PARSER *p, const char *str, uint slen)
|
|||||||
return MY_XML_ERROR;
|
return MY_XML_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = p->leave ? p->leave(p,p->attr,p->attrend-p->attr) : MY_XML_OK;
|
rc = p->leave_xml ? p->leave_xml(p,p->attr,p->attrend-p->attr) : MY_XML_OK;
|
||||||
|
|
||||||
*e='\0';
|
*e='\0';
|
||||||
p->attrend=e;
|
p->attrend=e;
|
||||||
@ -237,7 +244,8 @@ int my_xml_parse(MY_XML_PARSER *p,const char *str, uint len)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(p->errstr,"3: %s unexpected (ident or '/' wanted)",lex2str(lex));
|
sprintf(p->errstr,"3: %s unexpected (ident or '/' wanted)",
|
||||||
|
lex2str(lex));
|
||||||
return MY_XML_ERROR;
|
return MY_XML_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,7 +264,8 @@ int my_xml_parse(MY_XML_PARSER *p,const char *str, uint len)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(p->errstr,"4: %s unexpected (ident or string wanted)",lex2str(lex));
|
sprintf(p->errstr,"4: %s unexpected (ident or string wanted)",
|
||||||
|
lex2str(lex));
|
||||||
return MY_XML_ERROR;
|
return MY_XML_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -318,35 +327,47 @@ gt:
|
|||||||
return MY_XML_OK;
|
return MY_XML_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void my_xml_parser_create(MY_XML_PARSER *p)
|
void my_xml_parser_create(MY_XML_PARSER *p)
|
||||||
{
|
{
|
||||||
bzero((void*)p,sizeof(p[0]));
|
bzero((void*)p,sizeof(p[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void my_xml_parser_free(MY_XML_PARSER *p __attribute__((unused)))
|
void my_xml_parser_free(MY_XML_PARSER *p __attribute__((unused)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_xml_set_value_handler(MY_XML_PARSER *p, int (*action)(MY_XML_PARSER *p, const char *s, uint l))
|
|
||||||
|
void my_xml_set_value_handler(MY_XML_PARSER *p,
|
||||||
|
int (*action)(MY_XML_PARSER *p, const char *s,
|
||||||
|
uint l))
|
||||||
{
|
{
|
||||||
p->value=action;
|
p->value=action;
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_xml_set_enter_handler(MY_XML_PARSER *p, int (*action)(MY_XML_PARSER *p, const char *s, uint l))
|
void my_xml_set_enter_handler(MY_XML_PARSER *p,
|
||||||
|
int (*action)(MY_XML_PARSER *p, const char *s,
|
||||||
|
uint l))
|
||||||
{
|
{
|
||||||
p->enter=action;
|
p->enter=action;
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_xml_set_leave_handler(MY_XML_PARSER *p, int (*action)(MY_XML_PARSER *p, const char *s, uint l))
|
|
||||||
|
void my_xml_set_leave_handler(MY_XML_PARSER *p,
|
||||||
|
int (*action)(MY_XML_PARSER *p, const char *s,
|
||||||
|
uint l))
|
||||||
{
|
{
|
||||||
p->leave=action;
|
p->leave_xml=action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void my_xml_set_user_data(MY_XML_PARSER *p, void *user_data)
|
void my_xml_set_user_data(MY_XML_PARSER *p, void *user_data)
|
||||||
{
|
{
|
||||||
p->user_data=user_data;
|
p->user_data=user_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *my_xml_error_string(MY_XML_PARSER *p)
|
const char *my_xml_error_string(MY_XML_PARSER *p)
|
||||||
{
|
{
|
||||||
return p->errstr;
|
return p->errstr;
|
||||||
@ -358,8 +379,10 @@ uint my_xml_error_pos(MY_XML_PARSER *p)
|
|||||||
const char *beg=p->beg;
|
const char *beg=p->beg;
|
||||||
const char *s;
|
const char *s;
|
||||||
for ( s=p->beg ; s<p->cur; s++)
|
for ( s=p->beg ; s<p->cur; s++)
|
||||||
|
{
|
||||||
if (s[0]=='\n')
|
if (s[0]=='\n')
|
||||||
beg=s;
|
beg=s;
|
||||||
|
}
|
||||||
return p->cur-beg;
|
return p->cur-beg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -368,7 +391,9 @@ uint my_xml_error_lineno(MY_XML_PARSER *p)
|
|||||||
uint res=0;
|
uint res=0;
|
||||||
const char *s;
|
const char *s;
|
||||||
for ( s=p->beg ; s<p->cur; s++)
|
for ( s=p->beg ; s<p->cur; s++)
|
||||||
|
{
|
||||||
if (s[0]=='\n')
|
if (s[0]=='\n')
|
||||||
res++;
|
res++;
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user