gsize *set_data_length,
GDestroyNotify *set_data_destroy)
{
- wchar_t *ptr, *p, *q;
+ wchar_t *ptr, *p, *q, *endp;
char *result;
glong wclen, u8_len;
- /* Strip out \r */
+ /* Replace CR and CR+LF with LF */
ptr = (wchar_t *) data;
p = ptr;
q = ptr;
+ endp = ptr + length / 2;
wclen = 0;
- while (p < ptr + length / 2)
+ while (p < endp)
{
if (*p != L'\r')
{
*q++ = *p;
wclen++;
}
+ else if (p + 1 >= endp || *(p + 1) != L'\n')
+ {
+ *q++ = L'\n';
+ wclen++;
+ }
+
p++;
}
gsize *set_data_length,
GDestroyNotify *set_data_destroy)
{
- char *ptr, *p, *q;
+ char *ptr, *p, *q, *endp;
char *result;
glong wclen, u8_len;
wchar_t *wstr;
ptr = (char *) data;
p = ptr;
q = ptr;
+ endp = ptr + length / 2;
wclen = 0;
- while (p < ptr + length / 2)
+ while (p < endp)
{
if (*p != '\r')
{
*q++ = *p;
wclen++;
}
+ else if (p + 1 > endp || *(p + 1) != '\n')
+ {
+ *q++ = '\n';
+ wclen++;
+ }
+
p++;
}