mirror of
https://github.com/cesanta/mongoose.git
synced 2025-01-15 10:18:11 +08:00
changed set_absolute_path() signature
This commit is contained in:
parent
a514e143ff
commit
c658a54d18
@ -67,6 +67,11 @@ typedef struct _stat file_stat_t;
|
|||||||
typedef struct stat file_stat_t;
|
typedef struct stat file_stat_t;
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#ifdef IOS
|
||||||
|
#include <ifaddrs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define DIRSEP '/'
|
#define DIRSEP '/'
|
||||||
#define __cdecl
|
#define __cdecl
|
||||||
#define abs_path(rel, abs, abs_size) realpath((rel), (abs))
|
#define abs_path(rel, abs, abs_size) realpath((rel), (abs))
|
||||||
@ -75,6 +80,10 @@ typedef struct stat file_stat_t;
|
|||||||
#define MAX_OPTIONS 100
|
#define MAX_OPTIONS 100
|
||||||
#define MAX_CONF_FILE_LINE_SIZE (8 * 1024)
|
#define MAX_CONF_FILE_LINE_SIZE (8 * 1024)
|
||||||
|
|
||||||
|
#ifndef MVER
|
||||||
|
#define MVER MONGOOSE_VERSION
|
||||||
|
#endif
|
||||||
|
|
||||||
static int exit_flag;
|
static int exit_flag;
|
||||||
static char server_name[50]; // Set by init_server_name()
|
static char server_name[50]; // Set by init_server_name()
|
||||||
static char config_file[PATH_MAX]; // Set by process_command_line_arguments()
|
static char config_file[PATH_MAX]; // Set by process_command_line_arguments()
|
||||||
@ -131,7 +140,7 @@ static void show_usage_and_exit(void) {
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
fprintf(stderr, "Mongoose version %s (c) Sergey Lyubka, built on %s\n",
|
fprintf(stderr, "Mongoose version %s (c) Sergey Lyubka, built on %s\n",
|
||||||
MONGOOSE_VERSION, __DATE__);
|
MVER, __DATE__);
|
||||||
fprintf(stderr, "Usage:\n");
|
fprintf(stderr, "Usage:\n");
|
||||||
#ifndef MONGOOSE_NO_AUTH
|
#ifndef MONGOOSE_NO_AUTH
|
||||||
fprintf(stderr, " mongoose -A <htpasswd_file> <realm> <user> <passwd>\n");
|
fprintf(stderr, " mongoose -A <htpasswd_file> <realm> <user> <passwd>\n");
|
||||||
@ -246,7 +255,7 @@ static void process_command_line_arguments(char *argv[], char **options) {
|
|||||||
static void init_server_name(void) {
|
static void init_server_name(void) {
|
||||||
const char *descr = "";
|
const char *descr = "";
|
||||||
snprintf(server_name, sizeof(server_name), "Mongoose web server v.%s%s",
|
snprintf(server_name, sizeof(server_name), "Mongoose web server v.%s%s",
|
||||||
MONGOOSE_VERSION, descr);
|
MVER, descr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int is_path_absolute(const char *path) {
|
static int is_path_absolute(const char *path) {
|
||||||
@ -269,6 +278,14 @@ static char *get_option(char **options, const char *option_name) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *serving_thread_func(void *param) {
|
||||||
|
struct mg_server *srv = (struct mg_server *) param;
|
||||||
|
while (exit_flag == 0) {
|
||||||
|
mg_poll_server(srv, 1000);
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static int path_exists(const char *path, int is_dir) {
|
static int path_exists(const char *path, int is_dir) {
|
||||||
file_stat_t st;
|
file_stat_t st;
|
||||||
return path == NULL || (stat(path, &st) == 0 &&
|
return path == NULL || (stat(path, &st) == 0 &&
|
||||||
@ -284,8 +301,7 @@ static void verify_existence(char **options, const char *name, int is_dir) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_absolute_path(char *options[], const char *option_name,
|
static void set_absolute_path(char *options[], const char *option_name) {
|
||||||
const char *path_to_mongoose_exe) {
|
|
||||||
char path[PATH_MAX], abs[PATH_MAX], *option_value;
|
char path[PATH_MAX], abs[PATH_MAX], *option_value;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
@ -298,11 +314,11 @@ static void set_absolute_path(char *options[], const char *option_name,
|
|||||||
// Not absolute. Use the directory where mongoose executable lives
|
// Not absolute. Use the directory where mongoose executable lives
|
||||||
// be the relative directory for everything.
|
// be the relative directory for everything.
|
||||||
// Extract mongoose executable directory into path.
|
// Extract mongoose executable directory into path.
|
||||||
if ((p = strrchr(path_to_mongoose_exe, DIRSEP)) == NULL) {
|
if ((p = strrchr(config_file, DIRSEP)) == NULL) {
|
||||||
getcwd(path, sizeof(path));
|
getcwd(path, sizeof(path));
|
||||||
} else {
|
} else {
|
||||||
snprintf(path, sizeof(path), "%.*s", (int) (p - path_to_mongoose_exe),
|
snprintf(path, sizeof(path), "%.*s", (int) (p - config_file),
|
||||||
path_to_mongoose_exe);
|
config_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
strncat(path, "/", sizeof(path) - 1);
|
strncat(path, "/", sizeof(path) - 1);
|
||||||
@ -412,16 +428,16 @@ static void start_mongoose(int argc, char *argv[]) {
|
|||||||
|
|
||||||
// Make sure we have absolute paths for files and directories
|
// Make sure we have absolute paths for files and directories
|
||||||
// https://github.com/valenok/mongoose/issues/181
|
// https://github.com/valenok/mongoose/issues/181
|
||||||
set_absolute_path(options, "document_root", argv[0]);
|
set_absolute_path(options, "document_root");
|
||||||
set_absolute_path(options, "dav_auth_file", argv[0]);
|
set_absolute_path(options, "dav_auth_file");
|
||||||
set_absolute_path(options, "cgi_interpreter", argv[0]);
|
set_absolute_path(options, "cgi_interpreter");
|
||||||
set_absolute_path(options, "access_log_file", argv[0]);
|
set_absolute_path(options, "access_log_file");
|
||||||
set_absolute_path(options, "global_auth_file", argv[0]);
|
set_absolute_path(options, "global_auth_file");
|
||||||
set_absolute_path(options, "ssl_certificate", argv[0]);
|
set_absolute_path(options, "ssl_certificate");
|
||||||
|
|
||||||
if (!path_exists(get_option(options, "document_root"), 1)) {
|
if (!path_exists(get_option(options, "document_root"), 1)) {
|
||||||
set_option(options, "document_root", s_default_document_root);
|
set_option(options, "document_root", s_default_document_root);
|
||||||
set_absolute_path(options, "document_root", argv[0]);
|
set_absolute_path(options, "document_root");
|
||||||
notify("Setting document_root to [%s]",
|
notify("Setting document_root to [%s]",
|
||||||
mg_get_option(server, "document_root"));
|
mg_get_option(server, "document_root"));
|
||||||
}
|
}
|
||||||
@ -472,9 +488,7 @@ int main(int argc, char *argv[]) {
|
|||||||
server_name, mg_get_option(server, "document_root"),
|
server_name, mg_get_option(server, "document_root"),
|
||||||
mg_get_option(server, "listening_port"));
|
mg_get_option(server, "listening_port"));
|
||||||
fflush(stdout); // Needed, Windows terminals might not be line-buffered
|
fflush(stdout); // Needed, Windows terminals might not be line-buffered
|
||||||
while (exit_flag == 0) {
|
serving_thread_func(server);
|
||||||
mg_poll_server(server, 1000);
|
|
||||||
}
|
|
||||||
printf("Exiting on signal %d ...", exit_flag);
|
printf("Exiting on signal %d ...", exit_flag);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
mg_destroy_server(&server);
|
mg_destroy_server(&server);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user