00001 #ifndef _OSS_PATH_H
00002 #define _OSS_PATH_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <string.h>
00034
00035 class XrdOssPath
00036 {
00037 public:
00038
00039 struct fnInfo
00040 {
00041 const char *Path;
00042 const char *Sfx;
00043 char *Slash;
00044 int Plen;
00045 };
00046
00047 static const char xChar = '%';
00048
00049 static const int sfxLen = 4;
00050
00051 static int Convert(char *dst, int dln, const char *oldP, const char *newP);
00052
00053 static
00054 const char *Extract(char *path, char *lbuf, int &lbsz);
00055
00056 static char *genPath(const char *inPath, const char *cgrp, char *sfx);
00057
00058 static char *genPFN(fnInfo &Info, char *buff, int blen, const char *Path=0);
00059
00060 static char *genPFN(char *dst, int dln, const char *src);
00061
00062 static int getCname(const char *path, char *Cache, char *lbuf=0, int lbsz=0);
00063
00064 static int isXA(const char *path) {return path[strlen(path)-1] == xChar;}
00065
00066 static int InitPrefix();
00067
00068 enum theSfx {isBase =0, isAnew =1,
00069 sfxMigF=1, isFail=2, isLock =3, isPin =4, sfxMigL=4,
00070 sfxMemF=4, isMkeep=5, isMlock=6, isMmap=7, sfxMemL=7,
00071 isPfn=8, sfxLast=8, sfxNum =9
00072 };
00073
00074 static
00075 const char *Sfx[sfxNum];
00076
00077 static const int chkMem = 0x01;
00078 static const int chkMig = 0x02;
00079 static const int chkPfn = 0x04;
00080 static const int chkAll = 0x07;
00081
00082 static theSfx pathType(const char *Path, int chkWhat=chkAll);
00083
00084 static void Trim2Base(char *eP);
00085
00086 XrdOssPath() {}
00087 ~XrdOssPath() {}
00088
00089 private:
00090 static char *bin2hex(char *inbuff, int dlen, char *buff);
00091 static char *posCname(char *lbuf, int lbsz, int &cnsz);
00092
00093 static char h2c[16];
00094 static char pfnPfx[60];
00095 };
00096 #endif