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 int len; 2610 int len;
2611 const char *str; 2611 const char *str;
2612 2612
2613 SetStringFromAny(interp, strObjPtr); 2613 SetStringFromAny(interp, strObjPtr);
2614 2614
2615 str = Jim_GetString(strObjPtr, &len); 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 buf = Jim_Alloc(len + 1); 2623 buf = Jim_Alloc(len + 1);
2618 JimStrCopyUpperLower(buf, str, 0); 2624 JimStrCopyUpperLower(buf, str, 0);
2619 return Jim_NewStringObjNoAlloc(interp, buf, len); | 2625 return Jim_NewStringObjNoAlloc(interp, buf, -1);
2620 } 2626 }
2621 2627
2622 static Jim_Obj *JimStringToUpper(Jim_Interp *interp, Jim_Obj *strObjPtr) 2628 static Jim_Obj *JimStringToUpper(Jim_Interp *interp, Jim_Obj *strObjPtr)
2623 { 2629 {
2624 char *buf; 2630 char *buf;
2625 const char *str; 2631 const char *str;
2626 int len; 2632 int len;
................................................................................................................................................................................
2627 2633
2628 if (strObjPtr->typePtr != &stringObjType) { 2634 if (strObjPtr->typePtr != &stringObjType) {
2629 SetStringFromAny(interp, strObjPtr); 2635 SetStringFromAny(interp, strObjPtr);
2630 } 2636 }
2631 2637
2632 str = Jim_GetString(strObjPtr, &len); 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 buf = Jim_Alloc(len + 1); 2646 buf = Jim_Alloc(len + 1);
2635 JimStrCopyUpperLower(buf, str, 1); 2647 JimStrCopyUpperLower(buf, str, 1);
2636 return Jim_NewStringObjNoAlloc(interp, buf, len); | 2648 return Jim_NewStringObjNoAlloc(interp, buf, -1);
2637 } 2649 }
2638 2650
2639 static Jim_Obj *JimStringToTitle(Jim_Interp *interp, Jim_Obj *strObjPtr) 2651 static Jim_Obj *JimStringToTitle(Jim_Interp *interp, Jim_Obj *strObjPtr)
2640 { 2652 {
2641 char *buf, *p; 2653 char *buf, *p;
2642 int len; 2654 int len;
2643 int c; 2655 int c;
2644 const char *str; 2656 const char *str;
2645 2657
2646 str = Jim_GetString(strObjPtr, &len); 2658 str = Jim_GetString(strObjPtr, &len);
2647 if (len == 0) { 2659 if (len == 0) {
2648 return strObjPtr; 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 buf = p = Jim_Alloc(len + 1); 2668 buf = p = Jim_Alloc(len + 1);
2651 2669
2652 str += utf8_tounicode(str, &c); 2670 str += utf8_tounicode(str, &c);
2653 p += utf8_fromunicode(p, utf8_title(c)); 2671 p += utf8_fromunicode(p, utf8_title(c));
2654 2672
2655 JimStrCopyUpperLower(p, str, 0); 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 /* Similar to memchr() except searches a UTF-8 string 'str' of byte length 'len' 2678 /* Similar to memchr() except searches a UTF-8 string 'str' of byte length 'len'
2661 * for unicode character 'c'. 2679 * for unicode character 'c'.
2662 * Returns the position if found or NULL if not 2680 * Returns the position if found or NULL if not
2663 */ 2681 */
2664 static const char *utf8_memchr(const char *str, int len, int c) 2682 static const char *utf8_memchr(const char *str, int len, int c)