|  | @@ -45,10 +45,12 @@
 | 
	
		
			
				|  |  |  #define	snprintf _snprintf
 | 
	
		
			
				|  |  |  #define	vsnprintf _vsnprintf
 | 
	
		
			
				|  |  |  #define	sleep(x) Sleep((x) * 1000)
 | 
	
		
			
				|  |  | +#define WINCDECL __cdecl
 | 
	
		
			
				|  |  |  #else
 | 
	
		
			
				|  |  |  #include <sys/wait.h>
 | 
	
		
			
				|  |  |  #include <unistd.h>
 | 
	
		
			
				|  |  |  #define DIRSEP '/'
 | 
	
		
			
				|  |  | +#define WINCDECL
 | 
	
		
			
				|  |  |  #endif // _WIN32
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #define MAX_OPTIONS 40
 | 
	
	
		
			
				|  | @@ -62,7 +64,7 @@ static struct mg_context *ctx;
 | 
	
		
			
				|  |  |  #define	CONFIG_FILE "mongoose.conf"
 | 
	
		
			
				|  |  |  #endif /* !CONFIG_FILE */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static void signal_handler(int sig_num) {
 | 
	
		
			
				|  |  | +static void WINCDECL signal_handler(int sig_num) {
 | 
	
		
			
				|  |  |  #if !defined(_WIN32)
 | 
	
		
			
				|  |  |    if (sig_num == SIGCHLD) {
 | 
	
		
			
				|  |  |      do {
 | 
	
	
		
			
				|  | @@ -177,7 +179,7 @@ static void set_option(char **options, const char *name, const char *value) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void process_command_line_arguments(char *argv[], char **options) {
 | 
	
		
			
				|  |  |    const char	*config_file = NULL;
 | 
	
		
			
				|  |  | -  char line[512], opt[512], val[512], path[PATH_MAX];
 | 
	
		
			
				|  |  | +  char line[512], opt[512], val[512], path[PATH_MAX], *p;
 | 
	
		
			
				|  |  |    FILE *fp = NULL;
 | 
	
		
			
				|  |  |    struct stat st;
 | 
	
		
			
				|  |  |    size_t i, line_no = 0;
 | 
	
	
		
			
				|  | @@ -185,12 +187,12 @@ static void process_command_line_arguments(char *argv[], char **options) {
 | 
	
		
			
				|  |  |    /* Should we use a config file ? */
 | 
	
		
			
				|  |  |    if (argv[1] != NULL && argv[2] == NULL) {
 | 
	
		
			
				|  |  |      config_file = argv[1];
 | 
	
		
			
				|  |  | -  } else if (argv[1] == NULL) {
 | 
	
		
			
				|  |  | +  } else if (argv[1] == NULL && (p = strchr(argv[0], DIRSEP)) == NULL) {
 | 
	
		
			
				|  |  |      // No command line flags specified. Look where binary lives
 | 
	
		
			
				|  |  | -    // TODO(lsm): do proper error handling here
 | 
	
		
			
				|  |  | -    getcwd(path, sizeof(path));
 | 
	
		
			
				|  |  | -    snprintf(path + strlen(path), sizeof(path) - strlen(path), "%c%s",
 | 
	
		
			
				|  |  | -             DIRSEP, CONFIG_FILE);
 | 
	
		
			
				|  |  | +    config_file = CONFIG_FILE;
 | 
	
		
			
				|  |  | +  } else if (argv[1] == NULL) {
 | 
	
		
			
				|  |  | +    snprintf(path, sizeof(path), "%.*s%c%s",
 | 
	
		
			
				|  |  | +             (int) (p - argv[0]), argv[0], DIRSEP, CONFIG_FILE);
 | 
	
		
			
				|  |  |      if (stat(path, &st) == 0) {
 | 
	
		
			
				|  |  |        config_file = path;
 | 
	
		
			
				|  |  |      }
 |