bash30-004 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. *** bash-3.0/subst.c Sun Jul 4 13:56:13 2004
  2. --- bash/subst.c Thu Aug 12 13:36:17 2004
  3. ***************
  4. *** 4692,4695 ****
  5. --- 4692,4715 ----
  6. }
  7. + #if defined (HANDLE_MULTIBYTE)
  8. + size_t
  9. + mbstrlen (s)
  10. + const char *s;
  11. + {
  12. + size_t clen, nc;
  13. + mbstate_t mbs;
  14. +
  15. + nc = 0;
  16. + memset (&mbs, 0, sizeof (mbs));
  17. + while ((clen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 && (MB_INVALIDCH(clen) == 0))
  18. + {
  19. + s += clen;
  20. + nc++;
  21. + }
  22. + return nc;
  23. + }
  24. + #endif
  25. +
  26. +
  27. /* Handle the parameter brace expansion that requires us to return the
  28. length of a parameter. */
  29. ***************
  30. *** 4747,4758 ****
  31. {
  32. t = get_dollar_var_value (arg_index);
  33. ! number = STRLEN (t);
  34. FREE (t);
  35. }
  36. #if defined (ARRAY_VARS)
  37. ! else if ((var = find_variable (name + 1)) && array_p (var))
  38. {
  39. t = array_reference (array_cell (var), 0);
  40. ! number = STRLEN (t);
  41. }
  42. #endif
  43. --- 4767,4778 ----
  44. {
  45. t = get_dollar_var_value (arg_index);
  46. ! number = MB_STRLEN (t);
  47. FREE (t);
  48. }
  49. #if defined (ARRAY_VARS)
  50. ! else if ((var = find_variable (name + 1)) && (invisible_p (var) == 0) && array_p (var))
  51. {
  52. t = array_reference (array_cell (var), 0);
  53. ! number = MB_STRLEN (t);
  54. }
  55. #endif
  56. ***************
  57. *** 4767,4771 ****
  58. dispose_words (list);
  59. ! number = STRLEN (t);
  60. FREE (t);
  61. }
  62. --- 4787,4791 ----
  63. dispose_words (list);
  64. ! number = MB_STRLEN (t);
  65. FREE (t);
  66. }
  67. ***************
  68. *** 4872,4876 ****
  69. case VT_VARIABLE:
  70. case VT_ARRAYMEMBER:
  71. ! len = strlen (value);
  72. break;
  73. case VT_POSPARMS:
  74. --- 4892,4896 ----
  75. case VT_VARIABLE:
  76. case VT_ARRAYMEMBER:
  77. ! len = MB_STRLEN (value);
  78. break;
  79. case VT_POSPARMS:
  80. *** bash-3.0/include/shmbutil.h Mon Apr 19 09:59:42 2004
  81. --- bash/include/shmbutil.h Thu Sep 2 15:20:47 2004
  82. ***************
  83. *** 32,35 ****
  84. --- 32,37 ----
  85. extern size_t xdupmbstowcs __P((wchar_t **, char ***, const char *));
  86. + extern size_t mbstrlen __P((const char *));
  87. +
  88. extern char *xstrchr __P((const char *, int));
  89. ***************
  90. *** 39,42 ****
  91. --- 41,47 ----
  92. #endif
  93. + #define MBSLEN(s) (((s) && (s)[0]) ? ((s)[1] ? mbstrlen (s) : 1) : 0)
  94. + #define MB_STRLEN(s) ((MB_CUR_MAX > 1) ? MBSLEN (s) : STRLEN (s))
  95. +
  96. #else /* !HANDLE_MULTIBYTE */
  97. ***************
  98. *** 54,57 ****
  99. --- 59,64 ----
  100. #define MB_NULLWCH(x) (0)
  101. #endif
  102. +
  103. + #define MB_STRLEN(s) (STRLEN(s))
  104. #endif /* !HANDLE_MULTIBYTE */
  105. *** bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
  106. --- bash/patchlevel.h Thu Sep 2 15:04:32 2004
  107. ***************
  108. *** 26,30 ****
  109. looks for to find the patch level (for the sccs version string). */
  110. ! #define PATCHLEVEL 3
  111. #endif /* _PATCHLEVEL_H_ */
  112. --- 26,30 ----
  113. looks for to find the patch level (for the sccs version string). */
  114. ! #define PATCHLEVEL 4
  115. #endif /* _PATCHLEVEL_H_ */