mirror of
https://github.com/lunarmodules/luasocket.git
synced 2024-12-26 04:28:20 +01:00
Use static initialization
This helps with multi-threaded apps.
This commit is contained in:
parent
c7215bef07
commit
03b72d8f7e
@ -35,7 +35,8 @@ DEBUG?=NODEBUG
|
|||||||
# LUAINC_macosx:
|
# LUAINC_macosx:
|
||||||
# /opt/local/include
|
# /opt/local/include
|
||||||
LUAINC_macosx_base?=/opt/local/include
|
LUAINC_macosx_base?=/opt/local/include
|
||||||
LUAINC_macosx?=$(LUAINC_macosx_base)/lua/$(LUAV) $(LUAINC_macosx_base)/lua$(LUAV)
|
LUAINC_macosx?=$(LUAINC_macosx_base)/lua/$(LUAV) $(LUAINC_macosx_base)/lua$(LUAV) $(LUAINC_macosx_base)/lua-$(LUAV)
|
||||||
|
|
||||||
# FIXME default should this default to fink or to macports?
|
# FIXME default should this default to fink or to macports?
|
||||||
# What happens when more than one Lua version is installed?
|
# What happens when more than one Lua version is installed?
|
||||||
LUAPREFIX_macosx?=/opt/local
|
LUAPREFIX_macosx?=/opt/local
|
||||||
|
152
src/mime.c
152
src/mime.c
@ -3,6 +3,7 @@
|
|||||||
* LuaSocket toolkit
|
* LuaSocket toolkit
|
||||||
\*=========================================================================*/
|
\*=========================================================================*/
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
#include "lauxlib.h"
|
#include "lauxlib.h"
|
||||||
@ -30,12 +31,12 @@ static int mime_global_eol(lua_State *L);
|
|||||||
static int mime_global_dot(lua_State *L);
|
static int mime_global_dot(lua_State *L);
|
||||||
|
|
||||||
static size_t dot(int c, size_t state, luaL_Buffer *buffer);
|
static size_t dot(int c, size_t state, luaL_Buffer *buffer);
|
||||||
static void b64setup(UC *base);
|
//static void b64setup(UC *base);
|
||||||
static size_t b64encode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
|
static size_t b64encode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
|
||||||
static size_t b64pad(const UC *input, size_t size, luaL_Buffer *buffer);
|
static size_t b64pad(const UC *input, size_t size, luaL_Buffer *buffer);
|
||||||
static size_t b64decode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
|
static size_t b64decode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
|
||||||
|
|
||||||
static void qpsetup(UC *class, UC *unbase);
|
//static void qpsetup(UC *class, UC *unbase);
|
||||||
static void qpquote(UC c, luaL_Buffer *buffer);
|
static void qpquote(UC c, luaL_Buffer *buffer);
|
||||||
static size_t qpdecode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
|
static size_t qpdecode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
|
||||||
static size_t qpencode(UC c, UC *input, size_t size,
|
static size_t qpencode(UC c, UC *input, size_t size,
|
||||||
@ -58,17 +59,111 @@ static luaL_Reg func[] = {
|
|||||||
/*-------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------*\
|
||||||
* Quoted-printable globals
|
* Quoted-printable globals
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
static UC qpclass[256];
|
|
||||||
static UC qpbase[] = "0123456789ABCDEF";
|
|
||||||
static UC qpunbase[256];
|
|
||||||
enum {QP_PLAIN, QP_QUOTED, QP_CR, QP_IF_LAST};
|
enum {QP_PLAIN, QP_QUOTED, QP_CR, QP_IF_LAST};
|
||||||
|
|
||||||
|
static UC qpclass[] = {
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_IF_LAST, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_CR, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_IF_LAST, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_QUOTED, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
|
||||||
|
QP_PLAIN, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
|
||||||
|
QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED
|
||||||
|
};
|
||||||
|
|
||||||
|
static const UC qpbase[] = "0123456789ABCDEF";
|
||||||
|
|
||||||
|
static const UC qpunbase[] = {
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 10, 11, 12, 13, 14, 15,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 10, 11, 12, 13, 14, 15, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255
|
||||||
|
};
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------*\
|
||||||
* Base64 globals
|
* Base64 globals
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
static const UC b64base[] =
|
static const UC b64base[] =
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
static UC b64unbase[256];
|
|
||||||
|
static const UC b64unbase[] = {
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,
|
||||||
|
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0,
|
||||||
|
255, 255, 255, 0, 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, 255, 255,
|
||||||
|
255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
||||||
|
255, 255
|
||||||
|
};
|
||||||
|
|
||||||
/*=========================================================================*\
|
/*=========================================================================*\
|
||||||
* Exported functions
|
* Exported functions
|
||||||
@ -85,8 +180,8 @@ LUASOCKET_API int luaopen_mime_core(lua_State *L)
|
|||||||
lua_pushstring(L, MIME_VERSION);
|
lua_pushstring(L, MIME_VERSION);
|
||||||
lua_rawset(L, -3);
|
lua_rawset(L, -3);
|
||||||
/* initialize lookup tables */
|
/* initialize lookup tables */
|
||||||
qpsetup(qpclass, qpunbase);
|
// qpsetup(qpclass, qpunbase);
|
||||||
b64setup(b64unbase);
|
// b64setup(b64unbase);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,13 +240,21 @@ static int mime_global_wrp(lua_State *L)
|
|||||||
/*-------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------*\
|
||||||
* Fill base64 decode map.
|
* Fill base64 decode map.
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
|
#if 0
|
||||||
static void b64setup(UC *unbase)
|
static void b64setup(UC *unbase)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i <= 255; i++) unbase[i] = (UC) 255;
|
for (i = 0; i <= 255; i++) unbase[i] = (UC) 255;
|
||||||
for (i = 0; i < 64; i++) unbase[b64base[i]] = (UC) i;
|
for (i = 0; i < 64; i++) unbase[b64base[i]] = (UC) i;
|
||||||
unbase['='] = 0;
|
unbase['='] = 0;
|
||||||
|
|
||||||
|
printf("static const UC b64unbase[] = {\n");
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
printf("%d, ", unbase[i]);
|
||||||
|
}
|
||||||
|
printf("\n}\n;");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------*\
|
||||||
* Acumulates bytes in input buffer until 3 bytes are available.
|
* Acumulates bytes in input buffer until 3 bytes are available.
|
||||||
@ -349,8 +452,10 @@ static int mime_global_unb64(lua_State *L)
|
|||||||
* Split quoted-printable characters into classes
|
* Split quoted-printable characters into classes
|
||||||
* Precompute reverse map for encoding
|
* Precompute reverse map for encoding
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
|
#if 0
|
||||||
static void qpsetup(UC *cl, UC *unbase)
|
static void qpsetup(UC *cl, UC *unbase)
|
||||||
{
|
{
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 256; i++) cl[i] = QP_QUOTED;
|
for (i = 0; i < 256; i++) cl[i] = QP_QUOTED;
|
||||||
for (i = 33; i <= 60; i++) cl[i] = QP_PLAIN;
|
for (i = 33; i <= 60; i++) cl[i] = QP_PLAIN;
|
||||||
@ -367,7 +472,37 @@ static void qpsetup(UC *cl, UC *unbase)
|
|||||||
unbase['c'] = 12; unbase['D'] = 13; unbase['d'] = 13;
|
unbase['c'] = 12; unbase['D'] = 13; unbase['d'] = 13;
|
||||||
unbase['E'] = 14; unbase['e'] = 14; unbase['F'] = 15;
|
unbase['E'] = 14; unbase['e'] = 14; unbase['F'] = 15;
|
||||||
unbase['f'] = 15;
|
unbase['f'] = 15;
|
||||||
|
|
||||||
|
printf("static UC qpclass[] = {");
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
if (i % 6 == 0) {
|
||||||
|
printf("\n ");
|
||||||
|
}
|
||||||
|
switch(cl[i]) {
|
||||||
|
case QP_QUOTED:
|
||||||
|
printf("QP_QUOTED, ");
|
||||||
|
break;
|
||||||
|
case QP_PLAIN:
|
||||||
|
printf("QP_PLAIN, ");
|
||||||
|
break;
|
||||||
|
case QP_CR:
|
||||||
|
printf("QP_CR, ");
|
||||||
|
break;
|
||||||
|
case QP_IF_LAST:
|
||||||
|
printf("QP_IF_LAST, ");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n};\n");
|
||||||
|
|
||||||
|
printf("static const UC qpunbase[] = {");
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
int c = qpunbase[i];
|
||||||
|
printf("%d, ", c);
|
||||||
|
}
|
||||||
|
printf("\";\n");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------*\
|
||||||
* Output one character in form =XX
|
* Output one character in form =XX
|
||||||
@ -447,7 +582,6 @@ static size_t qppad(UC *input, size_t size, luaL_Buffer *buffer)
|
|||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
static int mime_global_qp(lua_State *L)
|
static int mime_global_qp(lua_State *L)
|
||||||
{
|
{
|
||||||
|
|
||||||
size_t asize = 0, isize = 0;
|
size_t asize = 0, isize = 0;
|
||||||
UC atom[3];
|
UC atom[3];
|
||||||
const UC *input = (const UC *) luaL_optlstring(L, 1, NULL, &isize);
|
const UC *input = (const UC *) luaL_optlstring(L, 1, NULL, &isize);
|
||||||
|
Loading…
Reference in New Issue
Block a user