35 #include <sys/types.h>
63 if (
xCS.Attr.Cks.fmTime !=
Stat.st_mtime) stale =
" stale";
68 xCS.Attr.Cks.Get(csBuff,
sizeof(csBuff));
72 std::cout <<
xCS.Attr.Cks.Name<<
' '<<csBuff<<stale<<std::endl;
83 snprintf(eBuff,
sizeof(eBuff),
"%s", strerror(rc));
84 *eBuff = tolower(*eBuff);
85 std::cerr<<
"xrdcks: Unable to "<<
csCmd<<
" checksum; "<<eBuff<<std::endl;
95 std::cerr <<
"Usage: xrdcks <path> <cksname> [<cksval>|delete]\n"
97 "Where: <path> - path to the target file\n"
98 " <cksname> - checksum name (e.g. adler32)\n"
99 " <cksval> - ASCII hex of value (even number of digits)"
108 int main(
int argc,
char *argv[])
110 char *csName, *csPath, *csVal;
116 {
if (argc > 1 && !strcmp(argv[1],
"-h"))
Usage(0);
123 if (!
xCS.Attr.Cks.Set(csName))
124 {std::cerr <<
"xrdsetcks: checksum name '"<<csName<<
"' is invalid"<<std::endl;
130 if (argc < 3)
csCmd =
"query";
131 else {csVal = argv[3];
132 if (!strcmp(
"delete", csVal))
csCmd =
"delete";
134 if (strncmp(
"0x", csVal, 2)) csVal += 2;
135 if (!
xCS.Attr.Cks.Set(csVal, strlen(csVal)))
136 {std::cerr <<
"xrdcks: checksum value is invalid"
152 if (strcmp(
xCS.Attr.Cks.Name, csName))
Unable(EILSEQ);
166 xCS.Attr.Cks.fmTime =
static_cast<long long>(
Stat.st_mtime);
167 xCS.Attr.Cks.csTime = 0;
int main(int argc, char *argv[])
XrdOucXAttr< XrdCksXAttr > xCS
int stat(const char *path, struct stat *buf)