mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
marge
sql/ha_innodb.cc: Auto merged sql/ha_innodb.h: Auto merged sql/item_strfunc.cc: Auto merged sql/log.cc: Auto merged sql/mysqld.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_delete.cc: Auto merged sql/sql_lex.cc: Auto merged sql/share/french/errmsg.txt: Auto merged sql/share/greek/errmsg.txt: Auto merged sql/sql_lex.h: Auto merged sql/sql_select.cc: Auto merged sql/sql_table.cc: Auto merged sql/sql_view.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/table.cc: Auto merged sql/share/portuguese/errmsg.txt: Auto merged sql/share/romanian/errmsg.txt: Auto merged sql/share/serbian/errmsg.txt: Auto merged sql/share/spanish/errmsg.txt: Auto merged sql/share/swedish/errmsg.txt: Auto merged sql/mysql_priv.h: merge sql/sql_parse.cc: merge sql/sql_show.cc: merge
This commit is contained in:
commit
ac0cd2d3ac
106 changed files with 2366 additions and 2077 deletions
117
mysys/my_error.c
117
mysys/my_error.c
|
|
@ -22,6 +22,15 @@
|
|||
|
||||
/* Define some external variables for error handling */
|
||||
|
||||
/*
|
||||
WARNING!
|
||||
my_error family functions have to be used according following rules:
|
||||
- if message have not parameters use my_message(ER_CODE, ER(ER_CODE), MYF(N))
|
||||
- if message registered use my_error(ER_CODE, MYF(N), ...).
|
||||
- With some special text of errror message use:
|
||||
my_printf_error(ER_CODE, format, MYF(N), ...)
|
||||
*/
|
||||
|
||||
const char ** NEAR my_errmsg[MAXMAPS]={0,0,0,0};
|
||||
char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
||||
|
||||
|
|
@ -41,107 +50,22 @@ char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
|||
the length value is ignored.
|
||||
*/
|
||||
|
||||
int my_error(int nr,myf MyFlags, ...)
|
||||
int my_error(int nr, myf MyFlags, ...)
|
||||
{
|
||||
va_list ap;
|
||||
uint olen, plen;
|
||||
reg1 const char *tpos;
|
||||
reg2 char *endpos;
|
||||
char * par;
|
||||
char ebuff[ERRMSGSIZE+20];
|
||||
int prec_chars; /* output precision */
|
||||
my_bool prec_supplied;
|
||||
const char *format;
|
||||
va_list args;
|
||||
char ebuff[ERRMSGSIZE + 20];
|
||||
DBUG_ENTER("my_error");
|
||||
LINT_INIT(prec_chars); /* protected by prec_supplied */
|
||||
|
||||
va_start(ap,MyFlags);
|
||||
DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d", nr, MyFlags, errno));
|
||||
|
||||
if (nr / ERRMOD == GLOB && my_errmsg[GLOB] == 0)
|
||||
init_glob_errs();
|
||||
format= my_errmsg[nr / ERRMOD][nr % ERRMOD];
|
||||
|
||||
olen=(uint) strlen(tpos=my_errmsg[nr / ERRMOD][nr % ERRMOD]);
|
||||
endpos=ebuff;
|
||||
|
||||
while (*tpos)
|
||||
{
|
||||
if (tpos[0] != '%')
|
||||
{
|
||||
*endpos++= *tpos++; /* Copy ordinary char */
|
||||
continue;
|
||||
}
|
||||
if (*++tpos == '%') /* test if %% */
|
||||
{
|
||||
olen--;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
Skip size/precision flags to be compatible with printf.
|
||||
The only size/precision flag supported is "%.*s".
|
||||
If "%.*u" or "%.*d" are encountered, the precision number is read
|
||||
from the variable argument list but its value is ignored.
|
||||
*/
|
||||
prec_supplied= 0;
|
||||
if (*tpos== '.')
|
||||
{
|
||||
tpos++;
|
||||
olen--;
|
||||
if (*tpos == '*')
|
||||
{
|
||||
tpos++;
|
||||
olen--;
|
||||
prec_chars= va_arg(ap, int); /* get length parameter */
|
||||
prec_supplied= 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!prec_supplied)
|
||||
{
|
||||
while (my_isdigit(&my_charset_latin1, *tpos) || *tpos == '.' ||
|
||||
*tpos == '-')
|
||||
tpos++;
|
||||
|
||||
if (*tpos == 'l') /* Skip 'l' argument */
|
||||
tpos++;
|
||||
}
|
||||
|
||||
if (*tpos == 's') /* String parameter */
|
||||
{
|
||||
par= va_arg(ap, char *);
|
||||
plen= (uint) strlen(par);
|
||||
if (prec_supplied && prec_chars > 0)
|
||||
plen= min((uint)prec_chars, plen);
|
||||
if (olen + plen < ERRMSGSIZE+2) /* Replace if possible */
|
||||
{
|
||||
strmake(endpos, par, plen);
|
||||
endpos+= plen;
|
||||
tpos++;
|
||||
olen+= plen-2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (*tpos == 'd' || *tpos == 'u') /* Integer parameter */
|
||||
{
|
||||
register int iarg;
|
||||
iarg= va_arg(ap, int);
|
||||
if (*tpos == 'd')
|
||||
plen= (uint) (int10_to_str((long) iarg, endpos, -10) - endpos);
|
||||
else
|
||||
plen= (uint) (int10_to_str((long) (uint) iarg, endpos, 10) - endpos);
|
||||
if (olen + plen < ERRMSGSIZE+2) /* Replace parameter if possible */
|
||||
{
|
||||
endpos+= plen;
|
||||
tpos++;
|
||||
olen+= plen-2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
*endpos++= '%'; /* % used as % or unknown code */
|
||||
}
|
||||
*endpos= '\0'; /* End of errmessage */
|
||||
va_end(ap);
|
||||
va_start(args,MyFlags);
|
||||
(void) my_vsnprintf (ebuff, sizeof(ebuff), format, args);
|
||||
va_end(args);
|
||||
DBUG_RETURN((*error_handler_hook)(nr, ebuff, MyFlags));
|
||||
}
|
||||
|
||||
|
|
@ -160,11 +84,14 @@ int my_printf_error(uint error, const char *format, myf MyFlags, ...)
|
|||
{
|
||||
va_list args;
|
||||
char ebuff[ERRMSGSIZE+20];
|
||||
DBUG_ENTER("my_printf_error");
|
||||
DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d Format: %s",
|
||||
error, MyFlags, errno, format));
|
||||
|
||||
va_start(args,MyFlags);
|
||||
(void) vsprintf (ebuff,format,args);
|
||||
(void) my_vsnprintf (ebuff, sizeof(ebuff), format, args);
|
||||
va_end(args);
|
||||
return (*error_handler_hook)(error, ebuff, MyFlags);
|
||||
DBUG_RETURN((*error_handler_hook)(error, ebuff, MyFlags));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue