GA_CONCAT_LITERAL(gap, "[]");
else
{
- ga_append(gap, '[');
- for (i = 0; i < b->bv_ga.ga_len; i++)
+ int blen = b->bv_ga.ga_len;
+ char_u *src;
+ char_u *dst;
+
+ // Worst case: '[' + ']' + per-byte 3 digits + comma = 2 + 4*blen
+ if (ga_grow(gap, 2 + 4 * blen) == FAIL)
+ goto theend;
+ src = (char_u *)b->bv_ga.ga_data;
+ dst = (char_u *)gap->ga_data + gap->ga_len;
+ *dst++ = '[';
+ for (i = 0; i < blen; i++)
{
- int byte = blob_get(b, i);
+ int byte = src[i];
if (i > 0)
- ga_append(gap, ',');
- // blob bytes are 0-255, use simple conversion
+ *dst++ = ',';
if (byte >= 100)
{
- ga_append(gap, '0' + byte / 100);
- ga_append(gap, '0' + (byte / 10) % 10);
- ga_append(gap, '0' + byte % 10);
+ *dst++ = '0' + byte / 100;
+ *dst++ = '0' + (byte / 10) % 10;
+ *dst++ = '0' + byte % 10;
}
else if (byte >= 10)
{
- ga_append(gap, '0' + byte / 10);
- ga_append(gap, '0' + byte % 10);
+ *dst++ = '0' + byte / 10;
+ *dst++ = '0' + byte % 10;
}
else
- ga_append(gap, '0' + byte);
+ *dst++ = '0' + byte;
}
- ga_append(gap, ']');
+ *dst++ = ']';
+ gap->ga_len = (int)(dst - (char_u *)gap->ga_data);
}
break;