actually we always want to call readlink if possible, since it
will set $! correctly.