derror.cc
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    
  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; either version 2 of the License, or
  6.    (at your option) any later version.
  7.    
  8.    This program is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.    GNU General Public License for more details.
  12.    
  13.    You should have received a copy of the GNU General Public License
  14.    along with this program; if not, write to the Free Software
  15.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  16. /* Read language depeneded messagefile */
  17. #include "mysql_priv.h"
  18. #include "mysys_err.h"
  19. static void read_texts(const char *file_name,const char ***point,
  20.        uint error_messages);
  21. static void init_myfunc_errs(void);
  22. /* Read messages from errorfile */
  23. void init_errmessage(void)
  24. {
  25.   DBUG_ENTER("init_errmessage");
  26.   read_texts(ERRMSG_FILE,&my_errmsg[ERRMAPP],ER_ERROR_MESSAGES);
  27.   errmesg=my_errmsg[ERRMAPP]; /* Init global variabel */
  28.   init_myfunc_errs(); /* Init myfunc messages */
  29.   DBUG_VOID_RETURN;
  30. }
  31. /* Read text from packed textfile in language-directory */
  32. /* If we can't read messagefile then it's panic- we can't continue */
  33. static void read_texts(const char *file_name,const char ***point,
  34.        uint error_messages)
  35. {
  36.   register uint i;
  37.   uint ant,funktpos,length,textant;
  38.   File file;
  39.   char name[FN_REFLEN];
  40.   const char *buff;
  41.   uchar head[32],*pos;
  42.   DBUG_ENTER("read_texts");
  43.   LINT_INIT(buff);
  44.   funktpos=0;
  45.   if ((file=my_open(fn_format(name,file_name,language,"",4),
  46.     O_RDONLY | O_SHARE | O_BINARY,
  47.     MYF(0))) < 0)
  48.     goto err; /* purecov: inspected */
  49.   funktpos=1;
  50.   if (my_read(file,(byte*) head,32,MYF(MY_NABP))) goto err;
  51.   if (head[0] != (uchar) 254 || head[1] != (uchar) 254 ||
  52.       head[2] != 2 || head[3] != 1)
  53.     goto err; /* purecov: inspected */
  54.   textant=head[4];
  55.   length=uint2korr(head+6); ant=uint2korr(head+8);
  56.   if (ant < error_messages)
  57.   {
  58.     fprintf(stderr,"n%s: Fatal error: Error message file '%s' had only %d error messages, but it should have at least %d error messages.n
  59. Check that the above file is the right version for this program!nn",
  60.     my_progname,name,ant,error_messages);
  61.     VOID(my_close(file,MYF(MY_WME)));
  62.     clean_up(); /* Clean_up frees everything */
  63.     exit(1); /* We can't continue */
  64.   }
  65.   x_free((gptr) *point); /* Free old language */
  66.   if (!(*point= (const char**)
  67. my_malloc((uint) (length+ant*sizeof(char*)),MYF(0))))
  68.   {
  69.     funktpos=2; /* purecov: inspected */
  70.     goto err; /* purecov: inspected */
  71.   }
  72.   buff= (char*) (*point + ant);
  73.   if (my_read(file,(byte*) buff,(uint) ant*2,MYF(MY_NABP))) goto err;
  74.   for (i=0, pos= (uchar*) buff ; i< ant ; i++)
  75.   {
  76.     (*point)[i]=buff+uint2korr(pos);
  77.     pos+=2;
  78.   }
  79.   if (my_read(file,(byte*) buff,(uint) length,MYF(MY_NABP))) goto err;
  80.   for (i=1 ; i < textant ; i++)
  81.   {
  82.     point[i]= *point +uint2korr(head+10+i+i);
  83.   }
  84.   VOID(my_close(file,MYF(0)));
  85.   DBUG_VOID_RETURN;
  86. err:
  87.   switch (funktpos) {
  88.   case 2:
  89.     buff="n%s: Fatal error: Not enough memory for messagefile '%s'nn";
  90.     break;
  91.   case 1:
  92.     buff="n%s: Fatal error: Can't read from messagefile '%s'nn";
  93.     break;
  94.   default:
  95.     buff="n%s: Fatal error: Can't find messagefile '%s'nn";
  96.     break;
  97.   }
  98.   if (file != FERR)
  99.     VOID(my_close(file,MYF(MY_WME)));
  100.   fprintf(stderr,buff,my_progname,name);
  101.   clean_up(); /* Clean_up frees everything */
  102.   exit(1); /* We can't continue */
  103. } /* read_texts */
  104. /* Initiates error-messages used by my_func-library */
  105. static void init_myfunc_errs()
  106. {
  107.   init_glob_errs(); /* Initiate english errors */
  108.   if (!(specialflag & SPECIAL_ENGLISH))
  109.   {
  110.     globerrs[EE_FILENOTFOUND % ERRMOD] = ER(ER_FILE_NOT_FOUND);
  111.     globerrs[EE_CANTCREATEFILE % ERRMOD]= ER(ER_CANT_CREATE_FILE);
  112.     globerrs[EE_READ % ERRMOD] = ER(ER_ERROR_ON_READ);
  113.     globerrs[EE_WRITE % ERRMOD] = ER(ER_ERROR_ON_WRITE);
  114.     globerrs[EE_BADCLOSE % ERRMOD] = ER(ER_ERROR_ON_CLOSE);
  115.     globerrs[EE_OUTOFMEMORY % ERRMOD] = ER(ER_OUTOFMEMORY);
  116.     globerrs[EE_DELETE % ERRMOD] = ER(ER_CANT_DELETE_FILE);
  117.     globerrs[EE_LINK % ERRMOD] = ER(ER_ERROR_ON_RENAME);
  118.     globerrs[EE_EOFERR % ERRMOD] = ER(ER_UNEXPECTED_EOF);
  119.     globerrs[EE_CANTLOCK % ERRMOD] = ER(ER_CANT_LOCK);
  120.     globerrs[EE_DIR % ERRMOD] = ER(ER_CANT_READ_DIR);
  121.     globerrs[EE_STAT % ERRMOD] = ER(ER_CANT_GET_STAT);
  122.     globerrs[EE_GETWD % ERRMOD] = ER(ER_CANT_GET_WD);
  123.     globerrs[EE_SETWD % ERRMOD] = ER(ER_CANT_SET_WD);
  124.     globerrs[EE_DISK_FULL % ERRMOD] = ER(ER_DISK_FULL);
  125.   }
  126. }