-extern Path fix_case(const Path &);
-extern int mkpath(const Path &, int);
-extern int rmdir(const Path &, bool =false);
-extern std::list<std::string> list_files(const Path &);
-extern bool exists(const Path &);
-extern Filename splitext(const std::string &);
-extern int fnmatch(const std::string &, const Path &);
+Path fix_case(const Path &path);
+
+/// Creates a directory
+void mkdir(const Path &path, int mode);
+
+/// Creates a directory and any required parent directories
+void mkpath(const Path &path, int mode);
+
+/// Removes a directory
+void rmdir(const Path &path);
+
+/// Removes a directory and anything it contains
+void rmdirs(const Path &path);
+
+/// Removes a file
+void unlink(const Path &path);
+
+/// Lists the contents of a directory
+std::list<std::string> list_files(const Path &path);
+
+Filename splitext(const std::string &);
+int fnmatch(const std::string &, const Path &);
+
+/// Makes a path relative to some base path. That is, base/result==path.
+Path relative(const Path &path, const Path &base);
+
+std::string basename(const std::string &);
+
+/// Tests for existence of a file
+bool exists(const Path &path);
+
+/// Tests whether a path refers to an existing directory
+bool is_dir(const Path &paht);
+
+/**
+Gets information about a file. Returns 0 on success or -1 on error. This
+version can be used to check for file existence and get information in one
+call.
+*/
+int stat(const Path &fn, struct stat &st);
+
+/**
+Returns information about a file. This version throws an exception if an error
+occurs.
+*/
+struct stat stat(const Path &fn);
+
+Path getcwd();
+
+/// Returns the user's home directory
+Path get_home_dir();