For symlinks, that won't work unless the sourcedir is absolute, or calculated properly relative to the destdir. I don't see a disclaimer there for that, so I imagine people will be using it naively in a broken way.
For example, the following won't work:
$ mkdir src dst
$ touch src/foo
$ ln -s src/foo dst/bar
It doesn't work because the kernel will be trying to find dst/src/foo
when dst/bar is referenced. The symlink actually needs to be created
non-intuitively as:
$ ln -s ../src/foo dst/bar
Perhaps if your code computed the proper relative path from an
apparent relative path for symlinks, it'd be more useful.