Differences From Artifact [59fabd4d39e1576f]:
- File
jim.c
-
2011-12-02 11:00:03
- part of checkin
[68297258cf]
on branch trunk
- Avoid trying to allocate zero bytes
Some allocators don't like it and others allocate space unnecessarily
Signed-off-by: Steve Bennett <steveb@workware.net.au> (user: steveb@workware.net.au
-
2011-12-02 11:00:03
- part of checkin
[68297258cf]
on branch trunk
- Avoid trying to allocate zero bytes
To Artifact [612b64afdbf44072]:
- File
jim.c
-
2011-12-08 02:26:43
- part of checkin
[5a0ba5d823]
on branch trunk
- utf-8 case folding may change encoded length
Thus we may need a larger buffer for the encoded string
Signed-off-by: Steve Bennett <steveb@workware.net.au> (user: steveb@workware.net.au
-
2011-12-08 02:26:43
- part of checkin
[5a0ba5d823]
on branch trunk
- utf-8 case folding may change encoded length
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)