Jim Tcl
Diff
Not logged in

Differences From Artifact [59fabd4d39e1576f]:

To Artifact [612b64afdbf44072]:


2610 2610 int len; 2611 2611 const char *str; 2612 2612 2613 2613 SetStringFromAny(interp, strObjPtr); 2614 2614 2615 2615 str = Jim_GetString(strObjPtr, &len); 2616 2616 2617 +#ifdef JIM_UTF8 2618 + /* Case mapping can change the utf-8 length of the string. 2619 + * But at worst it will be by one extra byte per char 2620 + */ 2621 + len *= 2; 2622 +#endif 2617 2623 buf = Jim_Alloc(len + 1); 2618 2624 JimStrCopyUpperLower(buf, str, 0); 2619 - return Jim_NewStringObjNoAlloc(interp, buf, len); 2625 + return Jim_NewStringObjNoAlloc(interp, buf, -1); 2620 2626 } 2621 2627 2622 2628 static Jim_Obj *JimStringToUpper(Jim_Interp *interp, Jim_Obj *strObjPtr) 2623 2629 { 2624 2630 char *buf; 2625 2631 const char *str; 2626 2632 int len; ................................................................................ 2627 2633 2628 2634 if (strObjPtr->typePtr != &stringObjType) { 2629 2635 SetStringFromAny(interp, strObjPtr); 2630 2636 } 2631 2637 2632 2638 str = Jim_GetString(strObjPtr, &len); 2633 2639 2640 +#ifdef JIM_UTF8 2641 + /* Case mapping can change the utf-8 length of the string. 2642 + * But at worst it will be by one extra byte per char 2643 + */ 2644 + len *= 2; 2645 +#endif 2634 2646 buf = Jim_Alloc(len + 1); 2635 2647 JimStrCopyUpperLower(buf, str, 1); 2636 - return Jim_NewStringObjNoAlloc(interp, buf, len); 2648 + return Jim_NewStringObjNoAlloc(interp, buf, -1); 2637 2649 } 2638 2650 2639 2651 static Jim_Obj *JimStringToTitle(Jim_Interp *interp, Jim_Obj *strObjPtr) 2640 2652 { 2641 2653 char *buf, *p; 2642 2654 int len; 2643 2655 int c; 2644 2656 const char *str; 2645 2657 2646 2658 str = Jim_GetString(strObjPtr, &len); 2647 2659 if (len == 0) { 2648 2660 return strObjPtr; 2649 2661 } 2662 +#ifdef JIM_UTF8 2663 + /* Case mapping can change the utf-8 length of the string. 2664 + * But at worst it will be by one extra byte per char 2665 + */ 2666 + len *= 2; 2667 +#endif 2650 2668 buf = p = Jim_Alloc(len + 1); 2651 2669 2652 2670 str += utf8_tounicode(str, &c); 2653 2671 p += utf8_fromunicode(p, utf8_title(c)); 2654 2672 2655 2673 JimStrCopyUpperLower(p, str, 0); 2656 2674 2657 - return Jim_NewStringObjNoAlloc(interp, buf, len); 2675 + return Jim_NewStringObjNoAlloc(interp, buf, -1); 2658 2676 } 2659 2677 2660 2678 /* Similar to memchr() except searches a UTF-8 string 'str' of byte length 'len' 2661 2679 * for unicode character 'c'. 2662 2680 * Returns the position if found or NULL if not 2663 2681 */ 2664 2682 static const char *utf8_memchr(const char *str, int len, int c)