151 |
} else { |
} else { |
152 |
struct obstack stk; |
struct obstack stk; |
153 |
int old_length = strlen(old_value); |
int old_length = strlen(old_value); |
|
|
|
|
obstack_init(&stk); |
|
|
for (; p; p = strchr(value, '&')) { |
|
|
int length = p - value; |
|
154 |
|
|
155 |
obstack_grow(&stk, value, length); |
obstack_init(&stk); |
156 |
if (p > value && p[-1] == '\\') |
for (; *value; value++) { |
157 |
obstack_1grow(&stk, *p); |
switch (*value) { |
158 |
else |
case '\\': |
159 |
|
value++; |
160 |
|
if (*value != '&') |
161 |
|
obstack_1grow(&stk, '\\'); |
162 |
|
obstack_1grow(&stk, *value); |
163 |
|
break; |
164 |
|
case '&': |
165 |
obstack_grow(&stk, old_value, old_length); |
obstack_grow(&stk, old_value, old_length); |
166 |
value = p + 1; |
break; |
167 |
|
default: |
168 |
|
obstack_1grow(&stk, *value); |
169 |
|
} |
170 |
} |
} |
|
if (value && value[0]) |
|
|
obstack_grow(&stk, value, strlen(value)); |
|
171 |
obstack_1grow(&stk, 0); |
obstack_1grow(&stk, 0); |
172 |
p = strdup(obstack_finish(&stk)); |
p = strdup(obstack_finish(&stk)); |
173 |
obstack_free(&stk, NULL); |
obstack_free(&stk, NULL); |
238 |
} |
} |
239 |
|
|
240 |
/* EOF */ |
/* EOF */ |
|
|
|