GRASS 8 Programmer's Manual 8.6.0dev(2026)-1878fdfec5
Loading...
Searching...
No Matches
d_error.c
Go to the documentation of this file.
1/*!
2 \file lib/db/dbmi_driver/d_error.c
3
4 \brief DBMI Library (driver) - error reporting
5
6 Taken from DB drivers.
7
8 SPDX-FileCopyrightText: 1999-2008, 2012 GRASS Development Team
9 SPDX-License-Identifier: GPL-2.0-or-later
10
11 \author Joel Jones (CERL/UIUC)
12 \author Radim Blazek
13 \author Adopted for DBMI by Martin Landa <landa.martin@gmail.com>
14 */
15
16#include <string.h>
17#include <errno.h>
18#include <grass/dbmi.h>
19#include <grass/glocale.h>
20
21/* initialize the global struct */
22struct error_state {
23 char *driver_name;
24 dbString *errMsg;
25};
26
27static struct error_state state;
28static struct error_state *st = &state;
29
30static void init(void)
31{
32 db_set_string(st->errMsg, "");
33 db_d_append_error(_("DBMI-%s driver error:"), st->driver_name);
34 db_append_string(st->errMsg, "\n");
35}
36
37/*!
38 \brief Init error message for DB driver
39
40 Initialize prefix
41
42 \param name driver name (eg. "SQLite"))
43 */
44void db_d_init_error(const char *name)
45{
46 if (!st->errMsg) {
47 st->errMsg = (dbString *)G_malloc(sizeof(dbString));
48 db_init_string(st->errMsg);
49 }
50
51 G_debug(1, "db_d_init_error(): %s", name);
52
53 st->driver_name = G_malloc(strlen(name) + 1);
54 strcpy(st->driver_name, name);
55 init();
56}
57
58/*!
59 \brief Append error message for DB driver
60
61 \param fmt formatted message
62 */
63void db_d_append_error(const char *fmt, ...)
64{
65 FILE *fp = NULL;
66 char *work = NULL;
67 int count = 0;
68 va_list ap;
69
70 va_start(ap, fmt);
71 if ((fp = tmpfile())) {
72 count = vfprintf(fp, fmt, ap);
73 if (count >= 0 && (work = G_calloc(count + 1, 1))) {
74 rewind(fp);
75 if (fread(work, 1, count, fp) != (size_t)count) {
76 if (ferror(fp))
77 G_fatal_error(_("DBMI-%s driver file reading error: %s"),
78 st->driver_name, strerror(errno));
79 }
80 db_append_string(st->errMsg, work);
81 G_free(work);
82 }
83 fclose(fp);
84 }
85 va_end(ap);
86}
87
88/*!
89 \brief Report error message for DB driver
90 */
92{
93 db_append_string(st->errMsg, "\n");
94 db_error(db_get_string(st->errMsg));
95
96 init();
97}
void init(double work[])
Definition as177.c:61
#define NULL
Definition ccmath.h:32
void db_d_append_error(const char *fmt,...)
Append error message for DB driver.
Definition d_error.c:63
void db_d_report_error(void)
Report error message for DB driver.
Definition d_error.c:91
void db_d_init_error(const char *name)
Init error message for DB driver.
Definition d_error.c:44
Main header of GRASS DataBase Management Interface.
char * db_get_string(const dbString *)
Get string.
Definition string.c:138
int db_set_string(dbString *, const char *)
Inserts string to dbString (enlarge string)
Definition string.c:39
void db_init_string(dbString *)
Initialize dbString.
Definition string.c:23
void db_error(const char *)
Report error message.
int db_append_string(dbString *, const char *)
Append string to dbString.
Definition string.c:203
void G_free(void *)
Free allocated memory.
Definition gis/alloc.c:145
#define G_calloc(m, n)
Definition defs/gis.h:137
void void void void G_fatal_error(const char *,...) __attribute__((format(printf
#define G_malloc(n)
Definition defs/gis.h:136
int G_debug(int, const char *,...) __attribute__((format(printf
#define _(str)
Definition glocale.h:10
int count
const char * name
Definition named_colr.c:6
#define strcpy
Definition parson.c:66