16 #define HASH_BUF_SZ (1024*1024)
19 const char* _file_name,
21 const char* _hash_scheme ) {
27 "chksumLocFile :: null input param - %p %p %p",
45 if ( strlen(
env.rodsDefaultHashScheme ) > 0 ) {
46 env_scheme =
env.rodsDefaultHashScheme;
52 std::string env_policy;
53 if ( strlen(
env.rodsMatchHashPolicy ) > 0 ) {
54 env_policy =
env.rodsMatchHashPolicy;
66 std::string hash_scheme;
68 strlen( _hash_scheme ) > 0 &&
69 strlen( _hash_scheme ) <
NAME_LEN ) {
70 hash_scheme = _hash_scheme;
80 hash_scheme = env_scheme;
101 std::string final_scheme( env_scheme );
102 if ( !hash_scheme.empty() ) {
103 if ( !env_policy.empty() ) {
105 if ( env_scheme != hash_scheme ) {
111 final_scheme = hash_scheme;
128 std::ifstream in_file(
130 std::ios::in | std::ios::binary );
131 if ( !in_file.is_open() ) {
136 "chksumLocFile - fopen failed for %s, status = %d",
142 std::string buffer_read;
145 while ( in_file.read( &buffer_read[0],
HASH_BUF_SZ ) ) {
146 hasher.
update( buffer_read );
149 if ( in_file.eof() ) {
150 if ( in_file.gcount() > 0 ) {
151 buffer_read.resize( in_file.gcount() );
152 hasher.
update( buffer_read );
159 "chksumLocFile - read() failed for %s, status = %d",
180 const char *myChksum,
191 if ( chksumStr ==
NULL ) {
192 chksumStr = chksumBuf;
199 if ( strcmp( myChksum, chksumStr ) != 0 ) {
208 char *outPtr = digestStr;
210 for ( i = 0; i < 16; i++ ) {
211 sprintf( outPtr,
"%02x", digest[i] );
232 if ( condInput ==
NULL || chksumFlag ==
NULL || fileName ==
NULL ) {
234 "rcChksumLocFile: NULL input" );
242 "rcChksumLocFile: bad input chksumFlag %s", chksumFlag );
251 addKeyVal( condInput, chksumFlag, chksumStr );