|  | @@ -1981,20 +1981,31 @@ mg_fopen(const struct mg_connection *conn,
 | 
	
		
			
				|  |  |  		* some fields like size and modification date with values */
 | 
	
		
			
				|  |  |  		found = mg_stat(conn, path, &(filep->stat));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if (found) {
 | 
	
		
			
				|  |  | +		/* TODO: if found=false, only call fopen if the file should
 | 
	
		
			
				|  |  | +		 * be created. If it should only be read, fail early. */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  #ifdef _WIN32
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  |  			wchar_t wbuf[PATH_MAX], wmode[20];
 | 
	
		
			
				|  |  |  			path_to_unicode(conn, path, wbuf, ARRAY_SIZE(wbuf));
 | 
	
		
			
				|  |  |  			MultiByteToWideChar(CP_UTF8, 0, mode, -1, wmode, ARRAY_SIZE(wmode));
 | 
	
		
			
				|  |  |  			filep->access.fp = _wfopen(wbuf, wmode);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  #else
 | 
	
		
			
				|  |  | -			/* Linux et al already use unicode. No need to convert. */
 | 
	
		
			
				|  |  | -			filep->access.fp = fopen(path, mode);
 | 
	
		
			
				|  |  | +		/* Linux et al already use unicode. No need to convert. */
 | 
	
		
			
				|  |  | +		filep->access.fp = fopen(path, mode);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  | -			/* file is on disk */
 | 
	
		
			
				|  |  | -			return (filep->access.fp != NULL);
 | 
	
		
			
				|  |  | +		if (!found) {
 | 
	
		
			
				|  |  | +			/* File did not exist before fopen was called.
 | 
	
		
			
				|  |  | +			 * Maybe it has been created now. Get stat info
 | 
	
		
			
				|  |  | +			 * like creation time now. */
 | 
	
		
			
				|  |  | +			found = mg_stat(conn, path, &(filep->stat));
 | 
	
		
			
				|  |  | +			(void)found;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		/* file is on disk */
 | 
	
		
			
				|  |  | +		return (filep->access.fp != NULL);		
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  |  		if (open_file_in_memory(conn, path, filep)) {
 | 
	
		
			
				|  |  |  			/* file is in memory */
 |