|
@@ -131,7 +131,7 @@ static int g_exit_flag = 0; /* Main loop should exit */
|
|
|
static char g_server_base_name[40]; /* Set by init_server_name() */
|
|
|
static char *g_server_name; /* Set by init_server_name() */
|
|
|
static char *g_icon_name; /* Set by init_server_name() */
|
|
|
-static char g_config_file[PATH_MAX] =
|
|
|
+static char g_config_file_name[PATH_MAX] =
|
|
|
""; /* Set by process_command_line_arguments() */
|
|
|
static struct mg_context *g_ctx; /* Set by start_civetweb() */
|
|
|
static struct tuser_data
|
|
@@ -439,18 +439,18 @@ set_option(char **options, const char *name, const char *value)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static void
|
|
|
+static int
|
|
|
read_config_file(const char *config_file, char **options)
|
|
|
{
|
|
|
char line[MAX_CONF_FILE_LINE_SIZE], *p;
|
|
|
FILE *fp = NULL;
|
|
|
size_t i, j, line_no = 0;
|
|
|
|
|
|
+ /* Open the config file */
|
|
|
fp = fopen(config_file, "r");
|
|
|
-
|
|
|
- /* If config file was set in command line and open failed, die */
|
|
|
if (fp == NULL) {
|
|
|
- die("Cannot open config file %s: %s", config_file, strerror(errno));
|
|
|
+ /* Failed to open the file. Keep errno for the caller. */
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/* Load config file settings first */
|
|
@@ -507,6 +507,7 @@ read_config_file(const char *config_file, char **options)
|
|
|
|
|
|
(void)fclose(fp);
|
|
|
}
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -521,30 +522,38 @@ process_command_line_arguments(char *argv[], char **options)
|
|
|
|
|
|
/* Should we use a config file ? */
|
|
|
if (argv[1] != NULL && argv[1][0] != '-') {
|
|
|
- snprintf(g_config_file, sizeof(g_config_file) - 1, "%s", argv[1]);
|
|
|
+ /* A config file was set */
|
|
|
+ snprintf(g_config_file_name,
|
|
|
+ sizeof(g_config_file_name) - 1,
|
|
|
+ "%s",
|
|
|
+ argv[1]);
|
|
|
cmd_line_opts_start = 2;
|
|
|
} else if ((p = strrchr(argv[0], DIRSEP)) == NULL) {
|
|
|
- /* No command line flags specified. Look where binary lives */
|
|
|
- snprintf(g_config_file, sizeof(g_config_file) - 1, "%s", CONFIG_FILE);
|
|
|
+ /* No config file set. Use default file name in the current path. */
|
|
|
+ snprintf(g_config_file_name,
|
|
|
+ sizeof(g_config_file_name) - 1,
|
|
|
+ "%s",
|
|
|
+ CONFIG_FILE);
|
|
|
} else {
|
|
|
- snprintf(g_config_file,
|
|
|
- sizeof(g_config_file) - 1,
|
|
|
+ /* No config file set. Use default file name next to the executable. */
|
|
|
+ snprintf(g_config_file_name,
|
|
|
+ sizeof(g_config_file_name) - 1,
|
|
|
"%.*s%c%s",
|
|
|
(int)(p - argv[0]),
|
|
|
argv[0],
|
|
|
DIRSEP,
|
|
|
CONFIG_FILE);
|
|
|
}
|
|
|
- g_config_file[sizeof(g_config_file) - 1] = 0;
|
|
|
+ g_config_file_name[sizeof(g_config_file_name) - 1] = 0;
|
|
|
|
|
|
#ifdef CONFIG_FILE2
|
|
|
- fp = fopen(g_config_file, "r");
|
|
|
+ fp = fopen(g_config_file_name, "r");
|
|
|
|
|
|
/* try alternate config file */
|
|
|
if (fp == NULL) {
|
|
|
fp = fopen(CONFIG_FILE2, "r");
|
|
|
if (fp != NULL) {
|
|
|
- strcpy(g_config_file, CONFIG_FILE2);
|
|
|
+ strcpy(g_config_file_name, CONFIG_FILE2);
|
|
|
}
|
|
|
}
|
|
|
if (fp != NULL) {
|
|
@@ -553,7 +562,16 @@ process_command_line_arguments(char *argv[], char **options)
|
|
|
#endif
|
|
|
|
|
|
/* read all configurations from a config file */
|
|
|
- (void)read_config_file(g_config_file, options);
|
|
|
+ if (0 == read_config_file(g_config_file_name, options)) {
|
|
|
+ if (cmd_line_opts_start == 2) {
|
|
|
+ /* If config file was set in command line and open failed, die. */
|
|
|
+ /* Errno will still hold the error from fopen. */
|
|
|
+ die("Cannot open config file %s: %s",
|
|
|
+ g_config_file_name,
|
|
|
+ strerror(errno));
|
|
|
+ }
|
|
|
+ /* Otherwise: CivetWeb can work without a config file */
|
|
|
+ }
|
|
|
|
|
|
/* If we're under MacOS and started by launchd, then the second
|
|
|
argument is process serial number, -psn_.....
|
|
@@ -1221,7 +1239,7 @@ SettingsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
|
|
|
|
case ID_SAVE:
|
|
|
EnableWindow(GetDlgItem(hDlg, ID_SAVE), FALSE);
|
|
|
- if ((fp = fopen(g_config_file, "w+")) != NULL) {
|
|
|
+ if ((fp = fopen(g_config_file_name, "w+")) != NULL) {
|
|
|
save_config(hDlg, fp);
|
|
|
fclose(fp);
|
|
|
stop_civetweb();
|
|
@@ -1248,7 +1266,7 @@ SettingsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
|
break;
|
|
|
|
|
|
case ID_RESET_FILE:
|
|
|
- read_config_file(g_config_file, file_options);
|
|
|
+ read_config_file(g_config_file_name, file_options);
|
|
|
for (i = 0; default_options[i].name != NULL; i++) {
|
|
|
name = default_options[i].name;
|
|
|
value = default_options[i].default_value;
|