aboutsummaryrefslogtreecommitdiff
path: root/lprefix.h
diff options
context:
space:
mode:
authorPhilipp Janda <siffiejoe@gmx.net>2015-01-22 03:46:44 +0100
committerPhilipp Janda <siffiejoe@gmx.net>2015-01-22 03:46:44 +0100
commit665c3b6ef1e8ff795637a4362201eb87450ffb86 (patch)
tree3ff85ebcd95a019fb1c38d992db5e9d15b05cfea /lprefix.h
parenteec3f9e44bee334542348bdd1d428417e22ed5e5 (diff)
downloadlua-compat-5.3-665c3b6ef1e8ff795637a4362201eb87450ffb86.tar.gz
lua-compat-5.3-665c3b6ef1e8ff795637a4362201eb87450ffb86.tar.bz2
lua-compat-5.3-665c3b6ef1e8ff795637a4362201eb87450ffb86.zip
hack around %U format in lutf8lib.c
Diffstat (limited to 'lprefix.h')
-rw-r--r--lprefix.h31
1 files changed, 30 insertions, 1 deletions
diff --git a/lprefix.h b/lprefix.h
index 2ee5802..530ea60 100644
--- a/lprefix.h
+++ b/lprefix.h
@@ -48,8 +48,37 @@
48#undef LUAMOD_API 48#undef LUAMOD_API
49#define LUAMOD_API extern 49#define LUAMOD_API extern
50 50
51#ifndef luaopen_utf8 51#ifdef lutf8lib_c
52# define luaopen_utf8 luaopen_compat53_utf8 52# define luaopen_utf8 luaopen_compat53_utf8
53# include <stdarg.h>
54/* we don't support the %U format string of lua_pushfstring!
55 * code below adapted from the Lua 5.3 sources:
56 */
57static const char *compat53_utf8_escape (lua_State* L, ...) {
58 long x = 0;
59 va_list argp;
60 va_start(argp, L);
61 x = (long)va_arg(argp, long);
62 va_end(argp);
63 if (x < 0x80) { /* ASCII */
64 char c = (char)x;
65 lua_pushlstring(L, &c, 1);
66 } else {
67 char buff[8] = { 0 };
68 unsigned int mfb = 0x3f;
69 int n = 1;
70 do {
71 buff[8 - (n++)] = (char)(0x80|(x & 0x3f));
72 x >>= 6;
73 mfb >>= 1;
74 } while (x > mfb);
75 buff[8-n] = (char)((~mfb << 1) | x);
76 lua_pushlstring(L, buff+8-n, n);
77 }
78 return lua_tostring(L, -1);
79}
80# define lua_pushfstring(L, fmt, l) \
81 compat53_utf8_escape(L, l)
53#endif 82#endif
54 83
55#ifdef ltablib_c 84#ifdef ltablib_c