mirror of https://github.com/swig/swig
78 lines
2.1 KiB
Plaintext
78 lines
2.1 KiB
Plaintext
|
|
/* ------------------------------------------------------------
|
|
* utility methods for char strings
|
|
* ------------------------------------------------------------ */
|
|
%fragment("SWIG_AsCharPtrAndSize", "header", fragment="SWIG_pchar_descriptor") {
|
|
SWIGINTERN int
|
|
SWIG_AsCharPtrAndSize(Napi::Value valRef, char** cptr, size_t* psize, int *alloc)
|
|
{
|
|
if(valRef.IsString()) {
|
|
Napi::String js_str;
|
|
NAPI_CHECK_RESULT(valRef.ToString(), js_str);
|
|
|
|
std::string str = js_str.Utf8Value();
|
|
size_t len = str.size() + 1;
|
|
char* cstr = (char*) %new_array(len, char);
|
|
memcpy(cstr, str.data(), len);
|
|
|
|
if(alloc) *alloc = SWIG_NEWOBJ;
|
|
if(psize) *psize = len;
|
|
if(cptr) *cptr = cstr;
|
|
|
|
return SWIG_OK;
|
|
} else {
|
|
if(valRef.IsObject()) {
|
|
swig_type_info* pchar_descriptor = SWIG_pchar_descriptor();
|
|
Napi::Object obj;
|
|
NAPI_CHECK_RESULT(valRef.ToObject(), obj);
|
|
// try if the object is a wrapped char[]
|
|
if (pchar_descriptor) {
|
|
void* vptr = 0;
|
|
if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) {
|
|
if (cptr) *cptr = (char *) vptr;
|
|
if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0;
|
|
if (alloc) *alloc = SWIG_OLDOBJ;
|
|
return SWIG_OK;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
goto fail;
|
|
fail:
|
|
return SWIG_TypeError;
|
|
}
|
|
}
|
|
|
|
|
|
%fragment(SWIG_From_frag(char), "header") {
|
|
SWIGINTERNINLINE Napi::Value
|
|
SWIG_From_char(Napi::Env env, char c)
|
|
{
|
|
Napi::String js_str = Napi::String::New(env, &c, 1);
|
|
return js_str;
|
|
}
|
|
}
|
|
|
|
|
|
%fragment("SWIG_FromCharPtr", "header", fragment = "SWIG_FromCharPtrAndSize") {
|
|
// Override the default one with an empty one
|
|
}
|
|
|
|
%fragment("SWIG_FromCharPtrAndSize", "header") {
|
|
SWIGINTERNINLINE Napi::Value
|
|
SWIG_Env_FromCharPtrAndSize(Napi::Env env, const char* carray, size_t size)
|
|
{
|
|
if (carray) {
|
|
Napi::String js_str = Napi::String::New(env, carray, size);
|
|
return js_str;
|
|
} else {
|
|
return env.Undefined();
|
|
}
|
|
}
|
|
}
|
|
|
|
%insert(runtime) %{
|
|
#define SWIG_FromCharPtrAndSize(cptr, size) SWIG_Env_FromCharPtrAndSize(env, cptr, size)
|
|
#define SWIG_FromCharPtr(cptr) SWIG_Env_FromCharPtrAndSize(env, cptr, strlen(cptr))
|
|
%}
|