summaryrefslogtreecommitdiff
path: root/share/swig/2.0.11/lua/wchar.i
diff options
context:
space:
mode:
Diffstat (limited to 'share/swig/2.0.11/lua/wchar.i')
-rw-r--r--share/swig/2.0.11/lua/wchar.i42
1 files changed, 42 insertions, 0 deletions
diff --git a/share/swig/2.0.11/lua/wchar.i b/share/swig/2.0.11/lua/wchar.i
new file mode 100644
index 0000000..141ecc4
--- /dev/null
+++ b/share/swig/2.0.11/lua/wchar.i
@@ -0,0 +1,42 @@
+/* -----------------------------------------------------------------------------
+ * wchar.i
+ *
+ * Typemaps for the wchar_t type
+ * These are mapped to a Lua string and are passed around by value.
+ * ----------------------------------------------------------------------------- */
+
+// note: only support for pointer right now, not fixed length strings
+// TODO: determine how long a const wchar_t* is so we can write wstr2str()
+// & do the output typemap
+
+%{
+#include <stdlib.h>
+
+wchar_t* str2wstr(const char *str, int len)
+{
+ wchar_t* p;
+ if (str==0 || len<1) return 0;
+ p=(wchar *)malloc((len+1)*sizeof(wchar_t));
+ if (p==0) return 0;
+ if (mbstowcs(p, str, len)==-1)
+ {
+ free(p);
+ return 0;
+ }
+ p[len]=0;
+ return p;
+}
+%}
+
+%typemap(in, checkfn="SWIG_lua_isnilstring", fragment="SWIG_lua_isnilstring") wchar_t *
+%{
+$1 = str2wstr(lua_tostring( L, $input ),lua_rawlen( L, $input ));
+if ($1==0) {SWIG_Lua_pushferrstring(L,"Error in converting to wchar (arg %d)",$input);goto fail;}
+%}
+
+%typemap(freearg) wchar_t *
+%{
+free($1);
+%}
+
+%typemap(typecheck) wchar_t * = char *;