MCPcopy Create free account
hub / github.com/VirtualGL/virtualgl / MD5FileChunk

Function MD5FileChunk

util/md5hl.c:83–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

81}
82
83char *MD5FileChunk(const char *filename, char *buf, off_t ofs, off_t len)
84{
85 unsigned char buffer[BUFSIZ];
86 MD5_CTX ctx;
87 struct stat stbuf;
88 int f, i, e;
89 off_t n;
90
91 MD5Init(&ctx);
92#ifdef _WIN32
93 f = _open(filename, O_RDONLY | O_BINARY);
94#else
95 f = open(filename, O_RDONLY);
96#endif
97 if (f < 0)
98 return 0;
99 if (fstat(f, &stbuf) < 0)
100 return 0;
101 if (ofs > stbuf.st_size)
102 ofs = stbuf.st_size;
103 if ((len == 0) || (len > stbuf.st_size - ofs))
104 len = stbuf.st_size - ofs;
105 if (lseek(f, ofs, SEEK_SET) < 0)
106 return 0;
107 n = len;
108 i = 0;
109 while (n > 0) {
110 if (n > (off_t)sizeof(buffer))
111 i = read(f, buffer, sizeof(buffer));
112 else
113 i = read(f, buffer, n);
114 if (i < 0)
115 break;
116 MD5Update(&ctx, buffer, i);
117 n -= i;
118 }
119 e = errno;
120 close(f);
121 errno = e;
122 if (i < 0)
123 return 0;
124 return (MD5End(&ctx, buf));
125}

Callers 1

MD5FileFunction · 0.85

Calls 3

MD5InitFunction · 0.85
MD5UpdateFunction · 0.85
MD5EndFunction · 0.85

Tested by

no test coverage detected