XRootD
Loading...
Searching...
No Matches
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
37
39{
40public:
41
42//-----------------------------------------------------------------------------
50//-----------------------------------------------------------------------------
51
52XrdOucECMsg& Append(char dlm='\n')
53 {ecMTX.Lock(); Delim = dlm; ecMTX.UnLock(); return *this;}
54
55//-----------------------------------------------------------------------------
62//-----------------------------------------------------------------------------
63
64int Get(std::string& ecm, bool rst=true);
65int Get() {return eCode;}
66
67//-----------------------------------------------------------------------------
71//-----------------------------------------------------------------------------
72
73bool hasMsg() const {ecMTX.Lock(); bool hm = !ecMsg.empty();
74 ecMTX.UnLock(); return hm;
75 }
76
77//-----------------------------------------------------------------------------
81//-----------------------------------------------------------------------------
82
83std::string Msg() {ecMTX.Lock(); std::string m = ecMsg; ecMTX.UnLock();
84 return m;
85 }
86
87//-----------------------------------------------------------------------------
94//-----------------------------------------------------------------------------
95
96void 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
111void Msgf(const char *pfx, const char *fmt, ...);
112
113//-----------------------------------------------------------------------------
122//-----------------------------------------------------------------------------
123
124void MsgVA(const char *pfx, const char *fmt, std::va_list aP);
125
126//-----------------------------------------------------------------------------
135//-----------------------------------------------------------------------------
136
137void MsgVec(const char* pfx, char const* const* vecP, int vecN);
138
139//-----------------------------------------------------------------------------
144//-----------------------------------------------------------------------------
145
146void Set(int ecc, const char* ecm="")
147 {ecMTX.Lock(); eCode = ecc; if (ecm) ecMsg = ecm; ecMTX.UnLock();}
148
149void Set(int ecc, std::string& ecm)
150 {ecMTX.Lock(); eCode = ecc; ecMsg = ecm; ecMTX.UnLock();}
151
152//-----------------------------------------------------------------------------
160//-----------------------------------------------------------------------------
161
162int 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
185private:
186
187void Setup(const char *pfx, int n);
188mutable
189XrdSysMutex ecMTX;
190const char* msgID;
191std::string ecMsg;
192int eCode;
193char Delim;
194};
195#endif
bool hasMsg() const
void MsgVA(const char *pfx, const char *fmt, std::va_list aP)
std::string Msg()
XrdOucECMsg & operator=(const int rhs)
Assignment operators for convenience.
int SetErrno(int ecc, int ret=-1, const char *alt=0)
XrdOucECMsg(const char *msgid=0)
void Set(int ecc, const char *ecm="")
XrdOucECMsg & Append(char dlm='\n')
void Set(int ecc, std::string &ecm)
XrdOucECMsg & operator=(XrdOucECMsg &rhs)
void MsgVec(const char *pfx, char const *const *vecP, int vecN)
XrdOucECMsg & operator=(const char *rhs)
void Msgf(const char *pfx, const char *fmt,...)
XrdOucECMsg & operator=(const std::string &rhs)