1 /* ----------------------------------------------------------------------------- 2 * wchar.i 3 * 4 * Typemaps for the wchar_t type 5 * These are mapped to a Lua string and are passed around by value. 6 * ----------------------------------------------------------------------------- */ 7 8 // note: only support for pointer right now, not fixed length strings 9 // TODO: determine how long a const wchar_t* is so we can write wstr2str() 10 // & do the output typemap 11 12 %{ 13 #include <stdlib.h> 14 15 wchar_t* str2wstr(const char *str, int len) 16 { 17 wchar_t* p; 18 if (str==0 || len<1) return 0; 19 p=(wchar *)malloc((len+1)*sizeof(wchar_t)); 20 if (p==0) return 0; 21 if (mbstowcs(p, str, len)==-1) 22 { 23 free(p); 24 return 0; 25 } 26 p[len]=0; 27 return p; 28 } 29 %} 30 31 %typemap(in, checkfn="SWIG_lua_isnilstring", fragment="SWIG_lua_isnilstring") wchar_t * 32 %{ 33 $1 = str2wstr(lua_tostring( L, $input ),lua_rawlen( L, $input )); 34 if ($1==0) {SWIG_Lua_pushferrstring(L,"Error in converting to wchar (arg %d)",$input);goto fail;} 35 %} 36 37 %typemap(freearg) wchar_t * 38 %{ 39 free($1); 40 %} 41 42 %typemap(typecheck) wchar_t * = char *; 43