XRootD
XrdOucECMsg.hh
Go to the documentation of this file.
1 #ifndef __OUC_ECMSG_H__
2 #define __OUC_ECMSG_H__
3 /******************************************************************************/
4 /* */
5 /* X r d O u c E C M s g . h h */
6 /* */
7 /* (c) 2023 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* Produced by Andrew Hanushevsky for Stanford University under contract */
9 /* DE-AC02-76-SFO0515 with the Department of Energy */
10 /* */
11 /* This file is part of the XRootD software suite. */
12 /* */
13 /* XRootD is free software: you can redistribute it and/or modify it under */
14 /* the terms of the GNU Lesser General Public License as published by the */
15 /* Free Software Foundation, either version 3 of the License, or (at your */
16 /* option) any later version. */
17 /* */
18 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21 /* License for more details. */
22 /* */
23 /* You should have received a copy of the GNU Lesser General Public License */
24 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26 /* */
27 /* The copyright holder's institutional names and contributor's names may not */
28 /* be used to endorse or promote products derived from this software without */
29 /* specific prior written permission of the institution or contributor. */
30 /* */
31 /******************************************************************************/
32 
33 #include <cstdarg>
34 #include <string>
35 
36 #include "XrdSys/XrdSysPthread.hh"
37 
39 {
40 public:
41 
42 //-----------------------------------------------------------------------------
50 //-----------------------------------------------------------------------------
51 
52 XrdOucECMsg& Append(char dlm='\n')
53  {ecMTX.Lock(); Delim = dlm; ecMTX.UnLock(); return *this;}
54 
55 //-----------------------------------------------------------------------------
62 //-----------------------------------------------------------------------------
63 
64 int Get(std::string& ecm, bool rst=true);
65 int Get() {return eCode;}
66 
67 //-----------------------------------------------------------------------------
71 //-----------------------------------------------------------------------------
72 
73 bool hasMsg() const {ecMTX.Lock(); bool hm = !ecMsg.empty();
74  ecMTX.UnLock(); return hm;
75  }
76 
77 //-----------------------------------------------------------------------------
81 //-----------------------------------------------------------------------------
82 
83 std::string Msg() {ecMTX.Lock(); std::string m = ecMsg; ecMTX.UnLock();
84  return m;
85  }
86 
87 //-----------------------------------------------------------------------------
94 //-----------------------------------------------------------------------------
95 
96 void Msg(const char* pfx, const char* txt1,
97  const char* txt2=0, const char* txt3=0,
98  const char* txt4=0, const char* txt5=0);
99 
100 //-----------------------------------------------------------------------------
109 //-----------------------------------------------------------------------------
110 
111 void Msgf(const char *pfx, const char *fmt, ...);
112 
113 //-----------------------------------------------------------------------------
122 //-----------------------------------------------------------------------------
123 
124 void MsgVA(const char *pfx, const char *fmt, std::va_list aP);
125 
126 //-----------------------------------------------------------------------------
135 //-----------------------------------------------------------------------------
136 
137 void MsgVec(const char* pfx, char const* const* vecP, int vecN);
138 
139 //-----------------------------------------------------------------------------
144 //-----------------------------------------------------------------------------
145 
146 void Set(int ecc, const char* ecm="")
147  {ecMTX.Lock(); eCode = ecc; if (ecm) ecMsg = ecm; ecMTX.UnLock();}
148 
149 void Set(int ecc, std::string& ecm)
150  {ecMTX.Lock(); eCode = ecc; ecMsg = ecm; ecMTX.UnLock();}
151 
152 //-----------------------------------------------------------------------------
160 //-----------------------------------------------------------------------------
161 
162 int SetErrno(int ecc, int ret=-1, const char *alt=0);
163 
164 //-----------------------------------------------------------------------------
166 //-----------------------------------------------------------------------------
167 
168  XrdOucECMsg& operator=(const int rhs)
169  {ecMTX.Lock(); eCode = rhs; ecMTX.UnLock(); return *this;}
170 
171  XrdOucECMsg& operator=(const std::string& rhs)
172  {ecMTX.Lock(); ecMsg = rhs; ecMTX.UnLock(); return *this;}
173 
174  XrdOucECMsg& operator=(const char* rhs)
175  {ecMTX.Lock(); ecMsg = rhs; ecMTX.UnLock(); return *this;}
176 
178  {ecMTX.Lock(); ecMsg = rhs.ecMsg; eCode = rhs.eCode; ecMTX.UnLock();
179  return *this;
180  }
181 
182  XrdOucECMsg(const char *msgid=0) : msgID(msgid), eCode(0), Delim(0) {}
184 
185 private:
186 
187 void Setup(const char *pfx, int n);
188 mutable
189 XrdSysMutex ecMTX;
190 const char* msgID;
191 std::string ecMsg;
192 int eCode;
193 char Delim;
194 };
195 #endif
bool hasMsg() const
Definition: XrdOucECMsg.hh:73
XrdOucECMsg & operator=(const std::string &rhs)
Definition: XrdOucECMsg.hh:171
XrdOucECMsg & operator=(const int rhs)
Assignment operators for convenience.
Definition: XrdOucECMsg.hh:168
void MsgVA(const char *pfx, const char *fmt, std::va_list aP)
Definition: XrdOucECMsg.cc:116
std::string Msg()
Definition: XrdOucECMsg.hh:83
int SetErrno(int ecc, int ret=-1, const char *alt=0)
Definition: XrdOucECMsg.cc:152
XrdOucECMsg & operator=(const char *rhs)
Definition: XrdOucECMsg.hh:174
XrdOucECMsg(const char *msgid=0)
Definition: XrdOucECMsg.hh:182
void Set(int ecc, const char *ecm="")
Definition: XrdOucECMsg.hh:146
void Set(int ecc, std::string &ecm)
Definition: XrdOucECMsg.hh:149
void MsgVec(const char *pfx, char const *const *vecP, int vecN)
Definition: XrdOucECMsg.cc:137
XrdOucECMsg & Append(char dlm='\n')
Definition: XrdOucECMsg.hh:52
XrdOucECMsg & operator=(XrdOucECMsg &rhs)
Definition: XrdOucECMsg.hh:177
void Msgf(const char *pfx, const char *fmt,...)
Definition: XrdOucECMsg.cc:93