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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997, 1998, 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: cxx_except.cpp,v 11.7 2000/09/21 15:05:45 dda Exp $";
  10. #endif /* not lint */
  11. #include <string.h>
  12. #include "db_cxx.h"
  13. #include "cxx_int.h"
  14. // tmpString is used to create strings on the stack
  15. //
  16. class tmpString
  17. {
  18. public:
  19. tmpString(const char *str1,
  20.   const char *str2 = 0,
  21.   const char *str3 = 0,
  22.   const char *str4 = 0,
  23.   const char *str5 = 0)
  24. {
  25. int len = strlen(str1);
  26. if (str2)
  27. len += strlen(str2);
  28. if (str3)
  29. len += strlen(str3);
  30. if (str4)
  31. len += strlen(str4);
  32. if (str5)
  33. len += strlen(str5);
  34. s_ = new char[len+1];
  35. strcpy(s_, str1);
  36. if (str2)
  37. strcat(s_, str2);
  38. if (str3)
  39. strcat(s_, str3);
  40. if (str4)
  41. strcat(s_, str4);
  42. if (str5)
  43. strcat(s_, str5);
  44. }
  45. ~tmpString()                      { delete [] s_; }
  46. operator const char *()           { return (s_); }
  47. private:
  48. char *s_;
  49. };
  50. // Note: would not be needed if we can inherit from exception
  51. // It does not appear to be possible to inherit from exception
  52. // with the current Microsoft library (VC5.0).
  53. //
  54. static char *dupString(const char *s)
  55. {
  56. char *r = new char[strlen(s)+1];
  57. strcpy(r, s);
  58. return (r);
  59. }
  60. ////////////////////////////////////////////////////////////////////////
  61. //                                                                    //
  62. //                            DbException                             //
  63. //                                                                    //
  64. ////////////////////////////////////////////////////////////////////////
  65. DbException::~DbException()
  66. {
  67. if (what_)
  68. delete [] what_;
  69. }
  70. DbException::DbException(int err)
  71. : err_(err)
  72. {
  73. what_ = dupString(db_strerror(err));
  74. }
  75. DbException::DbException(const char *description)
  76. : err_(0)
  77. {
  78. what_ = dupString(tmpString(description));
  79. }
  80. DbException::DbException(const char *prefix, int err)
  81. : err_(err)
  82. {
  83. what_ = dupString(tmpString(prefix, ": ", db_strerror(err)));
  84. }
  85. DbException::DbException(const char *prefix1, const char *prefix2, int err)
  86. : err_(err)
  87. {
  88. what_ = dupString(tmpString(prefix1, ": ", prefix2, ": ", db_strerror(err)));
  89. }
  90. DbException::DbException(const DbException &that)
  91. : err_(that.err_)
  92. {
  93. what_ = dupString(that.what_);
  94. }
  95. DbException &DbException::operator = (const DbException &that)
  96. {
  97. if (this != &that) {
  98. err_ = that.err_;
  99. if (what_)
  100. delete [] what_;
  101. what_ = 0;           // in case new throws exception
  102. what_ = dupString(that.what_);
  103. }
  104. return (*this);
  105. }
  106. int DbException::get_errno() const
  107. {
  108. return (err_);
  109. }
  110. const char *DbException::what() const
  111. {
  112. return (what_);
  113. }