1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
/*
** $Id: lprefix.h,v 1.2 2014/12/29 16:54:13 roberto Exp $
** Definitions for Lua code that must come before any other header file
** See Copyright Notice in lua.h
*/
#ifndef lprefix_h
#define lprefix_h
/*
** Allows POSIX/XSI stuff
*/
#if !defined(LUA_USE_C89) /* { */
#if !defined(_XOPEN_SOURCE)
#define _XOPEN_SOURCE 600
#elif _XOPEN_SOURCE == 0
#undef _XOPEN_SOURCE /* use -D_XOPEN_SOURCE=0 to undefine it */
#endif
/*
** Allows manipulation of large files in gcc and some other compilers
*/
#if !defined(LUA_32BITS) && !defined(_FILE_OFFSET_BITS)
#define _LARGEFILE_SOURCE 1
#define _FILE_OFFSET_BITS 64
#endif
#endif /* } */
/*
** Windows stuff
*/
#if defined(_WIN32) /* { */
#if !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS /* avoid warnings about ISO C functions */
#endif
#endif /* } */
/* COMPAT53 adaptation */
#include "c-api/compat-5.3.h"
#undef LUAMOD_API
#define LUAMOD_API extern
#ifdef lutf8lib_c
# define luaopen_utf8 luaopen_compat53_utf8
/* we don't support the %U format string of lua_pushfstring!
* code below adapted from the Lua 5.3 sources:
*/
static const char *compat53_utf8_escape (lua_State* L, long x) {
if (x < 0x80) { /* ASCII */
char c = (char)x;
lua_pushlstring(L, &c, 1);
} else {
char buff[8] = { 0 };
unsigned int mfb = 0x3f;
int n = 1;
do {
buff[8 - (n++)] = (char)(0x80|(x & 0x3f));
x >>= 6;
mfb >>= 1;
} while (x > mfb);
buff[8-n] = (char)((~mfb << 1) | x);
lua_pushlstring(L, buff+8-n, n);
}
return lua_tostring(L, -1);
}
# define lua_pushfstring(L, fmt, l) \
compat53_utf8_escape(L, l)
#endif
#ifdef ltablib_c
# define luaopen_table luaopen_compat53_table
# ifndef LUA_MAXINTEGER
/* conservative estimate: */
# define LUA_MAXINTEGER INT_MAX
# endif
#endif /* ltablib_c */
#ifdef lstrlib_c
#include <locale.h>
#include <lualib.h>
/* move the string library open function out of the way (we only take
* the string packing functions)!
*/
# define luaopen_string luaopen_string_XXX
/* used in string.format implementation, which we don't use: */
# ifndef LUA_INTEGER_FRMLEN
# define LUA_INTEGER_FRMLEN ""
# define LUA_NUMBER_FRMLEN ""
# endif
# ifndef LUA_MININTEGER
# define LUA_MININTEGER 0
# endif
# ifndef LUA_INTEGER_FMT
# define LUA_INTEGER_FMT "%d"
# endif
# ifndef LUAI_UACINT
# define LUAI_UACINT lua_Integer
# endif
/* different Lua 5.3 versions have conflicting variants of this macro
* in luaconf.h, there's a fallback implementation in lstrlib.c, and
* the macro isn't used for string (un)packing anyway!
* */
# undef lua_number2strx
# if LUA_VERSION_NUM < 503
/* lstrlib assumes that lua_Integer and lua_Unsigned have the same
* size, so we use the unsigned equivalent of ptrdiff_t! */
# define lua_Unsigned size_t
# endif
# ifndef l_mathlim
# ifdef LUA_NUMBER_DOUBLE
# define l_mathlim(n) (DBL_##n)
# else
# define l_mathlim(n) (FLT_##n)
# endif
# endif
# ifndef l_mathop
# ifdef LUA_NUMBER_DOUBLE
# define l_mathop(op) op
# else
# define l_mathop(op) op##f
# endif
# endif
# ifndef lua_getlocaledecpoint
# define lua_getlocaledecpoint() (localeconv()->decimal_point[0])
# endif
# ifndef l_sprintf
# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
# define l_sprintf(s,sz,f,i) (snprintf(s, sz, f, i))
# else
# define l_sprintf(s,sz,f,i) ((void)(sz), sprintf(s, f, i))
# endif
# endif
static int str_pack (lua_State *L);
static int str_packsize (lua_State *L);
static int str_unpack (lua_State *L);
LUAMOD_API int luaopen_compat53_string (lua_State *L) {
luaL_Reg const funcs[] = {
{ "pack", str_pack },
{ "packsize", str_packsize },
{ "unpack", str_unpack },
{ NULL, NULL }
};
luaL_newlib(L, funcs);
return 1;
}
/* fake CLANG feature detection on other compilers */
# ifndef __has_attribute
# define __has_attribute(x) 0
# endif
/* make luaopen_string(_XXX) static, so it (and all other referenced
* string functions) won't be included in the resulting dll
* (hopefully).
*/
# undef LUAMOD_API
# if defined(__GNUC__) || __has_attribute(__unused__)
# define LUAMOD_API __attribute__((__unused__)) static
# else
# define LUAMOD_API static
# endif
#endif /* lstrlib.c */
#endif
|