diff --git a/vapi/posix.vapi b/vapi/posix.vapi
index a65ef57..34f8c42 100644
--- a/vapi/posix.vapi
+++ b/vapi/posix.vapi
@@ -2543,5 +2543,53 @@ namespace Posix {
 		[CCode (cname = "glob", instance_pos = -1)]
 		public int glob (string pattern, int flags = 0, GlobErrorFunction? errfunc = null);
 	}
+
+	[CCode(cname = "fnmatch", cheader_filename = "fnmatch.h")]
+	public int filename_match(string pattern, string str, FileMatchFlags flags = FileMatchFlags.NONE);
+
+	[CCode(cname = "int", cprefix="FNM_", cheader_filename = "fnmatch.h")]
+	[Flags]
+	public enum FileMatchFlags {
+		[CCode(cname = "0")]
+		NONE,
+		NOESCAPE,
+		PATHNAME,
+		PERIOD
+	}
+	[CCode(cname = "FNM_NOMATCH", cheader_filename = "fnmatch.h")]
+	public const int FILENAME_NO_MATCH;
+
+	[CCode(cname = "wordexp_t", cheader_filename = "wordexp.h", destroy_function = "wordfree")]
+	public struct word {
+		[CCode(cname = "wordexp")]
+		public static WordCode expand(string s, out word w, WordFlags flags = WordFlags.NONE);
+		[CCode(cname = "we_wordv", array_length_cname = "we_wordc", array_length_type = "size_t")]
+		string[] words;
+		[CCode(cname = "we_offs")]
+		size_t offset;
+	}
+
+	[CCode(cname = "int", cprefix = "WRDE_")]
+	[Flags]
+	public enum WordFlags {
+		[CCode(cname = "0")]
+		NONE,
+		APPEND,
+		DOOFFS,
+		NOCMD,
+		SHOWERR,
+		UNDEF
+	}
+
+	[CCode(cname = "int", cprefix = "WRDE_")]
+	public enum WordCode {
+		[CCode(cname = "0")]
+		SUCCESS,
+		BADCHAR,
+		BADVAL,
+		CMDSUB,
+		NOSPACE,
+		SYNTAX
+	}
 }
 
