chiark / gitweb /
fshash.in: Collect exception values using `sys.exc_info'.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 1 Jun 2024 03:18:01 +0000 (04:18 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 9 Jun 2024 11:10:59 +0000 (12:10 +0100)
fshash.in

index 5db05afca4f04af4c8d8f177453a28a770a54e41..8fb7317a9a5ea6c8aab6458ff313768e91c468b3 100644 (file)
--- a/fshash.in
+++ b/fshash.in
@@ -23,7 +23,7 @@
 ### along with rsync-backup; if not, write to the Free Software Foundation,
 ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
-from sys import argv, exit, stdin, stdout, stderr
+from sys import argv, exc_info, exit, stdin, stdout, stderr
 import errno as E
 import hashlib as H
 import optparse as OP
@@ -40,6 +40,8 @@ VERSION = '@VERSION@'
 ###--------------------------------------------------------------------------
 ### Utilities.
 
+def excval(): return exc_info()[1]
+
 QUIS = OS.path.basename(argv[0])
 
 def moan(msg):
@@ -68,17 +70,17 @@ class FileInfo (object):
       try:
         me.st = OS.lstat(file)
         me.err = None
-      except OSError, err:
+      except OSError:
         me.st = None
-        me.err = err
+        me.err = excval()
 
 def enum_walk(file, func):
 
   def dirents(name):
     try:
       return OS.listdir(name)
-    except OSError, err:
-      syserr("failed to read directory `%s': %s" % (name, err.strerror))
+    except OSError:
+      syserr("failed to read directory `%s': %s" % (name, excval().strerror))
       return []
 
   def dir(ee, dev):
@@ -165,8 +167,8 @@ def enum_rsync(f, func):
     ## Call the client.
     try:
       fi = FileInfo(name)
-    except OSError, err:
-      syserr("failed to stat `%s': %s" % (name, err.strerror))
+    except OSError:
+      syserr("failed to stat `%s': %s" % (name, excval().strerror))
       continue
     func(fi)
 
@@ -295,9 +297,9 @@ class HashCache (object):
         fi.st = OS.fstat(f.fileno())
         ##fi.st.st_size = sz
       hash = h.digest()
-    except (OSError, IOError), err:
+    except (OSError, IOError):
       fi.st = None
-      fi.err = err
+      fi.err = excval()
       return None
     hash = hash.encode('hex')
 
@@ -391,7 +393,8 @@ class LinkFormatter (GenericFormatter):
     try:
       d = OS.readlink(me.fi.name)
       return '%s -> %s' % (n, me._enc_name(d))
-    except OSError, err:
+    except OSError:
+      err = excval()
       return '%s -> <E%d %s>' % (n, err.errno, err.strerror)
 
 class DirectoryFormatter (GenericFormatter):
@@ -500,7 +503,8 @@ def clear_entry(db, lno, line):
 
   try:
     st = OS.lstat(name)
-  except OSError, e:
+  except OSError:
+    e = excval()
     moan("failed to stat `%s': %s" % (name, e.strerror))
     if e.errno != E.ENOENT: good = False
   else: