1
/* Copyright (C) 2000-2005 MySQL AB
3
This program is free software; you can redistribute it and/or modify
4
it under the terms of the GNU General Public License as published by
5
the Free Software Foundation; version 2 of the License.
7
This program is distributed in the hope that it will be useful,
8
but WITHOUT ANY WARRANTY; without even the implied warranty of
9
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
GNU General Public License for more details.
12
You should have received a copy of the GNU General Public License
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
21
Read language depeneded messagefile
24
#include "mysql_priv.h"
25
#include "mysys_err.h"
27
static bool read_texts(const char *file_name,const char ***point,
29
static void init_myfunc_errs(void);
32
Read messages from errorfile.
34
This function can be called multiple times to reload the messages.
35
If it fails to load the messages, it will fail softly by initializing
36
the errmesg pointer to an array of empty strings or by keeping the
37
old array if it exists.
45
bool init_errmessage(void)
47
const char **errmsgs, **ptr;
48
DBUG_ENTER("init_errmessage");
51
Get a pointer to the old error messages pointer array.
52
read_texts() tries to free it.
54
errmsgs= my_error_unregister(ER_ERROR_FIRST, ER_ERROR_LAST);
56
/* Read messages from file. */
57
if (read_texts(ERRMSG_FILE, &errmsgs, ER_ERROR_LAST - ER_ERROR_FIRST + 1) &&
60
if (!(errmsgs= (const char**) my_malloc((ER_ERROR_LAST-ER_ERROR_FIRST+1)*
61
sizeof(char*), MYF(0))))
63
for (ptr= errmsgs; ptr < errmsgs + ER_ERROR_LAST - ER_ERROR_FIRST; ptr++)
67
/* Register messages for use with my_error(). */
68
if (my_error_register(errmsgs, ER_ERROR_FIRST, ER_ERROR_LAST))
70
x_free((uchar*) errmsgs);
74
errmesg= errmsgs; /* Init global variabel */
75
init_myfunc_errs(); /* Init myfunc messages */
81
Read text from packed textfile in language-directory.
83
If we can't read messagefile then it's panic- we can't continue.
86
Convert the character set to server system character set
89
static bool read_texts(const char *file_name,const char ***point,
93
uint count,funktpos,textcount;
100
DBUG_ENTER("read_texts");
104
if ((file=my_open(fn_format(name,file_name,language,"",4),
105
O_RDONLY | O_SHARE | O_BINARY,
107
goto err; /* purecov: inspected */
110
if (my_read(file,(uchar*) head,32,MYF(MY_NABP))) goto err;
111
if (head[0] != (uchar) 254 || head[1] != (uchar) 254 ||
112
head[2] != 2 || head[3] != 1)
113
goto err; /* purecov: inspected */
118
sql_print_error("Character set information not found in '%s'. \
119
Please install the latest version of this file.",name);
123
/* TODO: Convert the character set to server system character set */
124
if (!get_charset(head[30],MYF(MY_WME)))
126
sql_print_error("Character set #%d is not supported for messagefile '%s'",
131
length=uint2korr(head+6); count=uint2korr(head+8);
133
if (count < error_messages)
136
Error message file '%s' had only %d error messages,\n\
137
but it should contain at least %d error messages.\n\
138
Check that the above file is the right version for this program!",
139
name,count,error_messages);
140
VOID(my_close(file,MYF(MY_WME)));
144
x_free((uchar*) *point); /* Free old language */
145
if (!(*point= (const char**)
146
my_malloc((size_t) (length+count*sizeof(char*)),MYF(0))))
148
funktpos=2; /* purecov: inspected */
149
goto err; /* purecov: inspected */
151
buff= (uchar*) (*point + count);
153
if (my_read(file, buff, (size_t) count*2,MYF(MY_NABP)))
155
for (i=0, pos= buff ; i< count ; i++)
157
(*point)[i]= (char*) buff+uint2korr(pos);
160
if (my_read(file, buff, length, MYF(MY_NABP)))
163
for (i=1 ; i < textcount ; i++)
165
point[i]= *point +uint2korr(head+10+i+i);
167
VOID(my_close(file,MYF(0)));
173
errmsg= "Not enough memory for messagefile '%s'";
176
errmsg= "Can't read from messagefile '%s'";
179
errmsg= "Can't find messagefile '%s'";
182
sql_print_error(errmsg, name);
185
VOID(my_close(file,MYF(MY_WME)));
191
Initiates error-messages used by my_func-library.
194
static void init_myfunc_errs()
196
init_glob_errs(); /* Initiate english errors */
197
if (!(specialflag & SPECIAL_ENGLISH))
199
EE(EE_FILENOTFOUND) = ER(ER_FILE_NOT_FOUND);
200
EE(EE_CANTCREATEFILE) = ER(ER_CANT_CREATE_FILE);
201
EE(EE_READ) = ER(ER_ERROR_ON_READ);
202
EE(EE_WRITE) = ER(ER_ERROR_ON_WRITE);
203
EE(EE_BADCLOSE) = ER(ER_ERROR_ON_CLOSE);
204
EE(EE_OUTOFMEMORY) = ER(ER_OUTOFMEMORY);
205
EE(EE_DELETE) = ER(ER_CANT_DELETE_FILE);
206
EE(EE_LINK) = ER(ER_ERROR_ON_RENAME);
207
EE(EE_EOFERR) = ER(ER_UNEXPECTED_EOF);
208
EE(EE_CANTLOCK) = ER(ER_CANT_LOCK);
209
EE(EE_DIR) = ER(ER_CANT_READ_DIR);
210
EE(EE_STAT) = ER(ER_CANT_GET_STAT);
211
EE(EE_GETWD) = ER(ER_CANT_GET_WD);
212
EE(EE_SETWD) = ER(ER_CANT_SET_WD);
213
EE(EE_DISK_FULL) = ER(ER_DISK_FULL);