home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 January / Chip_2001-01_cd1.bin / tema / mysql / mysql-3.23.28g-win-source.exe / sql / derror.cpp < prev    next >
C/C++ Source or Header  |  2000-08-31  |  5KB  |  147 lines

  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.  
  17.  
  18. /* Read language depeneded messagefile */
  19.  
  20. #include "mysql_priv.h"
  21. #include "mysys_err.h"
  22.  
  23. static void read_texts(const char *file_name,const char ***point,
  24.                uint error_messages);
  25. static void init_myfunc_errs(void);
  26.  
  27.     /* Read messages from errorfile */
  28.  
  29. void init_errmessage(void)
  30. {
  31.   DBUG_ENTER("init_errmessage");
  32.  
  33.   read_texts(ERRMSG_FILE,&errmsg[ERRMAPP],ER_ERROR_MESSAGES);
  34.   errmesg=errmsg[ERRMAPP];        /* Init global variabel */
  35.   init_myfunc_errs();            /* Init myfunc messages */
  36.   DBUG_VOID_RETURN;
  37. }
  38.  
  39.  
  40.     /* Read text from packed textfile in language-directory */
  41.     /* If we can't read messagefile then it's panic- we can't continue */
  42.  
  43. static void read_texts(const char *file_name,const char ***point,
  44.                uint error_messages)
  45. {
  46.   register uint i;
  47.   uint ant,funktpos,length,textant;
  48.   File file;
  49.   char name[FN_REFLEN];
  50.   const char *buff;
  51.   uchar head[32],*pos;
  52.   DBUG_ENTER("read_texts");
  53.  
  54.   LINT_INIT(buff);
  55.   funktpos=0;
  56.   if ((file=my_open(fn_format(name,file_name,language,"",4),
  57.             O_RDONLY | O_SHARE | O_BINARY,
  58.             MYF(0))) < 0)
  59.     goto err; /* purecov: inspected */
  60.  
  61.   funktpos=1;
  62.   if (my_read(file,(byte*) head,32,MYF(MY_NABP))) goto err;
  63.   if (head[0] != (uchar) 254 || head[1] != (uchar) 254 ||
  64.       head[2] != 2 || head[3] != 1)
  65.     goto err; /* purecov: inspected */
  66.   textant=head[4];
  67.   length=uint2korr(head+6); ant=uint2korr(head+8);
  68.  
  69.   if (ant < error_messages)
  70.   {
  71.     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\
  72. Check that the above file is the right version for this program!\n\n",
  73.         my_progname,name,ant,error_messages);
  74.     VOID(my_close(file,MYF(MY_WME)));
  75.     clean_up();                /* Clean_up frees everything */
  76.     exit(1);                /* We can't continue */
  77.   }
  78.  
  79.   x_free((gptr) *point);        /* Free old language */
  80.   if (!(*point= (const char**)
  81.     my_malloc((uint) (length+ant*sizeof(char*)),MYF(0))))
  82.   {
  83.     funktpos=2;                    /* purecov: inspected */
  84.     goto err;                    /* purecov: inspected */
  85.   }
  86.   buff= (char*) (*point + ant);
  87.  
  88.   if (my_read(file,(byte*) buff,(uint) ant*2,MYF(MY_NABP))) goto err;
  89.   for (i=0, pos= (uchar*) buff ; i< ant ; i++)
  90.   {
  91.     (*point)[i]=buff+uint2korr(pos);
  92.     pos+=2;
  93.   }
  94.   if (my_read(file,(byte*) buff,(uint) length,MYF(MY_NABP))) goto err;
  95.  
  96.   for (i=1 ; i < textant ; i++)
  97.   {
  98.     point[i]= *point +uint2korr(head+10+i+i);
  99.   }
  100.   VOID(my_close(file,MYF(0)));
  101.   DBUG_VOID_RETURN;
  102.  
  103. err:
  104.   switch (funktpos) {
  105.   case 2:
  106.     buff="\n%s: Fatal error: Not enough memory for messagefile '%s'\n\n";
  107.     break;
  108.   case 1:
  109.     buff="\n%s: Fatal error: Can't read from messagefile '%s'\n\n";
  110.     break;
  111.   default:
  112.     buff="\n%s: Fatal error: Can't find messagefile '%s'\n\n";
  113.     break;
  114.   }
  115.   if (file != FERR)
  116.     VOID(my_close(file,MYF(MY_WME)));
  117.   fprintf(stderr,buff,my_progname,name);
  118.   clean_up();                /* Clean_up frees everything */
  119.   exit(1);                /* We can't continue */
  120. } /* read_texts */
  121.  
  122.  
  123.     /* Initiates error-messages used by my_func-library */
  124.  
  125. static void init_myfunc_errs()
  126. {
  127.   init_glob_errs();            /* Initiate english errors */
  128.   if (!(specialflag & SPECIAL_ENGLISH))
  129.   {
  130.     globerrs[EE_FILENOTFOUND % ERRMOD]    = ER(ER_FILE_NOT_FOUND);
  131.     globerrs[EE_CANTCREATEFILE % ERRMOD]= ER(ER_CANT_CREATE_FILE);
  132.     globerrs[EE_READ % ERRMOD]        = ER(ER_ERROR_ON_READ);
  133.     globerrs[EE_WRITE % ERRMOD]        = ER(ER_ERROR_ON_WRITE);
  134.     globerrs[EE_BADCLOSE % ERRMOD]    = ER(ER_ERROR_ON_CLOSE);
  135.     globerrs[EE_OUTOFMEMORY % ERRMOD]    = ER(ER_OUTOFMEMORY);
  136.     globerrs[EE_DELETE % ERRMOD]    = ER(ER_CANT_DELETE_FILE);
  137.     globerrs[EE_LINK % ERRMOD]        = ER(ER_ERROR_ON_RENAME);
  138.     globerrs[EE_EOFERR % ERRMOD]    = ER(ER_UNEXPECTED_EOF);
  139.     globerrs[EE_CANTLOCK % ERRMOD]    = ER(ER_CANT_LOCK);
  140.     globerrs[EE_DIR % ERRMOD]        = ER(ER_CANT_READ_DIR);
  141.     globerrs[EE_STAT % ERRMOD]        = ER(ER_CANT_GET_STAT);
  142.     globerrs[EE_GETWD % ERRMOD]        = ER(ER_CANT_GET_WD);
  143.     globerrs[EE_SETWD % ERRMOD]        = ER(ER_CANT_SET_WD);
  144.     globerrs[EE_DISK_FULL % ERRMOD]    = ER(ER_DISK_FULL);
  145.   }
  146. }
  147.