rc_t ProcessOneDoFile (ProcessOne * self) { rc_t rc = 0; KFile * mfile; PLOGMSG (klogInfo, "ProcessOneDoFile: $(F)", PLOG_S(F), self->path); rc = KFileMakeNewMD5Read (&mfile, self->file, self->md5, self->path); if (rc == 0) { const KFile * bfile; rc = KFileMakeBuf (&bfile, mfile, 64*1024); if (rc == 0) { /* add more here */ KFileRelease (bfile); } else { pLOGERR (klogErr, rc, "Failure to initiate buffer $(F)", PLOG_S(F), self->path); KFileRelease (mfile); } } else pLOGERR (klogErr, rc, "Failure to initiate MD5 summing $(F)", PLOG_S(F), self->path); return rc; }
static rc_t md5(const char* path, uint8_t digest[16], const KDirectory* dir) { const KFile* kf = NULL; rc_t rc = KDirectoryOpenFileRead(dir, &kf, "%s", path); if (rc == 0) { KFile* fnull = NULL; rc = KFileMakeNullUpdate(&fnull); if (rc == 0) { KMD5SumFmt* fmt = NULL; rc = KMD5SumFmtMakeUpdate(&fmt, fnull); if (rc == 0) { const KFile* md5 = NULL; rc = KFileMakeNewMD5Read(&md5, kf, fmt, path); if (rc == 0) { uint64_t ps = 0; char buffer[512]; size_t read = 0; do { rc = KFileRead(md5, ps, buffer, sizeof buffer, &read); if (rc == 0) { ps += read; } } while (rc == 0 && read > 0); if (rc == 0) { bool bin; rc = KMD5SumFmtFind(fmt, path, digest, &bin); } } RELEASE(KFile, md5); } RELEASE(KMD5SumFmt, fmt); } /* RELEASE(KFile, fnull); fnull is released by KMD5SumFmt* fmt */ } /* RELEASE(KFile, kf); kf is released by KFile* md5 */ return rc; }