diff --git a/src/operators.c b/src/operators.c index 48320e5ae895916af38cf118258a97f484db14c4..4ddb6299274ee1649d70573b55e475fa6a4f95df 100644 --- a/src/operators.c +++ b/src/operators.c @@ -1598,7 +1598,7 @@ PMOD_EXPORT void f_add(INT32 args) struct pike_string *r; PCHARP buf; char buffer[MAX_NUM_BUF]; - int max_shift=0; + int max_shift=0, len; if ((TYPEOF(sp[-args]) != T_STRING) && (TYPEOF(sp[1-args]) != T_STRING)) { struct svalue *save_sp = sp; @@ -1693,24 +1693,22 @@ PMOD_EXPORT void f_add(INT32 args) #endif append_buffer: + len = strlen(buffer); switch(max_shift) { case 0: - convert_0_to_0((p_wchar0 *)buf.ptr,buffer,strlen(buffer)); + convert_0_to_0((p_wchar0 *)buf.ptr,buffer,len); break; case 1: - convert_0_to_1((p_wchar1 *)buf.ptr,(p_wchar0 *)buffer, - strlen(buffer)); + convert_0_to_1((p_wchar1 *)buf.ptr,(p_wchar0 *)buffer,len); break; case 2: - convert_0_to_2((p_wchar2 *)buf.ptr,(p_wchar0 *)buffer, - strlen(buffer)); + convert_0_to_2((p_wchar2 *)buf.ptr,(p_wchar0 *)buffer,len); break; - } - INC_PCHARP(buf,strlen(buffer)); + INC_PCHARP(buf,len); } } r = realloc_unlinked_string(r, SUBTRACT_PCHARP(buf, MKPCHARP_STR(r)));