diff --git a/src/array.c b/src/array.c index be6a437049f4c1207146e11bed66dd5c4e3a1157..30465370fd4be5f78e8648b406241b147ad745c2 100644 --- a/src/array.c +++ b/src/array.c @@ -2427,7 +2427,7 @@ PMOD_EXPORT struct array *explode(struct pike_string *str, s=str->str; end=s+(str->len << str->size_shift); - ret=allocate_array(10); + ret=allocate_array(2); ret->size=0; mojt=compile_memsearcher(MKPCHARP_STR(del), @@ -2507,6 +2507,8 @@ PMOD_EXPORT struct pike_string *implode(struct array *a, len=0; delims = 0; + + for(e=a->size, ae=a->item; e--; ae++) switch(TYPEOF(*ae)) { @@ -2529,7 +2531,14 @@ PMOD_EXPORT struct pike_string *implode(struct array *a, len-=del->len; delims--; } - + + if( a->size == 1 && TYPEOF(*ITEM(a)) == PIKE_T_STRING ) + { + struct pike_string * res = ITEM(a)->u.string; + res->refs++; + return res; + } + ret=begin_wide_shared_string(len,max_shift); r=MKPCHARP_STR(ret); len = del->len;