/******************************************************************************/
/* */
/* X r d S u t P F E n t r y . c c */
/* */
/* (c) 2012 by the Board of Trustees of the Leland Stanford, Jr., University */
/* Produced by Gerri Ganis for CERN */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
#include
#include
#include
#include "XrdSutAux.hh"
#include "XrdSutPFEntry.hh"
//__________________________________________________________________
XrdSutPFBuf::XrdSutPFBuf(char *b, kXR_int32 l)
{
// Constructor
len = 0;
buf = 0;
if (b) {
buf = b;
len = l;
}
}
//__________________________________________________________________
XrdSutPFBuf::XrdSutPFBuf(const XrdSutPFBuf &b)
{
//Copy constructor
buf = 0;
len = 0;
if (b.buf) {
buf = new char[b.len];
if (buf) {
memcpy(buf,b.buf,b.len);
len = b.len;
}
}
}
//__________________________________________________________________
void XrdSutPFBuf::SetBuf(const char *b, kXR_int32 l)
{
// Set the buffer
len = 0;
if (buf) {
delete[] buf;
buf = 0;
}
if (b && l > 0) {
buf = new char[l];
if (buf) {
memcpy(buf,b,l);
len = l;
}
}
}
//____________________________________________________________________
XrdSutPFEntry::XrdSutPFEntry(const char *n, short st, short cn,
kXR_int32 mt)
{
// Constructor
name = 0;
status = st;
cnt = cn;
mtime = (mt > 0) ? mt : (kXR_int32)time(0);
if (n) {
name = new char[strlen(n)+1];
if (name)
strcpy(name,n);
}
}
//_____________________________________________________________________
XrdSutPFEntry::XrdSutPFEntry(const XrdSutPFEntry &e) : buf1(e.buf1),
buf2(e.buf2), buf3(e.buf3), buf4(e.buf4)
{
// Copy constructor
name = 0;
status = e.status;
cnt = e.cnt;
mtime = e.mtime;
if (e.name) {
name = new char[strlen(e.name)+1];
if (name)
strcpy(name,e.name);
}
}
//____________________________________________________________________
void XrdSutPFEntry::Reset()
{
// Resetting entry
if (name)
delete[] name;
name = 0;
status = 0;
cnt = 0;
mtime = (kXR_int32)time(0);
buf1.SetBuf();
buf2.SetBuf();
buf3.SetBuf();
buf4.SetBuf();
}
//_____________________________________________________________________
void XrdSutPFEntry::SetName(const char *n)
{
// Set the name
if (name) {
delete[] name;
name = 0;
}
if (n) {
name = new char[strlen(n)+1];
if (name)
strcpy(name,n);
}
}
//_____________________________________________________________________
char *XrdSutPFEntry::AsString() const
{
// Return a string with serialized information
// For print purposes
// The output string points to a static buffer, so it must
// not be deleted by the caller
static char pbuf[2048];
char smt[20] = {0};
XrdSutTimeString(mtime,smt);
sprintf(pbuf,"st:%d cn:%d buf:%d,%d,%d,%d modified:%s name:%s",
status,cnt,buf1.len,buf2.len,buf3.len,buf4.len,smt,name);
return pbuf;
}
//______________________________________________________________________________
XrdSutPFEntry& XrdSutPFEntry::operator=(const XrdSutPFEntry &e)
{
// Assign entry e to local entry.
SetName(name);
status = e.status;
cnt = e.cnt; // counter
mtime = e.mtime; // time of last modification / creation
buf1.SetBuf(e.buf1.buf);
buf2.SetBuf(e.buf2.buf);
buf3.SetBuf(e.buf3.buf);
buf4.SetBuf(e.buf4.buf);
return (*this);
}