commit bash-20051123 snapshot
[platform/upstream/bash.git] / subst.c.diff
1 *** ../bash-3.0/subst.c Sun Jul  4 13:56:13 2004
2 --- subst.c     Thu Aug 12 13:36:17 2004
3 ***************
4 *** 4692,4695 ****
5 --- 4692,4715 ----
6   }
7   
8 + #if defined (HANDLE_MULTIBYTE)
9 + size_t
10 + mbstrlen (s)
11 +      const char *s;
12 + {
13 +   size_t clen, nc;
14 +   mbstate_t mbs;
15
16 +   nc = 0;
17 +   memset (&mbs, 0, sizeof (mbs));
18 +   while ((clen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 && (MB_INVALIDCH(clen) == 0))
19 +     {
20 +       s += clen;
21 +       nc++;
22 +     }
23 +   return nc;
24 + }
25 + #endif
26 +       
27
28   /* Handle the parameter brace expansion that requires us to return the
29      length of a parameter. */
30 ***************
31 *** 4747,4758 ****
32         {
33           t = get_dollar_var_value (arg_index);
34 !         number = STRLEN (t);
35           FREE (t);
36         }
37   #if defined (ARRAY_VARS)
38 !       else if ((var = find_variable (name + 1)) && array_p (var))
39         {
40           t = array_reference (array_cell (var), 0);
41 !         number = STRLEN (t);
42         }
43   #endif
44 --- 4767,4778 ----
45         {
46           t = get_dollar_var_value (arg_index);
47 !         number = MB_STRLEN (t);
48           FREE (t);
49         }
50   #if defined (ARRAY_VARS)
51 !       else if ((var = find_variable (name + 1)) && (invisible_p (var) == 0) && array_p (var))
52         {
53           t = array_reference (array_cell (var), 0);
54 !         number = MB_STRLEN (t);
55         }
56   #endif
57 ***************
58 *** 4767,4771 ****
59             dispose_words (list);
60   
61 !         number = STRLEN (t);
62           FREE (t);
63         }
64 --- 4787,4791 ----
65             dispose_words (list);
66   
67 !         number = MB_STRLEN (t);
68           FREE (t);
69         }
70 ***************
71 *** 4872,4876 ****
72       case VT_VARIABLE:
73       case VT_ARRAYMEMBER:
74 !       len = strlen (value);
75         break;
76       case VT_POSPARMS:
77 --- 4892,4896 ----
78       case VT_VARIABLE:
79       case VT_ARRAYMEMBER:
80 !       len = MB_STRLEN (value);
81         break;
82       case VT_POSPARMS:
83 ***************
84 *** 4892,4896 ****
85       *e1p += len;
86   
87 !   if (*e1p >= len || *e1p < 0)
88       return (-1);
89   
90 --- 4912,4916 ----
91       *e1p += len;
92   
93 !   if (*e1p > len || *e1p < 0)
94       return (-1);
95   
96 ***************
97 *** 4983,4987 ****
98         return -1;
99       }
100 !   else if ((v = find_variable (varname)) && array_p (v))
101       {
102         vtype = VT_ARRAYMEMBER;
103 --- 5003,5007 ----
104         return -1;
105       }
106 !   else if ((v = find_variable (varname)) && (invisible_p (v) == 0) && array_p (v))
107       {
108         vtype = VT_ARRAYMEMBER;