Hauptseite   Klassenhierarchie   Übersicht   Auflistung der Dateien   Datenstruktur-Elemente   Datei-Elemente  

errorclass.h

gehe zur Dokumentation dieser Datei
00001 
00011 #ifndef ERRORCLASS_H
00012 #define ERRORCLASS_H
00013 #include<stdarg.h>
00014 #include<stdio.h>
00015 #include<string.h>
00016 
00017 // Fehlerbehandlungsklassen
00021 class Error
00022 {
00023 protected:
00024   char errmsg[128];
00025 public:
00026   Error() {}
00030   Error(const char *msg,...)
00031       {
00032           va_list args;
00033           va_start(args,msg);
00034           vsnprintf(errmsg,128,msg,args);
00035           va_end(args);
00036       }
00040   const char *what() { return errmsg; }
00041 };
00042 
00046 class Systemerror: public Error
00047 {
00048     int errnr;
00049     const char *icall;
00050 public:
00051     Systemerror() {}
00059     Systemerror(int err,char *pcall,char *msg,...)
00060         {
00061             va_list args;
00062             va_start(args,msg);
00063             init(err,pcall,msg,args);
00064             va_end(args);
00065         }
00066 
00067     
00075     void init(int err,char *pcall,char *msg,va_list args)
00076         {
00077             icall = pcall;
00078             char format_sp[128];
00079             char *format=msg;
00080             char *pm=strstr(msg,"%m");
00081             register int l = pm-format;
00082             if(pm!=NULL && l<120)
00083             {
00084                 char *pq,*pz;
00085                 strncpy(format_sp,msg,l);
00086                 pq = strerror(err);
00087                 pz=format_sp+l;
00088                 while(pz-format_sp < 128 && *pq != '\0') *pz++=*pq++;
00089                 pq=pm+2;
00090                 while(pz-format_sp < 128 && *pq != '\0') *pz++=*pq++;
00091                 *pz='\0';
00092                 format = format_sp;
00093             }
00094             vsnprintf(errmsg,128,format,args);
00095         }
00099     int errornr() { return errnr; }
00103     const char *call() { return icall; }
00104 };
00105 
00110 class Syntaxerror: public Error
00111 {
00112 public:
00113   Syntaxerror(const char *m,...):Error()
00114     {
00115       va_list args;
00116       va_start(args,m);
00117       vsnprintf(errmsg,128,m,args);
00118       va_end(args);
00119     };
00120 };
00121 
00125 class Databaseerror: public Error
00126 {
00127   long icode;
00128 public:
00129   Databaseerror(const char *m):Error(m){};
00130   Databaseerror(const char *dbname,long code,const char *m,...):Error() 
00131     {
00132       char format[128];
00133       va_list args;
00134       va_start(args,m);
00135       snprintf(format,128,"%s-CODE %ld: %s",dbname,code,m);
00136       vsnprintf(errmsg,128,format,args);
00137       va_end(args);
00138       icode=code;
00139     }
00140   long code() const { return icode; }
00141 };
00142 #endif

Erzeugt am Sat Nov 29 19:45:39 2003 für rams_persito von doxygen1.2.14 geschrieben von Dimitri van Heesch, © 1997-2002