Skip to content

Commit 4693d46

Browse files
committed
Rename sum5.py to md5sum.py, because sum5.py is more interesting
as an example program
1 parent fb9653a commit 4693d46

2 files changed

Lines changed: 81 additions & 110 deletions

File tree

‎Tools/scripts/md5sum.py‎

Lines changed: 81 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,89 @@
11
#! /usr/bin/env python
22

33
"""Python utility to print MD5 checksums of argument files.
4-
5-
Works with Python 2.1 and later.
64
"""
75

8-
import sys, md5
96

10-
BLOCKSIZE = 1024*1024
7+
bufsize = 8096
8+
fnfilter = None
9+
rmode = 'r'
1110

12-
def main():
13-
args = sys.argv[1:]
14-
if not args:
15-
sys.stderr.write("usage: %s file ...\n" % sys.argv[0])
16-
sys.exit(2)
17-
for file in sys.argv[1:]:
18-
f = open(file, "rb")
19-
sum = md5.new()
11+
usage = """
12+
usage: sum5 [-b] [-t] [-l] [-s bufsize] [file ...]
13+
-b : read files in binary mode
14+
-t : read files in text mode (default)
15+
-l : print last pathname component only
16+
-s bufsize: read buffer size (default %d)
17+
file ... : files to sum; '-' or no files means stdin
18+
""" % bufsize
19+
20+
import sys
21+
import os
22+
import getopt
23+
import md5
24+
25+
def sum(*files):
26+
sts = 0
27+
if files and isinstance(files[-1], file):
28+
out, files = files[-1], files[:-1]
29+
else:
30+
out = sys.stdout
31+
if len(files) == 1 and not isinstance(files[0], str):
32+
files = files[0]
33+
for f in files:
34+
if isinstance(f, str):
35+
if f == '-':
36+
sts = printsumfp(sys.stdin, '<stdin>', out) or sts
37+
else:
38+
sts = printsum(f, out) or sts
39+
else:
40+
sts = sum(f, out) or sts
41+
return sts
42+
43+
def printsum(filename, out = sys.stdout):
44+
try:
45+
fp = open(filename, rmode)
46+
except IOError, msg:
47+
sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg))
48+
return 1
49+
if fnfilter:
50+
filename = fnfilter(filename)
51+
sts = printsumfp(fp, filename, out)
52+
fp.close()
53+
return sts
54+
55+
def printsumfp(fp, filename, out = sys.stdout):
56+
m = md5.new()
57+
try:
2058
while 1:
21-
block = f.read(BLOCKSIZE)
22-
if not block:
23-
break
24-
sum.update(block)
25-
f.close()
26-
print sum.hexdigest(), file
27-
28-
if __name__ == "__main__":
29-
main()
59+
data = fp.read(bufsize)
60+
if not data: break
61+
m.update(data)
62+
except IOError, msg:
63+
sys.stderr.write('%s: I/O error: %s\n' % (filename, msg))
64+
return 1
65+
out.write('%s %s\n' % (m.hexdigest(), filename))
66+
return 0
67+
68+
def main(args = sys.argv[1:], out = sys.stdout):
69+
global fnfilter, rmode, bufsize
70+
try:
71+
opts, args = getopt.getopt(args, 'blts:')
72+
except getopt.error, msg:
73+
sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))
74+
return 2
75+
for o, a in opts:
76+
if o == '-l':
77+
fnfilter = os.path.basename
78+
if o == '-b':
79+
rmode = 'rb'
80+
if o == '-t':
81+
rmode = 'r'
82+
if o == '-s':
83+
bufsize = int(a)
84+
if not args:
85+
args = ['-']
86+
return sum(args, out)
87+
88+
if __name__ == '__main__' or __name__ == sys.argv[0]:
89+
sys.exit(main(sys.argv[1:], sys.stdout))

‎Tools/scripts/sum5.py‎

Lines changed: 0 additions & 89 deletions
This file was deleted.

0 commit comments

Comments
 (0)