diff --git a/vapi/posix.vapi b/vapi/posix.vapi
index a65ef57..fc3f1a9 100644
--- a/vapi/posix.vapi
+++ b/vapi/posix.vapi
@@ -2543,5 +2550,61 @@ 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, int flags = 0);
+
+	[CCode(cname = "FNM_NOESCAPE", cheader_filename = "fnmatch.h")]
+	public const int FNM_NOESCAPE;
+	[CCode(cname = "FNM_PATHNAME", cheader_filename = "fnmatch.h")]
+	public const int FNM_PATHNAME;
+	[CCode(cname = "FNM_PERIOD", cheader_filename = "fnmatch.h")]
+	public const int FNM_PERIOD;
+
+	[CCode(cname = "FNM_NOMATCH", cheader_filename = "fnmatch.h")]
+	public const int FNM_NOMATCH;
+
+	[CCode(cname = "wordexp_t", cheader_filename = "wordexp.h", destroy_function = "wordfree")]
+	public struct word {
+		[CCode(cname = "we_wordv", array_length_cname = "we_wordc", array_length_type = "size_t")]
+		string[] words;
+
+		[CCode(cname = "wordexp", instance_pos = 1.1)]
+		private int _wordexp (string s, int flags = 0);
+		[CCode(cname = "wordfree")]
+		private int _wordfree();
+
+		public int expand (string s, int flags = 0) {
+			if (!(WRDE_APPEND in flags || WRDE_REUSE in flags)) {
+				this._wordfree();
+			}
+			return this._wordexp(s, flags);
+		}
+		public int append(string s, int flags = 0) {
+			return this._wordexp(s, flags | WRDE_APPEND);
+		}
+	}
+
+	[CCode(cname = "WRDE_APPEND", cheader_filename = "wordexp.h")]
+	private const int WRDE_APPEND;
+	[CCode(cname = "WRDE_NOCMD", cheader_filename = "wordexp.h")]
+	public const int WRDE_NOCMD;
+	[CCode(cname = "WRDE_SHOWERR", cheader_filename = "wordexp.h")]
+	public const int WRDE_SHOWERR;
+	[CCode(cname = "WRDE_REUSE", cheader_filename = "wordexp.h")]
+	public const int WRDE_REUSE;
+	[CCode(cname = "WRDE_UNDEF", cheader_filename = "wordexp.h")]
+	public const int WRDE_UNDEF;
+
+	[CCode(cname = "WRDE_BADCHAR", cheader_filename = "wordexp.h")]
+	public const int WRDE_BADCHAR;
+	[CCode(cname = "WRDE_BADVAL", cheader_filename = "wordexp.h")]
+	public const int WRDE_BADVAL;
+	[CCode(cname = "WRDE_CMDSUB", cheader_filename = "wordexp.h")]
+	public const int WRDE_CMDSUB;
+	[CCode(cname = "WRDE_NOSPACE", cheader_filename = "wordexp.h")]
+	public const int WRDE_NOSPACE;
+	[CCode(cname = "WRDE_SYNTAX", cheader_filename = "wordexp.h")]
+	public const int WRDE_SYNTAX;
 }
 
