-// $Header: /home/cvsroot/yaz++/zoom/zexcept.cpp,v 1.5 2002-10-30 09:13:12 adam Exp $
+// $Header: /home/cvsroot/yaz++/zoom/zexcept.cpp,v 1.9 2003-07-07 09:23:16 adam Exp $
// Z39.50 Exception classes
+#include <iostream>
#include <errno.h>
#include <string.h> // for strerror(), strlen(), strcpy()
-#include <stdio.h> // for sprintf()
-#include <yaz/diagbib1.h>
+#include <stdio.h>
#include "zoom.h"
code = errcode;
}
+ exception::~exception() {
+ // Nothing to do, but G++ requires this to be explicit anyway
+ }
+
int exception::errcode() const {
return code;
}
- const char *exception::errmsg() const {
+ std::string exception::errmsg() const {
static char buf[40];
sprintf(buf, "error #%d", code);
return buf;
code = errno;
}
- int systemException::errcode() const {
- return code;
- }
-
- const char *systemException::errmsg() const {
+ std::string systemException::errmsg() const {
return strerror(code);
}
- bib1Exception::bib1Exception(int errcode, const char *addinfo) :
- exception(errcode) {
- info = new char[strlen(addinfo)+1];
- strcpy((char*) info, addinfo);
- //fprintf(stderr, "made new bib1Exception 0x%lx (%d, 0x%lx=%s)\n",
- //(long) this, code, (long) info, info);
- }
-
-#if 0
- bib1Exception::bib1Exception(bib1Exception& src) :
- exception(src) {
- code = src.code;
- info = new char[strlen(src.info)+1];
- strcpy((char*) info, src.info);
- //fprintf(stderr, "copied bib1Exception 0x%lx to 0x%lx (%d, 0x%lx=%s)\n",
- //(long) &src, (long) this, code, (long) info, info);
+ bib1Exception::bib1Exception(int errcode, const std::string &addinfo) :
+ exception(errcode), info(addinfo) {
+ std::cerr << "WARNING: made bib1Exception(" << errcode << "=" <<
+ ZOOM_diag_str(errcode) << ", '" << addinfo << "')\n";
}
-#endif
bib1Exception::~bib1Exception() {
//fprintf(stderr, "deleting bib1Exception 0x%lx (%d, 0x%lx=%s)\n",
// ### Don't actually do the deletion for now. Exception
// reference semantics are too weird for me to grok so I'm
// doing The Wrong Thing in the knowledge that it will more
- // or less work -- it just leaks memory.
+ // or less work -- it just leaks memory. (Or does it?)
}
- int bib1Exception::errcode() const {
- return code;
- }
-
- const char *bib1Exception::errmsg() const {
- return diagbib1_str(code);
+ std::string bib1Exception::errmsg() const {
+ return ZOOM_diag_str(code);
}
- const char *bib1Exception::addinfo() const {
+ std::string bib1Exception::addinfo() const {
return info;
}
- queryException::queryException(int qtype, const char *source) :
- exception(qtype) {
- q = new char[strlen(source)+1];
- strcpy((char*) q, source);
- }
+ queryException::queryException(int qtype, const std::string &source) :
+ exception(qtype), q(source) {}
queryException::~queryException() {
//delete q; // ### see comment on bib1Exception destructor
}
- int queryException::errcode() const {
- return code;
- }
-
- const char *queryException::errmsg() const {
+ std::string queryException::errmsg() const {
switch (code) {
case PREFIX: return "bad prefix search";
case CCL: return "bad CCL search";
return "bad search (unknown type)";
}
- const char *queryException::addinfo() const {
+ std::string queryException::addinfo() const {
return q;
}
}