diff --git a/main.c b/main.c index d1f152a28ef41a506965d86fa6622b2ad0e7c1c3..29eada6c84b066910e7f591ceefb99b6b94a633b 100644 --- a/main.c +++ b/main.c @@ -99,18 +99,18 @@ static void show_usage_and_exit(void) { const char **names; int i; - fprintf(stderr, "Mongoose version %s (c) Sergey Lyubka, built %s\n", + fprintf(stderr, "Mongoose version %s (c) Sergey Lyubka, built on %s\n", mg_version(), __DATE__); fprintf(stderr, "Usage:\n"); fprintf(stderr, " mongoose -A <htpasswd_file> <realm> <user> <passwd>\n"); - fprintf(stderr, " mongoose <config_file>\n"); + fprintf(stderr, " mongoose [config_file]\n"); fprintf(stderr, " mongoose [-option value ...]\n"); fprintf(stderr, "\nOPTIONS:\n"); names = mg_get_valid_option_names(); - for (i = 0; names[i] != NULL; i += 3) { - fprintf(stderr, " -%s %s (default: \"%s\")\n", - names[i], names[i + 1], names[i + 2] == NULL ? "" : names[i + 2]); + for (i = 0; names[i] != NULL; i += 2) { + fprintf(stderr, " -%s %s\n", + names[i], names[i + 1] == NULL ? "<empty>" : names[i + 1]); } exit(EXIT_FAILURE); } @@ -153,9 +153,9 @@ static void create_config_file(const char *path) { } else if ((fp = fopen(path, "a+")) != NULL) { fprintf(fp, "%s", config_file_top_comment); names = mg_get_valid_option_names(); - for (i = 0; names[i] != NULL; i += 3) { - value = mg_get_option(ctx, names[i]); - fprintf(fp, "# %s %s\n", names[i + 1], *value ? value : "<value>"); + for (i = 0; names[i * 2] != NULL; i++) { + value = mg_get_option(ctx, names[i * 2]); + fprintf(fp, "# %s %s\n", names[i * 2], value ? value : "<value>"); } fclose(fp); } @@ -417,16 +417,16 @@ static void save_config(HWND hDlg, FILE *fp) { fprintf(fp, "%s", config_file_top_comment); options = mg_get_valid_option_names(); - for (i = 0; options[i] != NULL; i += 3) { - name = options[i + 1]; - id = ID_CONTROLS + i / 3; + for (i = 0; options[i * 2] != NULL; i++) { + name = options[i * 2]; + id = ID_CONTROLS + i; if (is_boolean_option(name)) { snprintf(value, sizeof(value), "%s", IsDlgButtonChecked(hDlg, id) ? "yes" : "no"); } else { GetDlgItemText(hDlg, id, value, sizeof(value)); } - default_value = options[i + 2] == NULL ? "" : options[i + 2]; + default_value = options[i * 2 + 1] == NULL ? "" : options[i * 2 + 1]; // If value is the same as default, skip it if (strcmp(value, default_value) != 0) { fprintf(fp, "%s %s\n", name, value); @@ -457,23 +457,23 @@ static BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP) { EnableWindow(GetDlgItem(hDlg, ID_SAVE), TRUE); break; case ID_RESET_DEFAULTS: - for (i = 0; options[i] != NULL; i += 3) { - name = options[i + 1]; - value = options[i + 2] == NULL ? "" : options[i + 2]; + for (i = 0; options[i * 2] != NULL; i++) { + name = options[i * 2]; + value = options[i * 2 + 1] == NULL ? "" : options[i * 2 + 1]; if (is_boolean_option(name)) { - CheckDlgButton(hDlg, ID_CONTROLS + i / 3, !strcmp(value, "yes") ? + CheckDlgButton(hDlg, ID_CONTROLS + i, !strcmp(value, "yes") ? BST_CHECKED : BST_UNCHECKED); } else { - SetWindowText(GetDlgItem(hDlg, ID_CONTROLS + i / 3), value); + SetWindowText(GetDlgItem(hDlg, ID_CONTROLS + i), value); } } break; } - for (i = 0; options[i] != NULL; i += 3) { - name = options[i + 1]; + for (i = 0; options[i * 2] != NULL; i++) { + name = options[i * 2]; if ((is_filename_option(name) || is_directory_option(name)) && - LOWORD(wParam) == ID_CONTROLS + i / 3 + ID_FILE_BUTTONS_DELTA) { + LOWORD(wParam) == ID_CONTROLS + i + ID_FILE_BUTTONS_DELTA) { OPENFILENAME of; BROWSEINFO bi; char path[PATH_MAX] = ""; @@ -498,7 +498,7 @@ static BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP) { } if (path[0] != '\0') { - SetWindowText(GetDlgItem(hDlg, ID_CONTROLS + i / 3), path); + SetWindowText(GetDlgItem(hDlg, ID_CONTROLS + i), path); } } } @@ -510,14 +510,14 @@ static BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP) { SendMessage(hDlg, WM_SETICON,(WPARAM) ICON_BIG, (LPARAM) hIcon); SetWindowText(hDlg, "Mongoose settings"); SetFocus(GetDlgItem(hDlg, ID_SAVE)); - for (i = 0; options[i] != NULL; i += 3) { - name = options[i + 1]; + for (i = 0; options[i * 2] != NULL; i++) { + name = options[i * 2]; value = mg_get_option(ctx, name); if (is_boolean_option(name)) { - CheckDlgButton(hDlg, ID_CONTROLS + i / 3, !strcmp(value, "yes") ? + CheckDlgButton(hDlg, ID_CONTROLS + i, !strcmp(value, "yes") ? BST_CHECKED : BST_UNCHECKED); } else { - SetDlgItemText(hDlg, ID_CONTROLS + i / 3, value == NULL ? "" : value); + SetDlgItemText(hDlg, ID_CONTROLS + i, value == NULL ? "" : value); } } break; @@ -594,8 +594,8 @@ static void show_settings_dialog() { p = mem + sizeof(dialog_header); option_names = mg_get_valid_option_names(); - for (i = 0; option_names[i] != NULL; i += 3) { - long_option_name = option_names[i + 1]; + for (i = 0; option_names[i * 2] != NULL; i++) { + long_option_name = option_names[i * 2]; style = WS_CHILD | WS_VISIBLE | WS_TABSTOP; x = 10 + (WIDTH / 2) * (nelems % 2); y = (nelems/2 + 1) * HEIGHT + 5; @@ -613,7 +613,7 @@ static void show_settings_dialog() { width -= 20; cl = 0x81; add_control(&p, dia, 0x80, - ID_CONTROLS + (i / 3) + ID_FILE_BUTTONS_DELTA, + ID_CONTROLS + i + ID_FILE_BUTTONS_DELTA, WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, (WORD) (x + width + LABEL_WIDTH + 5), y, 15, 12, "..."); @@ -623,7 +623,7 @@ static void show_settings_dialog() { } add_control(&p, dia, 0x82, ID_STATIC, WS_VISIBLE | WS_CHILD, x, y, LABEL_WIDTH, HEIGHT, long_option_name); - add_control(&p, dia, cl, ID_CONTROLS + (i / 3), style, + add_control(&p, dia, cl, ID_CONTROLS + i, style, (WORD) (x + LABEL_WIDTH), y, width, 12, ""); nelems++; } diff --git a/mongoose.c b/mongoose.c index 3e20d1391c4d8f325b4589ceb11c782100a6e6ef..f407688d77b122b18270b61fc8b3e6a46fdc2d96 100644 --- a/mongoose.c +++ b/mongoose.c @@ -440,34 +440,33 @@ enum { }; static const char *config_options[] = { - "C", "cgi_pattern", "**.cgi$|**.pl$|**.php$", - "E", "cgi_environment", NULL, - "G", "put_delete_auth_file", NULL, - "I", "cgi_interpreter", NULL, - "P", "protect_uri", NULL, - "R", "authentication_domain", "mydomain.com", - "S", "ssi_pattern", "**.shtml$|**.shtm$", - "T", "throttle", NULL, - "a", "access_log_file", NULL, - "d", "enable_directory_listing", "yes", - "e", "error_log_file", NULL, - "g", "global_auth_file", NULL, - "i", "index_files", - "index.html,index.htm,index.cgi,index.shtml,index.php,index.lp", - "k", "enable_keep_alive", "no", - "l", "access_control_list", NULL, - "m", "extra_mime_types", NULL, - "p", "listening_ports", "8080", - "r", "document_root", ".", - "s", "ssl_certificate", NULL, - "t", "num_threads", "50", - "u", "run_as_user", NULL, - "w", "url_rewrite_patterns", NULL, - "x", "hide_files_patterns", NULL, - "z", "request_timeout_ms", "30000", + "cgi_pattern", "**.cgi$|**.pl$|**.php$", + "cgi_environment", NULL, + "put_delete_auth_file", NULL, + "cgi_interpreter", NULL, + "protect_uri", NULL, + "authentication_domain", "mydomain.com", + "ssi_pattern", "**.shtml$|**.shtm$", + "throttle", NULL, + "access_log_file", NULL, + "enable_directory_listing", "yes", + "error_log_file", NULL, + "global_auth_file", NULL, + "index_files", + "index.html,index.htm,index.cgi,index.shtml,index.php,index.lp", + "enable_keep_alive", "no", + "access_control_list", NULL, + "extra_mime_types", NULL, + "listening_ports", "8080", + "document_root", ".", + "ssl_certificate", NULL, + "num_threads", "50", + "run_as_user", NULL, + "url_rewrite_patterns", NULL, + "hide_files_patterns", NULL, + "request_timeout_ms", "30000", NULL }; -#define ENTRIES_PER_CONFIG_OPTION 3 struct mg_context { volatile int stop_flag; // Should we stop event loop @@ -557,10 +556,9 @@ static void mg_fclose(struct file *filep) { static int get_option_index(const char *name) { int i; - for (i = 0; config_options[i] != NULL; i += ENTRIES_PER_CONFIG_OPTION) { - if (strcmp(config_options[i], name) == 0 || - strcmp(config_options[i + 1], name) == 0) { - return i / ENTRIES_PER_CONFIG_OPTION; + for (i = 0; config_options[i * 2] != NULL; i++) { + if (strcmp(config_options[i * 2], name) == 0) { + return i; } } return -1; @@ -5285,13 +5283,10 @@ struct mg_context *mg_start(const struct mg_callbacks *callbacks, } // Set default value if needed - for (i = 0; config_options[i * ENTRIES_PER_CONFIG_OPTION] != NULL; i++) { - default_value = config_options[i * ENTRIES_PER_CONFIG_OPTION + 2]; + for (i = 0; config_options[i * 2] != NULL; i++) { + default_value = config_options[i * 2 + 1]; if (ctx->config[i] == NULL && default_value != NULL) { ctx->config[i] = mg_strdup(default_value); - DEBUG_TRACE(("Setting default: [%s] -> [%s]", - config_options[i * ENTRIES_PER_CONFIG_OPTION + 1], - default_value)); } } diff --git a/test/test.pl b/test/test.pl index d651b8ef452f814a109af2ba049d3612a61235ea..0a06285181260296861762394e3e5f79e9d4f6c9 100644 --- a/test/test.pl +++ b/test/test.pl @@ -155,7 +155,7 @@ if (scalar(@ARGV) > 0 and $ARGV[0] eq 'unit') { # Command line options override config files settings write_file($config, "access_log_file access.log\n" . "listening_ports 127.0.0.1:12345\n"); -spawn("$exe -p 127.0.0.1:$port"); +spawn("$exe -listening_ports 127.0.0.1:$port"); o("GET /test/hello.txt HTTP/1.0\n\n", 'HTTP/1.1 200 OK', 'Loading config file'); unlink $config; kill_spawned_child();