+ return 0;
+}
+
+static char *svu_prepare_sv(pTHX_ SV *sv, size_t s, size_t l) {
+#define svu_prepare_sv(S, I, L) svu_prepare_sv(aTHX_ (S), (I), (L))
+ STRLEN c;
+ size_t n = s + l, i, js, jz, k, z;
+ char *p;
+
+ SvUPGRADE(sv, SVt_PV);
+
+ p = SvGROW(sv, BV_SIZE(n));
+ c = SvCUR(sv);
+
+ js = (s / BITS(BV_UNIT)) * sizeof(BV_UNIT);
+ k = js + sizeof(BV_UNIT);
+ for (i = c < js ? js : c; i < k; ++i)
+ p[i] = 0;
+
+ jz = ((s + l - 1) / BITS(BV_UNIT)) * sizeof(BV_UNIT);
+ if (jz > js) {
+ k = jz + sizeof(BV_UNIT);
+ for (i = c < jz ? jz : c; i < k; ++i)
+ p[i] = 0;
+ }
+
+ z = 1 + ((s + l - 1) / CHAR_BIT);
+ if (c < z)
+ SvCUR_set(sv, z);
+
+ return p;