Home | History | Annotate | Download | only in lua
      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