--- rxvt-unicode/src/rxvtperl.xs 2006/01/06 05:37:59 1.31 +++ rxvt-unicode/src/rxvtperl.xs 2006/01/06 18:33:30 1.32 @@ -467,11 +467,11 @@ XPUSHs (sv_2mortal (newSViv (va_arg (ap, long)))); break; - case DT_STRING: + case DT_STR: XPUSHs (sv_2mortal (newSVpv (va_arg (ap, char *), 0))); break; - case DT_STRING_LEN: + case DT_STR_LEN: { char *str = va_arg (ap, char *); int len = va_arg (ap, int); @@ -480,6 +480,14 @@ } break; + case DT_WCS_LEN: + { + wchar_t *wstr = va_arg (ap, wchar_t *); + int wlen = va_arg (ap, int); + + XPUSHs (sv_2mortal (wcs2sv (wstr, wlen))); + } + case DT_XEVENT: { XEvent *xe = va_arg (ap, XEvent *); @@ -532,20 +540,6 @@ } break; - case DT_USTRING_LEN: - { - unicode_t *ustr = va_arg (ap, unicode_t *); - int ulen = va_arg (ap, int); - wchar_t *wstr = new wchar_t [ulen]; - - for (int i = ulen; i--; ) - wstr [i] = ustr [i]; - - XPUSHs (sv_2mortal (wcs2sv (wstr, ulen))); - - delete [] wstr; - } - case DT_END: { va_end (ap); @@ -1063,20 +1057,8 @@ CODE: { wchar_t *wstr = sv2wcs (string); - int wlen = wcslen (wstr); - unicode_t *ustr = new unicode_t [wlen]; - int nlines = 0; - - for (int i = wlen; i--; ) - { - ustr [i] = wstr [i]; - nlines += ustr [i] == '\012'; - } - - THIS->scr_add_lines (ustr, nlines, wlen); - + THIS->scr_add_lines (wstr, wcslen (wstr)); free (wstr); - delete [] ustr; } void