add generic get_realpath function