XRootD
XrdCpFile Class Reference

#include <XrdCpFile.hh>

+ Collaboration diagram for XrdCpFile:

Public Types

enum  PType {
  isOther = 0 ,
  isDir ,
  isFile ,
  isStdIO ,
  isXroot ,
  isXroots ,
  isHttp ,
  isHttps ,
  isPelican ,
  isDevNull ,
  isDevZero
}
 

Public Member Functions

 XrdCpFile ()
 
 XrdCpFile (char *FSpec, struct stat &Stat, short doff, short dlen)
 
 XrdCpFile (const char *FSpec, int &badURL)
 
 ~XrdCpFile ()
 
int Extend (XrdCpFile **pLast, int &nFile, long long &nBytes)
 
int Resolve ()
 

Static Public Member Functions

static void SetMsgPfx (const char *pfx)
 

Public Attributes

short Dlen
 
short Doff
 
long long fSize
 
XrdCpFileNext
 
char * Path
 
char ProtName [8]
 
PType Protocol
 

Detailed Description

Definition at line 36 of file XrdCpFile.hh.

Member Enumeration Documentation

◆ PType

Enumerator
isOther 
isDir 
isFile 
isStdIO 
isXroot 
isXroots 
isHttp 
isHttps 
isPelican 
isDevNull 
isDevZero 

Definition at line 40 of file XrdCpFile.hh.

Constructor & Destructor Documentation

◆ XrdCpFile() [1/3]

XrdCpFile::XrdCpFile ( )
inline

Definition at line 59 of file XrdCpFile.hh.

59  : Next(0), Path(0), Doff(0), Dlen(0),
60  Protocol(isOther), fSize(0) {*ProtName = 0;}
short Doff
Definition: XrdCpFile.hh:46
PType Protocol
Definition: XrdCpFile.hh:49
long long fSize
Definition: XrdCpFile.hh:51
char * Path
Definition: XrdCpFile.hh:45
char ProtName[8]
Definition: XrdCpFile.hh:50
XrdCpFile * Next
Definition: XrdCpFile.hh:44
short Dlen
Definition: XrdCpFile.hh:47

References ProtName.

Referenced by Extend().

+ Here is the caller graph for this function:

◆ XrdCpFile() [2/3]

XrdCpFile::XrdCpFile ( const char *  FSpec,
int &  badURL 
)

Definition at line 51 of file XrdCpFile.cc.

52 {
53  static struct proto {const char *pHdr; int pHsz; PType pVal;}
54  pTab[] = {{"xroot://", 8, isXroot},
55  {"xroots://", 9, isXroots},
56  {"root://", 7, isXroot},
57  {"roots://", 8, isXroots},
58  {"http://", 7, isHttp},
59  {"pelican://", 10, isPelican},
60  {"https://", 8, isHttps}
61  };
62  static int pTnum = sizeof(pTab)/sizeof(struct proto);
63  const char *Slash;
64  int i;
65 
66 // Do some common initialization
67 //
68  Doff = 0;
69  Dlen = 0;
70  Next = 0;
71  fSize = 0;
72  badURL= 0;
73  memset(ProtName, 0, sizeof(ProtName));
74 
75 // Copy out the path and remove trailing slashes (except the last one)
76 //
77  Path = strdup(FSpec);
78  i = strlen(Path);
79  while(i) if (Path[i-1] != '/' || (i > 1 && Path[i-2] != '/')) break;
80  else Path[--i] = 0;
81 
82 // Check for stdin stdout spec
83 //
84  if (!strcmp(Path, "-"))
85  {Protocol = isStdIO;
86  return;
87  }
88 
89 // Dtermine protocol of the incoming spec
90 //
91  for (i = 0; i < pTnum; i++)
92  {if (!strncmp(FSpec, pTab[i].pHdr, pTab[i].pHsz))
93  {Protocol = pTab[i].pVal;
94  memcpy(ProtName, pTab[i].pHdr, pTab[i].pHsz-3);
95  return;
96  }
97  }
98 
99 // See if this is a file
100 //
101  Protocol = isFile;
102  if (!strncmp(Path, "file://", 7))
103  {char *pP = Path + 7;
104  if (!strncmp(pP, "localhost", 9)) memmove( Path, pP + 9, strlen( pP + 9 ) + 1 );
105  else if (*pP == '/') memmove( Path, pP, strlen( pP ) + 1 );
106  else {Protocol = isOther;
107  strcpy(ProtName, "remote");
108  return;
109  }
110  }
111 
112 // Set the default Doff and Dlen assuming non-recursive copy
113 //
114  if ((Slash = rindex(Path, '/'))) Dlen = Doff = Slash - Path + 1;
115 }

References Dlen, Doff, fSize, isFile, isHttp, isHttps, isOther, isPelican, isStdIO, isXroot, isXroots, Next, Path, ProtName, and Protocol.

