aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDiego Nehab <diego.nehab@gmail.com>2019-03-09 23:23:48 -0300
committerDiego Nehab <diego.nehab@gmail.com>2019-03-09 23:23:48 -0300
commit03b72d8f7ee5e35f76f97da299ce676946023725 (patch)
tree0152020a11181e4f01c2fcb855d58f8e36559dd9 /src
parentc7215bef07cb855844d1da42d2e64c5be869d5b7 (diff)
downloadluasocket-03b72d8f7ee5e35f76f97da299ce676946023725.tar.gz
luasocket-03b72d8f7ee5e35f76f97da299ce676946023725.tar.bz2
luasocket-03b72d8f7ee5e35f76f97da299ce676946023725.zip
Use static initialization
This helps with multi-threaded apps.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/makefile3
-rwxr-xr-xsrc/mime.c152
2 files changed, 145 insertions, 10 deletions
diff --git a/src/makefile b/src/makefile
index e6baf78..b9e2f93 100755
--- a/src/makefile
+++ b/src/makefile
@@ -35,7 +35,8 @@ DEBUG?=NODEBUG
35# LUAINC_macosx: 35# LUAINC_macosx:
36# /opt/local/include 36# /opt/local/include
37LUAINC_macosx_base?=/opt/local/include 37LUAINC_macosx_base?=/opt/local/include
38LUAINC_macosx?=$(LUAINC_macosx_base)/lua/$(LUAV) $(LUAINC_macosx_base)/lua$(LUAV) 38LUAINC_macosx?=$(LUAINC_macosx_base)/lua/$(LUAV) $(LUAINC_macosx_base)/lua$(LUAV) $(LUAINC_macosx_base)/lua-$(LUAV)
39
39# FIXME default should this default to fink or to macports? 40# FIXME default should this default to fink or to macports?
40# What happens when more than one Lua version is installed? 41# What happens when more than one Lua version is installed?
41LUAPREFIX_macosx?=/opt/local 42LUAPREFIX_macosx?=/opt/local
diff --git a/src/mime.c b/src/mime.c
index 6e359af..ce28826 100755
--- a/src/mime.c
+++ b/src/mime.c
@@ -3,6 +3,7 @@
3* LuaSocket toolkit 3* LuaSocket toolkit
4\*=========================================================================*/ 4\*=========================================================================*/
5#include <string.h> 5#include <string.h>
6#include <ctype.h>
6 7
7#include "lua.h" 8#include "lua.h"
8#include "lauxlib.h" 9#include "lauxlib.h"
@@ -30,12 +31,12 @@ static int mime_global_eol(lua_State *L);
30static int mime_global_dot(lua_State *L); 31static int mime_global_dot(lua_State *L);
31 32
32static size_t dot(int c, size_t state, luaL_Buffer *buffer); 33static size_t dot(int c, size_t state, luaL_Buffer *buffer);
33static void b64setup(UC *base); 34//static void b64setup(UC *base);
34static size_t b64encode(UC c, UC *input, size_t size, luaL_Buffer *buffer); 35static size_t b64encode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
35static size_t b64pad(const UC *input, size_t size, luaL_Buffer *buffer); 36static size_t b64pad(const UC *input, size_t size, luaL_Buffer *buffer);
36static size_t b64decode(UC c, UC *input, size_t size, luaL_Buffer *buffer); 37static size_t b64decode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
37 38
38static void qpsetup(UC *class, UC *unbase); 39//static void qpsetup(UC *class, UC *unbase);
39static void qpquote(UC c, luaL_Buffer *buffer); 40static void qpquote(UC c, luaL_Buffer *buffer);
40static size_t qpdecode(UC c, UC *input, size_t size, luaL_Buffer *buffer); 41static size_t qpdecode(UC c, UC *input, size_t size, luaL_Buffer *buffer);
41static size_t qpencode(UC c, UC *input, size_t size, 42static size_t qpencode(UC c, UC *input, size_t size,
@@ -58,17 +59,111 @@ static luaL_Reg func[] = {
58/*-------------------------------------------------------------------------*\ 59/*-------------------------------------------------------------------------*\
59* Quoted-printable globals 60* Quoted-printable globals
60\*-------------------------------------------------------------------------*/ 61\*-------------------------------------------------------------------------*/
61static UC qpclass[256];
62static UC qpbase[] = "0123456789ABCDEF";
63static UC qpunbase[256];
64enum {QP_PLAIN, QP_QUOTED, QP_CR, QP_IF_LAST}; 62enum {QP_PLAIN, QP_QUOTED, QP_CR, QP_IF_LAST};
65 63
64static UC qpclass[] = {
65 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
66 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_IF_LAST, QP_QUOTED, QP_QUOTED,
67 QP_QUOTED, QP_CR, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
68 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
69 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
70 QP_QUOTED, QP_QUOTED, QP_IF_LAST, QP_PLAIN, QP_PLAIN, QP_PLAIN,
71 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
72 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
73 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
74 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
75 QP_PLAIN, QP_QUOTED, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
76 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
77 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
78 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
79 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
80 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
81 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
82 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
83 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
84 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
85 QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN, QP_PLAIN,
86 QP_PLAIN, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
87 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
88 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
89 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
90 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
91 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
92 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
93 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
94 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
95 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
96 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
97 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
98 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
99 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
100 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
101 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
102 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
103 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
104 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
105 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
106 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED,
107 QP_QUOTED, QP_QUOTED, QP_QUOTED, QP_QUOTED
108};
109
110static const UC qpbase[] = "0123456789ABCDEF";
111
112static const UC qpunbase[] = {
113 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
114 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
115 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
116 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
117 255, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255,
118 255, 255, 255, 255, 255, 255, 10, 11, 12, 13, 14, 15,
119 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
120 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
121 255, 255, 255, 255, 10, 11, 12, 13, 14, 15, 255, 255,
122 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
123 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
124 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
125 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
126 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
127 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
128 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
129 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
130 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
131 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
132 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
133 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
134 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
135 255, 255, 255, 255, 255, 255, 255, 255
136};
137
66/*-------------------------------------------------------------------------*\ 138/*-------------------------------------------------------------------------*\
67* Base64 globals 139* Base64 globals
68\*-------------------------------------------------------------------------*/ 140\*-------------------------------------------------------------------------*/
69static const UC b64base[] = 141static const UC b64base[] =
70 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 142 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
71static UC b64unbase[256]; 143
144static const UC b64unbase[] = {
145 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
146 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
147 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
148 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,
149 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0,
150 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
151 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255,
152 255, 255, 255, 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
153 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
154 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
155 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
156 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
157 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
158 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
159 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
160 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
161 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
162 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
163 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
164 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
165 255, 255
166};
72 167
73/*=========================================================================*\ 168/*=========================================================================*\
74* Exported functions 169* Exported functions
@@ -85,8 +180,8 @@ LUASOCKET_API int luaopen_mime_core(lua_State *L)
85 lua_pushstring(L, MIME_VERSION); 180 lua_pushstring(L, MIME_VERSION);
86 lua_rawset(L, -3); 181 lua_rawset(L, -3);
87 /* initialize lookup tables */ 182 /* initialize lookup tables */
88 qpsetup(qpclass, qpunbase); 183 // qpsetup(qpclass, qpunbase);
89 b64setup(b64unbase); 184 // b64setup(b64unbase);
90 return 1; 185 return 1;
91} 186}
92 187
@@ -145,13 +240,21 @@ static int mime_global_wrp(lua_State *L)
145/*-------------------------------------------------------------------------*\ 240/*-------------------------------------------------------------------------*\
146* Fill base64 decode map. 241* Fill base64 decode map.
147\*-------------------------------------------------------------------------*/ 242\*-------------------------------------------------------------------------*/
243#if 0
148static void b64setup(UC *unbase) 244static void b64setup(UC *unbase)
149{ 245{
150 int i; 246 int i;
151 for (i = 0; i <= 255; i++) unbase[i] = (UC) 255; 247 for (i = 0; i <= 255; i++) unbase[i] = (UC) 255;
152 for (i = 0; i < 64; i++) unbase[b64base[i]] = (UC) i; 248 for (i = 0; i < 64; i++) unbase[b64base[i]] = (UC) i;
153 unbase['='] = 0; 249 unbase['='] = 0;
250
251 printf("static const UC b64unbase[] = {\n");
252 for (int i = 0; i < 256; i++) {
253 printf("%d, ", unbase[i]);
254 }
255 printf("\n}\n;");
154} 256}
257#endif
155 258
156/*-------------------------------------------------------------------------*\ 259/*-------------------------------------------------------------------------*\
157* Acumulates bytes in input buffer until 3 bytes are available. 260* Acumulates bytes in input buffer until 3 bytes are available.
@@ -349,8 +452,10 @@ static int mime_global_unb64(lua_State *L)
349* Split quoted-printable characters into classes 452* Split quoted-printable characters into classes
350* Precompute reverse map for encoding 453* Precompute reverse map for encoding
351\*-------------------------------------------------------------------------*/ 454\*-------------------------------------------------------------------------*/
455#if 0
352static void qpsetup(UC *cl, UC *unbase) 456static void qpsetup(UC *cl, UC *unbase)
353{ 457{
458
354 int i; 459 int i;
355 for (i = 0; i < 256; i++) cl[i] = QP_QUOTED; 460 for (i = 0; i < 256; i++) cl[i] = QP_QUOTED;
356 for (i = 33; i <= 60; i++) cl[i] = QP_PLAIN; 461 for (i = 33; i <= 60; i++) cl[i] = QP_PLAIN;
@@ -367,7 +472,37 @@ static void qpsetup(UC *cl, UC *unbase)
367 unbase['c'] = 12; unbase['D'] = 13; unbase['d'] = 13; 472 unbase['c'] = 12; unbase['D'] = 13; unbase['d'] = 13;
368 unbase['E'] = 14; unbase['e'] = 14; unbase['F'] = 15; 473 unbase['E'] = 14; unbase['e'] = 14; unbase['F'] = 15;
369 unbase['f'] = 15; 474 unbase['f'] = 15;
475
476printf("static UC qpclass[] = {");
477 for (int i = 0; i < 256; i++) {
478 if (i % 6 == 0) {
479 printf("\n ");
480 }
481 switch(cl[i]) {
482 case QP_QUOTED:
483 printf("QP_QUOTED, ");
484 break;
485 case QP_PLAIN:
486 printf("QP_PLAIN, ");
487 break;
488 case QP_CR:
489 printf("QP_CR, ");
490 break;
491 case QP_IF_LAST:
492 printf("QP_IF_LAST, ");
493 break;
494 }
495 }
496printf("\n};\n");
497
498printf("static const UC qpunbase[] = {");
499 for (int i = 0; i < 256; i++) {
500 int c = qpunbase[i];
501 printf("%d, ", c);
502 }
503printf("\";\n");
370} 504}
505#endif
371 506
372/*-------------------------------------------------------------------------*\ 507/*-------------------------------------------------------------------------*\
373* Output one character in form =XX 508* Output one character in form =XX
@@ -447,7 +582,6 @@ static size_t qppad(UC *input, size_t size, luaL_Buffer *buffer)
447\*-------------------------------------------------------------------------*/ 582\*-------------------------------------------------------------------------*/
448static int mime_global_qp(lua_State *L) 583static int mime_global_qp(lua_State *L)
449{ 584{
450
451 size_t asize = 0, isize = 0; 585 size_t asize = 0, isize = 0;
452 UC atom[3]; 586 UC atom[3];
453 const UC *input = (const UC *) luaL_optlstring(L, 1, NULL, &isize); 587 const UC *input = (const UC *) luaL_optlstring(L, 1, NULL, &isize);