Drizzled Public API Documentation

errmsg_print.cc
1 /* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3  *
4  * Copyright (C) 2008 Sun Microsystems, Inc.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; version 2 of the License.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 
20 /* This file and these functions are a stopgap until all the
21  sql_print_foo() function calls are replaced with calls to
22  errmsg_printf()
23 */
24 
25 #include <config.h>
26 
27 #include <drizzled/definitions.h>
28 #include <drizzled/errmsg_print.h>
29 #include <drizzled/plugin/error_message.h>
30 
31 #include <cerrno>
32 #include <cstring>
33 
34 namespace drizzled
35 {
36 
37 void sql_perror(const char *message)
38 {
39  char *errmsg_ptr;
40  char errmsg[STRERROR_MAX];
41  errmsg[0]= 0;
42 
43 #ifdef STRERROR_R_CHAR_P
44  errmsg_ptr= strerror_r(errno, errmsg, sizeof(errmsg));
45 #else
46  strerror_r(errno, errmsg, sizeof(errmsg));
47  errmsg_ptr= errmsg;
48 #endif
49 
50  errmsg_printf(error::ERROR, "%s: %s\n", message, errmsg_ptr);
51 
52 }
53 
54 // @todo Cap the size of message.
55 void sql_perror(const std::string &message)
56 {
57  static std::string empty;
58  sql_perror(message, empty);
59 }
60 
61 // @todo Cap the size of message/extra.
62 void sql_perror(std::string message, const std::string &extra)
63 {
64  char *errmsg_ptr;
65  char errmsg[STRERROR_MAX];
66  errmsg[0]= 0;
67 
68 #ifdef STRERROR_R_CHAR_P
69  errmsg_ptr= strerror_r(errno, errmsg, sizeof(errmsg));
70 #else
71  strerror_r(errno, errmsg, sizeof(errmsg));
72  errmsg_ptr= errmsg;
73 #endif
74 
75  if (not extra.empty())
76  {
77  if (message.at(message.size()-1) != ' ')
78  message+= " ";
79 
80  message+= "'";
81  message+= extra;
82  message+= "'";
83  }
84 
85  errmsg_printf(error::ERROR, "%s: %s\n", message.c_str(), errmsg_ptr);
86 }
87 
88 bool errmsg_printf(error::priority_t priority, char const *format, ...)
89 {
90  bool rv;
91  va_list args;
92  va_start(args, format);
93  rv= plugin::ErrorMessage::vprintf(priority, format, args);
94  va_end(args);
95  return rv;
96 }
97 
98 } /* namespace drizzled */
TODO: Rename this file - func.h is stupid.