import six

cdef extern from "sys/clonefile.h" nogil:
     int clonefile(const char * src, const char * dst, int flags)

cdef extern from "Python.h":
    ctypedef struct PyObject
    cdef PyObject *PyExc_OSError
    PyObject *PyErr_SetFromErrno(PyObject *)

cdef int _macos_clone_file(const char* src, const char* dst) except? 0:
    if clonefile(src, dst, 0) == -1:
        PyErr_SetFromErrno(PyExc_OSError)
        return 0
    return 1

def macos_clone_file(src, dst):
    return _macos_clone_file(six.ensure_binary(src), six.ensure_binary(dst)) != 0