docs: def patch(f, d, o=None):
      """
      Patch the file `f` using the delta `d`. The patched file will be written to
      `o`. If `o` is omitted, a temporary file will be used. This function returns
      the be patched file `o`. All parameters should be file-like objects. `f` is
      required to be seekable.
      """
      if o is None:
          o = tempfile.SpooledTemporaryFile(max_size=MAX_SPOOL, mode='wb+')
  
      @patch_callback
      def read_cb(opaque, pos, length, buff):
          f.seek(pos)
          size_p = ctypes.cast(length, ctypes.POINTER(ctypes.c_size_t)).contents
          size = size_p.value
          block = f.read(size)
          size_p.value = len(block)
          buff_p = ctypes.cast(buff, ctypes.POINTER(ctypes.c_char_p)).contents
          buff_p.value = block
          return RS_DONE
  
      job = _librsync.rs_patch_begin(read_cb, None)
      try:
          _execute(job, d, o)
      finally:
          _librsync.rs_job_free(job)
      return o