mirror of
https://github.com/cesanta/mongoose.git
synced 2025-08-06 13:37:34 +08:00
Splitting monolithic mongoose.c to separate files. Amalgamating into mongoose.c for release.
This commit is contained in:
parent
40ab4a8d3d
commit
21965e0e03
@ -24,6 +24,7 @@ EXE_SUFFIX =
|
||||
CFLAGS = -std=c99 -O2 -W -Wall -pedantic -pthread -pipe -I.. $(CFLAGS_EXTRA)
|
||||
VERSION = $(shell perl -lne \
|
||||
'print $$1 if /define\s+MONGOOSE_VERSION\s+"(\S+)"/' ../mongoose.c)
|
||||
SOURCES = src/mongoose.c
|
||||
|
||||
TINY_SOURCES = ../mongoose.c main.c
|
||||
LUA_SOURCES = $(TINY_SOURCES) sqlite3.c lsqlite3.c lua_5.2.1.c
|
||||
@ -56,7 +57,8 @@ endif
|
||||
all:
|
||||
@echo "make (unix|windows|macos)"
|
||||
|
||||
mongoose.c: mod_lua.c mongoose.h Makefile
|
||||
../mongoose.c: mod_lua.c ../mongoose.h Makefile $(SOURCES)
|
||||
cat src/internal.h src/mongoose.c | sed '/#include "internal.h"/d' > $@
|
||||
|
||||
unix_unit_test: $(LUA_SOURCES) Makefile ../test/unit_test.c
|
||||
$(CC) ../test/unit_test.c lua_5.2.1.c $(CFLAGS) -g -O0 -o t && ./t
|
||||
|
257
build/src/internal.h
Normal file
257
build/src/internal.h
Normal file
@ -0,0 +1,257 @@
|
||||
// Copyright (c) 2004-2013 Sergey Lyubka <valenok@gmail.com>
|
||||
// Copyright (c) 2013 Cesanta Software Limited
|
||||
// All rights reserved
|
||||
//
|
||||
// This library is dual-licensed: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
// published by the Free Software Foundation. For the terms of this
|
||||
// license, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
// You are free to use this library under the terms of the GNU General
|
||||
// Public License, but WITHOUT ANY WARRANTY; without even the implied
|
||||
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU General Public License for more details.
|
||||
//
|
||||
// Alternatively, you can license this library under a commercial
|
||||
// license, as set out in <http://cesanta.com/products.html>.
|
||||
|
||||
#if defined(_WIN32)
|
||||
#undef _UNICODE
|
||||
#define _MBCS
|
||||
#if !defined(_CRT_SECURE_NO_WARNINGS)
|
||||
#define _CRT_SECURE_NO_WARNINGS // Disable deprecation warning in VS2005
|
||||
#endif
|
||||
#else
|
||||
#ifdef __linux__
|
||||
#define _XOPEN_SOURCE 600 // For flockfile() on Linux
|
||||
#endif
|
||||
#if !defined(_LARGEFILE_SOURCE)
|
||||
#define _LARGEFILE_SOURCE // Enable 64-bit file offsets
|
||||
#endif
|
||||
#define __STDC_FORMAT_MACROS // <inttypes.h> wants this for C++
|
||||
#define __STDC_LIMIT_MACROS // C++ wants that for INT64_MAX
|
||||
#endif
|
||||
|
||||
#if defined (_MSC_VER)
|
||||
// conditional expression is constant: introduced by FD_SET(..)
|
||||
#pragma warning (disable : 4127)
|
||||
// non-constant aggregate initializer: issued due to missing C99 support
|
||||
#pragma warning (disable : 4204)
|
||||
#endif
|
||||
|
||||
// Disable WIN32_LEAN_AND_MEAN.
|
||||
// This makes windows.h always include winsock2.h
|
||||
#ifdef WIN32_LEAN_AND_MEAN
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
|
||||
#if defined(__SYMBIAN32__)
|
||||
#define NO_SSL // SSL is not supported
|
||||
#define NO_CGI // CGI is not supported
|
||||
#define PATH_MAX FILENAME_MAX
|
||||
#endif // __SYMBIAN32__
|
||||
|
||||
#ifndef _WIN32_WCE // Some ANSI #includes are not available on Windows CE
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <fcntl.h>
|
||||
#endif // !_WIN32_WCE
|
||||
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <limits.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(_WIN32) && !defined(__SYMBIAN32__) // Windows specific
|
||||
#undef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0400 // To make it link in VS2005
|
||||
#include <windows.h>
|
||||
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX MAX_PATH
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
#include <process.h>
|
||||
#include <direct.h>
|
||||
#include <io.h>
|
||||
#else // _WIN32_WCE
|
||||
#define NO_CGI // WinCE has no pipes
|
||||
|
||||
typedef long off_t;
|
||||
|
||||
#define errno GetLastError()
|
||||
#define strerror(x) _ultoa(x, (char *) _alloca(sizeof(x) *3 ), 10)
|
||||
#endif // _WIN32_WCE
|
||||
|
||||
#define MAKEUQUAD(lo, hi) ((uint64_t)(((uint32_t)(lo)) | \
|
||||
((uint64_t)((uint32_t)(hi))) << 32))
|
||||
#define RATE_DIFF 10000000 // 100 nsecs
|
||||
#define EPOCH_DIFF MAKEUQUAD(0xd53e8000, 0x019db1de)
|
||||
#define SYS2UNIX_TIME(lo, hi) \
|
||||
(time_t) ((MAKEUQUAD((lo), (hi)) - EPOCH_DIFF) / RATE_DIFF)
|
||||
|
||||
// Visual Studio 6 does not know __func__ or __FUNCTION__
|
||||
// The rest of MS compilers use __FUNCTION__, not C99 __func__
|
||||
// Also use _strtoui64 on modern M$ compilers
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1300
|
||||
#define STRX(x) #x
|
||||
#define STR(x) STRX(x)
|
||||
#define __func__ __FILE__ ":" STR(__LINE__)
|
||||
#define strtoull(x, y, z) (unsigned __int64) _atoi64(x)
|
||||
#define strtoll(x, y, z) _atoi64(x)
|
||||
#else
|
||||
#define __func__ __FUNCTION__
|
||||
#define strtoull(x, y, z) _strtoui64(x, y, z)
|
||||
#define strtoll(x, y, z) _strtoi64(x, y, z)
|
||||
#endif // _MSC_VER
|
||||
|
||||
#define ERRNO GetLastError()
|
||||
#define NO_SOCKLEN_T
|
||||
#define SSL_LIB "ssleay32.dll"
|
||||
#define CRYPTO_LIB "libeay32.dll"
|
||||
#define O_NONBLOCK 0
|
||||
#if !defined(EWOULDBLOCK)
|
||||
#define EWOULDBLOCK WSAEWOULDBLOCK
|
||||
#endif // !EWOULDBLOCK
|
||||
#define _POSIX_
|
||||
#define INT64_FMT "I64d"
|
||||
|
||||
#define WINCDECL __cdecl
|
||||
#define SHUT_WR 1
|
||||
#define snprintf _snprintf
|
||||
#define vsnprintf _vsnprintf
|
||||
#define mg_sleep(x) Sleep(x)
|
||||
|
||||
#define pipe(x) _pipe(x, MG_BUF_LEN, _O_BINARY)
|
||||
#ifndef popen
|
||||
#define popen(x, y) _popen(x, y)
|
||||
#endif
|
||||
#ifndef pclose
|
||||
#define pclose(x) _pclose(x)
|
||||
#endif
|
||||
#define close(x) _close(x)
|
||||
#define dlsym(x,y) GetProcAddress((HINSTANCE) (x), (y))
|
||||
#define RTLD_LAZY 0
|
||||
#define fseeko(x, y, z) _lseeki64(_fileno(x), (y), (z))
|
||||
#define fdopen(x, y) _fdopen((x), (y))
|
||||
#define write(x, y, z) _write((x), (y), (unsigned) z)
|
||||
#define read(x, y, z) _read((x), (y), (unsigned) z)
|
||||
#define flockfile(x)
|
||||
#define funlockfile(x)
|
||||
#define sleep(x) Sleep((x) * 1000)
|
||||
#define rmdir(x) _rmdir(x)
|
||||
|
||||
#if !defined(va_copy)
|
||||
#define va_copy(x, y) x = y
|
||||
#endif // !va_copy MINGW #defines va_copy
|
||||
|
||||
#if !defined(fileno)
|
||||
#define fileno(x) _fileno(x)
|
||||
#endif // !fileno MINGW #defines fileno
|
||||
|
||||
typedef HANDLE pthread_mutex_t;
|
||||
typedef struct {HANDLE signal, broadcast;} pthread_cond_t;
|
||||
typedef DWORD pthread_t;
|
||||
#define pid_t HANDLE // MINGW typedefs pid_t to int. Using #define here.
|
||||
|
||||
static int pthread_mutex_lock(pthread_mutex_t *);
|
||||
static int pthread_mutex_unlock(pthread_mutex_t *);
|
||||
static void to_unicode(const char *path, wchar_t *wbuf, size_t wbuf_len);
|
||||
|
||||
#if defined(HAVE_STDINT)
|
||||
#include <stdint.h>
|
||||
#else
|
||||
typedef unsigned int uint32_t;
|
||||
typedef unsigned short uint16_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
typedef __int64 int64_t;
|
||||
#define INT64_MAX 9223372036854775807
|
||||
#endif // HAVE_STDINT
|
||||
|
||||
// POSIX dirent interface
|
||||
struct dirent {
|
||||
char d_name[PATH_MAX];
|
||||
};
|
||||
|
||||
typedef struct DIR {
|
||||
HANDLE handle;
|
||||
WIN32_FIND_DATAW info;
|
||||
struct dirent result;
|
||||
} DIR;
|
||||
|
||||
#ifndef HAVE_POLL
|
||||
struct pollfd {
|
||||
SOCKET fd;
|
||||
short events;
|
||||
short revents;
|
||||
};
|
||||
#define POLLIN 1
|
||||
#endif
|
||||
|
||||
|
||||
// Mark required libraries
|
||||
#ifdef _MSC_VER
|
||||
#pragma comment(lib, "Ws2_32.lib")
|
||||
#endif
|
||||
|
||||
#else // UNIX specific
|
||||
#include <sys/wait.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/poll.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdint.h>
|
||||
#include <inttypes.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#include <pwd.h>
|
||||
#include <unistd.h>
|
||||
#include <dirent.h>
|
||||
#if !defined(NO_SSL_DL) && !defined(NO_SSL)
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
#include <pthread.h>
|
||||
#if defined(__MACH__)
|
||||
#define SSL_LIB "libssl.dylib"
|
||||
#define CRYPTO_LIB "libcrypto.dylib"
|
||||
#else
|
||||
#if !defined(SSL_LIB)
|
||||
#define SSL_LIB "libssl.so"
|
||||
#endif
|
||||
#if !defined(CRYPTO_LIB)
|
||||
#define CRYPTO_LIB "libcrypto.so"
|
||||
#endif
|
||||
#endif
|
||||
#ifndef O_BINARY
|
||||
#define O_BINARY 0
|
||||
#endif // O_BINARY
|
||||
#define closesocket(a) close(a)
|
||||
#define mg_mkdir(x, y) mkdir(x, y)
|
||||
#define mg_remove(x) remove(x)
|
||||
#define mg_sleep(x) usleep((x) * 1000)
|
||||
#define ERRNO errno
|
||||
#define INVALID_SOCKET (-1)
|
||||
#define INT64_FMT PRId64
|
||||
typedef int SOCKET;
|
||||
#define WINCDECL
|
||||
|
||||
#endif // End of Windows and UNIX specific includes
|
||||
|
||||
#include "mongoose.h"
|
||||
|
||||
#define MONGOOSE_VERSION "4.2"
|
||||
#define PASSWORDS_FILE_NAME ".htpasswd"
|
||||
#define CGI_ENVIRONMENT_SIZE 4096
|
||||
#define MAX_CGI_ENVIR_VARS 64
|
||||
#define MG_BUF_LEN 8192
|
||||
#define MAX_REQUEST_SIZE 16384
|
||||
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
|
5146
build/src/mongoose.c
Normal file
5146
build/src/mongoose.c
Normal file
File diff suppressed because it is too large
Load Diff
12
mongoose.c
12
mongoose.c
@ -256,12 +256,6 @@ typedef int SOCKET;
|
||||
#define MAX_REQUEST_SIZE 16384
|
||||
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
|
||||
|
||||
#ifdef _WIN32
|
||||
static pthread_t pthread_self(void) {
|
||||
return GetCurrentThreadId();
|
||||
}
|
||||
#endif // _WIN32
|
||||
|
||||
#ifdef DEBUG_TRACE
|
||||
#undef DEBUG_TRACE
|
||||
#define DEBUG_TRACE(x)
|
||||
@ -967,6 +961,10 @@ static void send_http_error(struct mg_connection *conn, int status,
|
||||
}
|
||||
|
||||
#if defined(_WIN32) && !defined(__SYMBIAN32__)
|
||||
static pthread_t pthread_self(void) {
|
||||
return GetCurrentThreadId();
|
||||
}
|
||||
|
||||
static int pthread_mutex_init(pthread_mutex_t *mutex, void *unused) {
|
||||
(void) unused;
|
||||
*mutex = CreateMutex(NULL, FALSE, NULL);
|
||||
@ -1563,7 +1561,7 @@ int mg_read(struct mg_connection *conn, void *buf, int len) {
|
||||
if (len > 0 && (buffered_len = conn->data_len - conn->request_len) > 0) {
|
||||
char *body = conn->buf + conn->request_len;
|
||||
if (buffered_len > len) buffered_len = len;
|
||||
if (buffered_len > conn->content_len) buffered_len = conn->content_len;
|
||||
if (buffered_len > conn->content_len) buffered_len = (int)conn->content_len;
|
||||
|
||||
memcpy(buf, body, (size_t) buffered_len);
|
||||
memmove(body, body + buffered_len,
|
||||
|
Loading…
Reference in New Issue
Block a user