58 static const char libSfx[] =
"/libXrdCksCalc%s.so";
63 if (vInfo.vNum != myVersion.vNum
66 snprintf(buff,
sizeof(buff),
"Version %s is incompatible with %s.",
67 vInfo.vStr, myVersion.vStr);
68 verMsg = strdup(buff); urVersion = 0;
76 csTab[0].Name = strdup(
"adler32");
77 csTab[1].Name = strdup(
"crc32");
78 csTab[2].Name = strdup(
"md5");
85 ldPath = (
char *)malloc(n+
sizeof(libSfx)+1);
86 k = (libPath[n-1] ==
'/');
87 strcpy(ldPath, libPath);
88 strcpy(ldPath+n, libSfx+k);
89 }
else ldPath = strdup(libSfx+1);
115 char *eBuff,
int eBlen,
bool orig)
128 if (verMsg) {
if (eBuff) strncpy(eBuff, verMsg, eBlen);
return 0;}
132 if ((csIP = Find(csName)))
134 {
if (!strcmp(
"adler32", csIP->Name))
136 else if (!strcmp(
"crc32", csIP->Name))
138 else if (!strcmp(
"md5", csIP->Name))
140 else {
if (eBuff) snprintf(eBuff, eBlen,
"Logic error configuring %s "
141 "checksum.", csName);
145 return (orig ? csIP->Obj : csIP->Obj->
New());
150 if (csLast+1 >= csMax)
151 {
if (eBuff) strncpy(eBuff,
"Maximum number of checksums loaded.", eBlen);
157 snprintf(ldBuff,
sizeof(ldBuff), ldPath, csName);
161 if (!(myPin =
new XrdOucPinLoader(eBuff,eBlen,urVersion,
"ckslib",ldBuff)))
167 (myPin->
Resolve(
"XrdCksCalcInit"))))
168 {myPin->
Unload(
true);
return 0;}
172 if (!(csObj = ep(0, 0, csName, csParms)))
174 snprintf(eBuff, eBlen,
"%s checksum initialization failed.", csName);
181 if (strcmp(csName, csObj->Type(n)))
183 snprintf(eBuff, eBlen,
"%s cksum plugin returned wrong name - %s",
184 csName, csObj->Type(n));
193 csTab[csLast].Name = strdup(csName);
194 csTab[csLast].Obj = csObj;
195 csTab[csLast].Plugin = myPin->
Export();
199 return (orig ? csObj : csObj->New());