From ace7f453c8c20df3961104ac2a2d7e61afa3137f Mon Sep 17 00:00:00 2001 From: skshetry <18718008+skshetry@users.noreply.github.com> Date: Wed, 6 Dec 2023 09:05:18 +0545 Subject: [PATCH] reflink cleanup: use errcheck (#239) --- src/dvc_objects/fs/system.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/dvc_objects/fs/system.py b/src/dvc_objects/fs/system.py index 5becbd2..f625537 100644 --- a/src/dvc_objects/fs/system.py +++ b/src/dvc_objects/fs/system.py @@ -59,8 +59,16 @@ def _cdll(name): "'clonefile' not supported by the standard library", ) + def errcheck(ret, _func, _args): + if ret: + err = ctypes.get_errno() + msg = os.strerror(err) + raise OSError(err, msg) + return ret + clonefile.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_int] clonefile.restype = ctypes.c_int + clonefile.errcheck = errcheck return clonefile @@ -71,15 +79,11 @@ def _cdll(name): clonefile = _clonefile() def reflink(src, dst): - ret = clonefile( + clonefile( ctypes.c_char_p(os.fsencode(src)), ctypes.c_char_p(os.fsencode(dst)), ctypes.c_int(0), ) - if ret: - err = ctypes.get_errno() - msg = os.strerror(err) - raise OSError(err, msg) elif sys.platform == "linux": import fcntl # pylint: disable=import-error