+STATIC void svu_validate_uv(pTHX_ SV *sv, size_t *offset, const char *desc) {
+#define svu_validate_uv(S, O, D) svu_validate_uv(aTHX_ (S), (O), (D))
+ IV i;
+
+ if (SvOK(sv) && SvIOK(sv)) {
+ if (SvIsUV(sv))
+ *offset = SvUVX(sv);
+ else {
+ i = SvIVX(sv);
+ if (i < 0)
+ goto fail;
+ *offset = i;
+ }
+ } else {
+ i = SvIV(sv);
+ if (i < 0)
+ goto fail;
+ *offset = i;
+ }
+
+ return;
+
+fail:
+ *offset = 0;
+ croak("Invalid negative %s", desc ? desc : "integer");
+}