#ifndef EASYXS_STRING_H
#define EASYXS_STRING_H 1

#include "init.h"

static inline char* _easyxs_sv_to_str (pTHX_ SV* sv, U8 is_utf8) {
    if (SvROK(sv)) _EASYXS_CROAK_STRINGIFY_REFERENCE(sv);

    char *str = is_utf8 ? SvPVutf8_nolen(sv) : SvPVbyte_nolen(sv);

    size_t len = strnlen(str, 1 + SvCUR(sv));
    if (len != SvCUR(sv)) {
        croak("Cannot convert scalar to C string (NUL byte detected, offset %" UVf ")", (UV) len);
    }

    return str;
}

/* ---------------------------------------------------------------------- */

#define exs_SvPVbyte_nolen(sv) _easyxs_sv_to_str(aTHX_ sv, 0)
#define exs_SvPVutf8_nolen(sv) _easyxs_sv_to_str(aTHX_ sv, 1)

#endif