diff --git a/src/xpdev/dirwrap.c b/src/xpdev/dirwrap.c
index 273dab80e5e3ac0babde2cb38afa8c0e4f8ebd2f..7394cfb37dd89ef39a333809678c4289149e8603 100644
--- a/src/xpdev/dirwrap.c
+++ b/src/xpdev/dirwrap.c
@@ -859,3 +859,44 @@ BOOL DLLCALL isfullpath(const char* filename)
 #endif
 		);
 }
+
+/****************************************************************************/
+/* Matches file name against filespec										*/
+/* Optionally not allowing * to match PATH_DELIM (for paths)				*/
+/****************************************************************************/
+BOOL DLLCALL wildmatch(const char *fname, const char *spec, BOOL path)
+{
+	char *specp;
+	char *fnamep;
+
+	specp=(char *)spec;
+	fnamep=(char *)fname;
+	for(;;specp++, fnamep++) {
+		switch(*specp) {
+			case '?':
+				if(!(*fnamep))
+					return(FALSE);
+				break;
+			case 0:
+				if(!*fnamep)
+					return(TRUE);
+				break;
+			case '*':
+				specp++;
+				for(;*fnamep!=*specp && *fnamep;fnamep++) {
+					if(path && IS_PATH_DELIM(*fnamep))
+						return(FALSE);
+				}
+			default:
+				if(*specp != *fnamep)
+					return(FALSE);
+		}
+		if(!(*specp && *fnamep))
+			break;
+	}
+	while(*specp=='*')
+		specp++;
+	if(*specp==*fnamep)
+		return(TRUE);
+	return(FALSE);
+}
diff --git a/src/xpdev/dirwrap.h b/src/xpdev/dirwrap.h
index c2bcd23d8de29c979642126dffd4288f09bded1f..1677b0c5531e949515d86641d776f8a61bfa4eb0 100644
--- a/src/xpdev/dirwrap.h
+++ b/src/xpdev/dirwrap.h
@@ -230,6 +230,8 @@ DLLEXPORT int		DLLCALL getfattr(const char* filename);
 DLLEXPORT ulong		DLLCALL getfreediskspace(const char* path, ulong unit);
 DLLEXPORT ulong		DLLCALL delfiles(char *inpath, char *spec);
 DLLEXPORT char*		DLLCALL backslash(char* path);
+DLLEXPORT BOOL 		DLLCALL wildmatch(const char *fname, const char *spec, BOOL path);
+
 
 #if defined(__unix__)
 DLLEXPORT void DLLCALL _splitpath(const char *path, char *drive, char *dir,