Fix dnsdecode() bug introduced by r350859
r350859 removed level of indirection that was needed for setting the
caller's `cp' pointer. dnsdecode() uses return value to indicate error
or success. It returns pointer to a buffer holding a decompressed DNS
name or NULL. The caller uses that value only to find out the result,
not for accessing the buffer.
We use the return value to propagate the new value of `cp' pointer to
the caller instead of using an output argument.