diff --git a/src/xpdev/ini_file.c b/src/xpdev/ini_file.c
index 0ea9e8ac0219b97921ce352f58986f6d0a5a4130..4a599a0059d01097cc2f660282e5d76c6cface5c 100644
--- a/src/xpdev/ini_file.c
+++ b/src/xpdev/ini_file.c
@@ -854,6 +854,39 @@ ulong iniGetIpAddress(str_list_t* list, const char* section, const char* key, ul
 
 #endif	/* !NO_SOCKET_SUPPORT */
 
+char* iniFileName(char* dest, size_t maxlen, const char* indir, const char* infname)
+{
+	char	dir[MAX_PATH+1];
+	char	fname[MAX_PATH+1];
+	char	ext[MAX_PATH+1];
+	char*	p;
+
+	SAFECOPY(dir,indir);
+	backslash(dir);
+	SAFECOPY(fname,infname);
+	ext[0]=0;
+	if((p=getfext(fname))!=NULL) {
+		SAFECOPY(ext,p);
+		*p=0;
+	}
+
+#if !defined(NO_SOCKET_SUPPORT)
+	{
+		char hostname[128];
+
+		if(gethostname(hostname,sizeof(hostname))==0) {
+			safe_snprintf(dest,maxlen,"%s%s.%s%s",dir,fname,hostname,ext);
+			if(fexistcase(dest))
+				return(dest);
+		}
+	}
+#endif
+	
+	safe_snprintf(dest,maxlen,"%s%s%s",dir,fname,ext);
+	fexistcase(dest);
+	return(dest);
+}
+
 double iniReadFloat(FILE* fp, const char* section, const char* key, double deflt)
 {
 	char	buf[INI_MAX_VALUE_LEN];
diff --git a/src/xpdev/ini_file.h b/src/xpdev/ini_file.h
index 1f5c2eb3146daa616bf8b6d307f28e4709c5c803..ab1b9847bc0ebf3107728725092a1357133dfc2e 100644
--- a/src/xpdev/ini_file.h
+++ b/src/xpdev/ini_file.h
@@ -96,6 +96,7 @@ void*		iniFreeNamedStringList(named_string_t** list);
 
 
 /* File I/O Functions */
+char*		iniFileName(char* dest, size_t maxlen, const char* dir, const char* fname);
 FILE*		iniOpenFile(const char* fname);
 str_list_t	iniReadFile(FILE*);
 BOOL		iniWriteFile(FILE*, const str_list_t);