GRASS Programmer's Manual  6.5.svn(2014)-r66266
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
lib/db/dbmi_base/error.c
Go to the documentation of this file.
1 #include <string.h>
2 #include <stdlib.h>
3 #include <grass/dbmi.h>
4 
5 #include <errno.h>
6 
7 static int err_flag = 0;
8 static int err_code = DB_OK;
9 static char *err_msg = 0;
10 static int auto_print_errors = 1;
11 static int auto_print_protocol_errors = 1;
12 static void (*user_print_function) (const char *);
13 
14 static char *who = NULL;
15 
22 void db_on_error(void (*f) (const char *))
23 {
24  user_print_function = f;
25 }
26 
33 void db_set_error_who(const char *me)
34 {
35  if (who)
36  db_free(who);
37  who = db_store(me);
38 }
39 
46 const char *db_get_error_who(void)
47 {
48  return who ? who : "";
49 }
50 
57 void db_error(const char *s)
58 {
59  if (s == NULL)
60  s = "<NULL error message>";
61  if (err_msg)
62  db_free(err_msg);
63  err_msg = db_store(s);
64  err_flag = 1;
65  if (auto_print_errors)
67  err_code = DB_FAILED;
68 }
69 
77 {
78  int flag;
79 
80  flag = auto_print_errors;
81  auto_print_errors = auto_print_protocol_errors;
82  db_error("dbmi: Protocol error");
83  auto_print_errors = flag;
84  err_code = DB_PROTOCOL_ERR;
85 }
86 
93 void db_syserror(const char *s)
94 {
95  char lead[1024];
96  char msg[1024];
97 
98 
99  err_flag = 0;
100  if (errno <= 0)
101  return;
102 
103  *lead = 0;
104  if (who)
105  sprintf(lead, "%s: ", who);
106 
107  if (errno > 0)
108  sprintf(msg, "%s%s: %s", lead, strerror(errno), s);
109 
110  db_error(msg);
111 }
112 
120 {
121  return err_flag ? err_code : DB_OK;
122 }
123 
130 void db_memory_error(void)
131 {
132  db_error("dbmi: Out of Memory");
133  err_code = DB_MEMORY_ERR;
134 }
135 
143 {
144  char msg[128];
145 
146  sprintf(msg, "dbmi: %s() not implemented", name);
147  db_error(msg);
148  err_code = DB_NOPROC;
149 }
150 
158 {
159  char msg[128];
160 
161  sprintf(msg, "dbmi: Invalid procedure %d", procnum);
162  db_error(msg);
163  err_code = DB_NOPROC;
164 }
165 
172 void db_clear_error(void)
173 {
174  err_flag = 0;
175  err_code = DB_OK;
176  errno = 0; /* clearn system errno as well */
177 }
178 
185 void db_print_error(void)
186 {
187  char lead[1024];
188 
189  if (!err_flag)
190  return;
191 
192  *lead = 0;
193  if (who)
194  sprintf(lead, "%s: ", who);
195 
196  if (user_print_function) {
197  char buf[1024];
198 
199  sprintf(buf, "%s%s\n", lead, err_msg);
200  user_print_function(buf);
201  }
202  else
203  fprintf(stderr, "%s%s\n", lead, err_msg);
204 }
205 
206 
207 static int debug_on = 0;
208 
215 void db_debug_on(void)
216 {
217  debug_on = 1;
218 }
219 
226 void db_debug_off(void)
227 {
228  debug_on = 0;
229 }
230 
237 void db_debug(const char *s)
238 {
239  if (debug_on)
240  fprintf(stderr, "debug(%s): %s\n", who ? who : "", s ? s : "<NULL>");
241 }
242 
249 const char *db_get_error_msg(void)
250 {
251  return err_flag ? err_msg : (const char *)NULL;
252 }
253 
261 {
262  auto_print_errors = flag;
263  auto_print_protocol_errors = flag;
264 }
265 
273 {
274  auto_print_protocol_errors = flag;
275 }
const char * db_get_error_msg(void)
sprintf(buf2,"%s", G3D_CATS_ELEMENT)
void db_debug_on(void)
string name
Definition: render.py:1314
void db_auto_print_protocol_errors(int flag)
void db_auto_print_errors(int flag)
void db_protocol_error(void)
void db_error(const char *s)
void db_memory_error(void)
void db_noproc_error(procnum)
void db_on_error(void(*f)(const char *))
void db_print_error(void)
void db_syserror(const char *s)
int db_get_error_code(void)
void db_procedure_not_implemented(const char *name)
void db_set_error_who(const char *me)
flag
Definition: tools.py:1403
void db_clear_error(void)
void db_debug(const char *s)
char buf[GNAME_MAX+sizeof(G3D_DIRECTORY)+2]
Definition: g3drange.c:62
return NULL
Definition: dbfopen.c:1394
tuple msg
Definition: wxnviz.py:32
char * db_store(const char *s)
int errno
void db_debug_off(void)
int procnum
Definition: procs.h:34
const char * db_get_error_who(void)
void db_free(void *s)