+ if (!dst->proto->n_long_strings || !src->proto->n_long_strings)
+ memcpy (&dst->values[dst_idx], &src->values[src_idx],
+ sizeof dst->values[0] * n_values);
+ else
+ copy_forward (dst, dst_idx, src, src_idx, n_values);
+ }
+ else if (dst_idx != src_idx)
+ {
+ if (!dst->proto->n_long_strings)
+ memmove (&dst->values[dst_idx], &src->values[src_idx],
+ sizeof dst->values[0] * n_values);
+ else if (dst_idx < src_idx)
+ copy_forward (dst, dst_idx, src, src_idx, n_values);
+ else /* dst_idx > src_idx */
+ copy_backward (dst, dst_idx, src, src_idx, n_values);