Line data Source code
1 : /********************************************************************\
2 :
3 : Name: mvodb.cxx
4 : Created by: K.Olchanski
5 :
6 : Contents: common functions of MVOdb ODB interface
7 :
8 : \********************************************************************/
9 :
10 : #include <stdio.h> // sprintf(), fprintf()
11 :
12 : #include "mvodb.h"
13 :
14 0 : MVOdb::~MVOdb() // dtor
15 : {
16 : // empty
17 0 : }
18 :
19 0 : static std::string toString(int value)
20 : {
21 : char buf[256];
22 0 : snprintf(buf, sizeof(buf), "%d", value);
23 0 : return buf;
24 : }
25 :
26 0 : MVOdbError::MVOdbError()
27 : {
28 0 : SetOk(this);
29 0 : }
30 :
31 1 : void SetOk(MVOdbError* error)
32 : {
33 1 : if (error) {
34 0 : error->fError = false;
35 0 : error->fErrorString = "";
36 0 : error->fPath = "";
37 0 : error->fStatus = 0;
38 : }
39 1 : }
40 :
41 2 : void SetMidasStatus(MVOdbError* error, bool print, const std::string& path, const char* midas_func_name, int status)
42 : {
43 2 : if (error) {
44 0 : error->fStatus = status;
45 0 : error->fPath = path;
46 0 : if (status == 1) {
47 0 : error->fError = false;
48 0 : error->fErrorString = "";
49 : } else {
50 0 : error->fError = true;
51 0 : error->fErrorString = "";
52 0 : error->fErrorString += "MIDAS ";
53 0 : error->fErrorString += midas_func_name;
54 0 : error->fErrorString += "()";
55 0 : error->fErrorString += " at ODB path \"";
56 0 : error->fErrorString += path;
57 0 : error->fErrorString += "\" returned status ";
58 0 : error->fErrorString += toString(status);
59 0 : if (print) {
60 0 : fprintf(stderr, "MVOdb: %s\n", error->fErrorString.c_str());
61 : }
62 : }
63 : } else {
64 2 : if (print) {
65 2 : fprintf(stderr, "MVOdb: Error: MIDAS %s() at ODB path \"%s\" returned status %d\n", midas_func_name, path.c_str(), status);
66 : }
67 : }
68 2 : }
69 :
70 0 : void SetError(MVOdbError* error, bool print, const std::string& path, const std::string& message)
71 : {
72 0 : if (error) {
73 0 : error->fStatus = 0;
74 0 : error->fPath = path;
75 0 : error->fError = true;
76 0 : error->fErrorString = "";
77 0 : error->fErrorString += message;
78 0 : error->fErrorString += " at ODB path \"";
79 0 : error->fErrorString += path;
80 0 : error->fErrorString += "\"";
81 0 : if (print) {
82 0 : fprintf(stderr, "MVOdb::SetError: %s\n", error->fErrorString.c_str());
83 : }
84 : } else {
85 0 : if (print) {
86 0 : fprintf(stderr, "MVOdb::SetError: Error: %s at ODB path \"%s\"\n", message.c_str(), path.c_str());
87 : }
88 : }
89 0 : }
90 :
91 0 : MVOdb* MakeFileDumpOdb(const char* buf, int bufsize, MVOdbError* error)
92 : {
93 : //printf("MakeFileDumpOdb: odb dump size %d, first char \'%c\'\n", bufsize, buf[0]);
94 0 : if (buf[0] == '[') {
95 : // ODB format
96 : char str[256];
97 0 : snprintf(str, sizeof(str), "MakeFileDumpOdb: old ODB dump format is not supported, sorry");
98 0 : SetError(error, false, "buffer", str);
99 0 : return MakeNullOdb();
100 0 : } else if (buf[0] == '<') {
101 : // XML format
102 0 : return MakeXmlBufferOdb(buf, bufsize, error);
103 0 : } else if (buf[0] == '{') {
104 : // JSON format
105 0 : return MakeJsonBufferOdb(buf, bufsize, error);
106 : } else {
107 : // unknown format
108 : char str[256];
109 0 : snprintf(str, sizeof(str), "MakeFileDumpOdb: unknown ODB dump format, first char is \'%c\' (%d), dump size %d",
110 0 : buf[0], buf[0], bufsize);
111 0 : SetError(error, false, "buffer", str);
112 0 : return MakeNullOdb();
113 : }
114 : }
115 :
116 : /* emacs
117 : * Local Variables:
118 : * tab-width: 8
119 : * c-basic-offset: 3
120 : * indent-tabs-mode: nil
121 : * End:
122 : */
|