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");
103
if ((file=my_open(fn_format(name,file_name,language,"",4),
104
O_RDONLY | O_SHARE | O_BINARY,
106
goto err; /* purecov: inspected */
109
if (my_read(file,(uchar*) head,32,MYF(MY_NABP))) goto err;
110
if (head[0] != (uchar) 254 || head[1] != (uchar) 254 ||
111
head[2] != 2 || head[3] != 1)
112
goto err; /* purecov: inspected */
117
sql_print_error("Character set information not found in '%s'. \
118
Please install the latest version of this file.",name);
122
/* TODO: Convert the character set to server system character set */
123
if (!get_charset(head[30],MYF(MY_WME)))
125
sql_print_error("Character set #%d is not supported for messagefile '%s'",
130
length=uint2korr(head+6); count=uint2korr(head+8);
132
if (count < error_messages)
135
Error message file '%s' had only %d error messages,\n\
136
but it should contain at least %d error messages.\n\
137
Check that the above file is the right version for this program!",
138
name,count,error_messages);
139
VOID(my_close(file,MYF(MY_WME)));
143
x_free((uchar*) *point); /* Free old language */
144
if (!(*point= (const char**)
145
my_malloc((size_t) (length+count*sizeof(char*)),MYF(0))))
147
funktpos=2; /* purecov: inspected */
148
goto err; /* purecov: inspected */
150
buff= (uchar*) (*point + count);
152
if (my_read(file, buff, (size_t) count*2,MYF(MY_NABP)))
154
for (i=0, pos= buff ; i< count ; i++)
156
(*point)[i]= (char*) buff+uint2korr(pos);
159
if (my_read(file, buff, length, MYF(MY_NABP)))
162
for (i=1 ; i < textcount ; i++)
164
point[i]= *point +uint2korr(head+10+i+i);
166
VOID(my_close(file,MYF(0)));
172
errmsg= "Not enough memory for messagefile '%s'";
175
errmsg= "Can't read from messagefile '%s'";
178
errmsg= "Can't find messagefile '%s'";
181
sql_print_error(errmsg, name);
184
VOID(my_close(file,MYF(MY_WME)));
190
Initiates error-messages used by my_func-library.
193
static void init_myfunc_errs()
195
init_glob_errs(); /* Initiate english errors */
196
if (!(specialflag & SPECIAL_ENGLISH))
198
EE(EE_FILENOTFOUND) = ER(ER_FILE_NOT_FOUND);
199
EE(EE_CANTCREATEFILE) = ER(ER_CANT_CREATE_FILE);
200
EE(EE_READ) = ER(ER_ERROR_ON_READ);
201
EE(EE_WRITE) = ER(ER_ERROR_ON_WRITE);
202
EE(EE_BADCLOSE) = ER(ER_ERROR_ON_CLOSE);
203
EE(EE_OUTOFMEMORY) = ER(ER_OUTOFMEMORY);
204
EE(EE_DELETE) = ER(ER_CANT_DELETE_FILE);
205
EE(EE_LINK) = ER(ER_ERROR_ON_RENAME);
206
EE(EE_EOFERR) = ER(ER_UNEXPECTED_EOF);
207
EE(EE_CANTLOCK) = ER(ER_CANT_LOCK);
208
EE(EE_DIR) = ER(ER_CANT_READ_DIR);
209
EE(EE_STAT) = ER(ER_CANT_GET_STAT);
210
EE(EE_GETWD) = ER(ER_CANT_GET_WD);
211
EE(EE_SETWD) = ER(ER_CANT_SET_WD);
212
EE(EE_DISK_FULL) = ER(ER_DISK_FULL);