- if ( (size_t)-1 == (outlen = convert_string(obj->options.unixcharset, ((ntohs(bitmap)) & 2)?CH_UTF8_MAC:obj->options.maccharset, message, *rbuflen, localized_message, msgsize)) )
- memcpy(rbuf, message, *rbuflen); /*FIXME*/
- else
- memcpy(rbuf, localized_message, outlen);
+ if (*rbuflen ) {
+ if ( (size_t)-1 == (outlen = convert_string(obj->options.unixcharset, utf8?CH_UTF8_MAC:obj->options.maccharset, message, *rbuflen, localized_message, msgsize)) )
+ {
+ memcpy(rbuf+((utf8)?2:1), message, *rbuflen); /*FIXME*/
+ outlen = *rbuflen;
+ }
+ else
+ {
+ memcpy(rbuf+((utf8)?2:1), localized_message, outlen);
+ }
+ }
+
+ if ( utf8 ) {
+ /* UTF8 message, 2 byte length */
+ msgsize = htons(outlen);
+ memcpy(rbuf, &msgsize, sizeof(msgsize));
+ rbuf += sizeof(msgsize);
+ *rbuflen += sizeof(msgsize);
+ }
+ else {
+ *rbuflen = outlen;
+ *rbuf++ = *rbuflen;
+ *rbuflen++;
+ }