◆ XrdCpFile() [3/3]

XrdCpFile::XrdCpFile ( char *  FSpec,
struct stat Stat,
short  doff,
short  dlen 
)

Definition at line 119 of file XrdCpFile.cc.

120  : Next(0), Path(FSpec), Doff(doff), Dlen(dlen),
121  Protocol(isFile), fSize(Stat.st_size)
122  {strcpy(ProtName, "file");}
struct stat Stat
Definition: XrdCks.cc:49

References ProtName.

◆ ~XrdCpFile()

XrdCpFile::~XrdCpFile ( )
inline

Definition at line 67 of file XrdCpFile.hh.

67 {if (Path) free(Path);}

References Path.

Member Function Documentation

◆ Extend()

int XrdCpFile::Extend ( XrdCpFile **  pLast,
int &  nFile,
long long &  nBytes 
)

Definition at line 128 of file XrdCpFile.cc.

129 {
131  XrdOucNSWalk::NSEnt *nP, *nnP;
132  XrdCpFile *fP, *pP = this;
133  int rc;
134  short dlen, doff = strlen(Path);
135 
136  nsObj.setMsgOn(mPfx);
137 
138  while((nP = nsObj.Index(rc)) && rc == 0)
139  {do {dlen = nP->Plen - doff;
140  fP = new XrdCpFile(nP->Path, nP->Stat, doff, dlen);
141  nFile++; nBytes += nP->Stat.st_size; nP->Path = 0;
142  pP->Next = fP; pP = fP;
143  nnP = nP->Next; delete nP;
144  } while((nP = nnP));
145  }
146 
147  if (pLast) *pLast = pP;
148  return rc;
149 }
static const int retFile
static const int Recurse
struct NSEnt * Next
Definition: XrdOucNSWalk.hh:48

References XrdCpFile(), XrdOucNSWalk::Index(), Next, XrdOucNSWalk::NSEnt::Next, Path, XrdOucNSWalk::NSEnt::Path, XrdOucNSWalk::NSEnt::Plen, XrdOucNSWalk::Recurse, XrdOucNSWalk::retFile, XrdOucNSWalk::setMsgOn(), and XrdOucNSWalk::NSEnt::Stat.

Referenced by XrdCpConfig::Config().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Resolve()

int XrdCpFile::Resolve ( )

Definition at line 155 of file XrdCpFile.cc.

156 {
157  struct stat Stat;
158 
159 // Ignore this call if this is not a file
160 //
161  if (Protocol != isFile) return 0;
162 
163 // This should exist but it might not, the caller will determine what to do
164 //
165  char *cgibeg = strchr( Path, '?' );
166  if( cgibeg ) *cgibeg = '\0';
167  if (stat(Path, &Stat)) return errno;
168  if( cgibeg ) *cgibeg = '?';
169 
170 // Find out what this really is
171 //
172  if (S_ISREG(Stat.st_mode)) fSize = Stat.st_size;
173  else if (S_ISDIR(Stat.st_mode)) Protocol = isDir;
174  else if (!strcmp(Path, "/dev/null")) Protocol = isDevNull;
175  else if (!strcmp(Path, "/dev/zero")) Protocol = isDevZero;
176  else return ENOTSUP;
177 
178 // All is well
179 //
180  return 0;
181 }
int stat(const char *path, struct stat *buf)

References fSize, isDevNull, isDevZero, isDir, isFile, Path, Protocol, Stat, and stat().

Referenced by XrdCpConfig::Config().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SetMsgPfx()

static void XrdCpFile::SetMsgPfx ( const char *  pfx)
inlinestatic

Definition at line 57 of file XrdCpFile.hh.

57 {mPfx = pfx;}

Referenced by XrdCpConfig::XrdCpConfig().

+ Here is the caller graph for this function:

Member Data Documentation

◆ Dlen

short XrdCpFile::Dlen

Definition at line 47 of file XrdCpFile.hh.

Referenced by XrdCpFile(), and main().

◆ Doff

short XrdCpFile::Doff

Definition at line 46 of file XrdCpFile.hh.

Referenced by XrdCpFile(), AdjustFileInfo(), IndexRemote(), and main().

◆ fSize

long long XrdCpFile::fSize

Definition at line 51 of file XrdCpFile.hh.

Referenced by XrdCpFile(), and Resolve().

◆ Next

◆ Path

char* XrdCpFile::Path

◆ ProtName

char XrdCpFile::ProtName[8]

Definition at line 50 of file XrdCpFile.hh.

Referenced by XrdCpFile(), XrdCpConfig::Config(), and main().

◆ Protocol

PType XrdCpFile::Protocol

Definition at line 49 of file XrdCpFile.hh.

Referenced by XrdCpFile(), XrdCpConfig::Config(), main(), and Resolve().


The documentation for this class was generated from the following files: