+ return ::wxMkdir( dir, perm );
+}
+
+bool wxFileName::Rmdir()
+{
+ return wxFileName::Rmdir( GetFullPath() );
+}
+
+bool wxFileName::Rmdir( const wxString &dir )
+{
+ return ::wxRmdir( dir );
+}
+
+// ----------------------------------------------------------------------------
+// path normalization
+// ----------------------------------------------------------------------------
+
+bool wxFileName::Normalize(wxPathNormalize flags,
+ const wxString& cwd,
+ wxPathFormat format)
+{
+ // the existing path components
+ wxArrayString dirs = GetDirs();
+
+ // the path to prepend in front to make the path absolute
+ wxFileName curDir;
+
+ format = GetFormat(format);
+
+ // make the path absolute
+ if ( (flags & wxPATH_NORM_ABSOLUTE) && !IsAbsolute() )
+ {
+ if ( cwd.empty() )
+ curDir.AssignCwd();
+ else
+ curDir.AssignDir(cwd);
+ }
+
+ // handle ~ stuff under Unix only
+ if ( (format == wxPATH_UNIX) && (flags & wxPATH_NORM_TILDE) )
+ {
+ if ( !dirs.IsEmpty() )
+ {
+ wxString dir = dirs[0u];
+ if ( !dir.empty() && dir[0u] == _T('~') )
+ {
+ curDir.AssignDir(wxGetUserHome(dir.c_str() + 1));
+
+ dirs.RemoveAt(0u);
+ }
+ }
+ }
+
+ if ( curDir.IsOk() )
+ {
+ wxArrayString dirsNew = curDir.GetDirs();
+ size_t count = dirs.GetCount();
+ for ( size_t n = 0; n < count; n++ )
+ {
+ dirsNew.Add(dirs[n]);
+ }
+
+ dirs = dirsNew;
+ }
+
+ // now deal with ".", ".." and the rest
+ m_dirs.Empty();
+ size_t count = dirs.GetCount();
+ for ( size_t n = 0; n < count; n++ )