diff --git a/dtool/src/dtoolutil/filename.cxx b/dtool/src/dtoolutil/filename.cxx index 199591158f..025b2d706d 100644 --- a/dtool/src/dtoolutil/filename.cxx +++ b/dtool/src/dtoolutil/filename.cxx @@ -2576,9 +2576,9 @@ make_dir() const { Filename component(dirname.substr(0, slash)); string os_specific = component.to_os_specific(); #ifndef WIN32_VC - mkdir(os_specific.c_str(), 0777); + ::mkdir(os_specific.c_str(), 0777); #else - mkdir(os_specific.c_str()); + ::mkdir(os_specific.c_str()); #endif slash = dirname.find('/', slash + 1); } @@ -2587,9 +2587,54 @@ make_dir() const { Filename component(dirname); string os_specific = component.to_os_specific(); #ifndef WIN32_VC - int result = mkdir(os_specific.c_str(), 0777); + int result = ::mkdir(os_specific.c_str(), 0777); #else - int result = mkdir(os_specific.c_str()); + int result = ::mkdir(os_specific.c_str()); +#endif + + return (result == 0); +} + +//////////////////////////////////////////////////////////////////// +// Function: Filename::mkdir +// Access: Published +// Description: Creates the directory named by this filename. Unlike +// make_dir(), this assumes that the Filename contains +// the directory name itself. Also, parent directories +// are not automatically created; this function fails if +// any parent directory is missing. +//////////////////////////////////////////////////////////////////// +bool Filename:: +mkdir() const { + string os_specific = to_os_specific(); +#ifndef WIN32_VC + int result = ::mkdir(os_specific.c_str(), 0777); +#else + int result = ::mkdir(os_specific.c_str()); +#endif + + return (result == 0); +} + +//////////////////////////////////////////////////////////////////// +// Function: Filename::rmdir +// Access: Published +// Description: The inverse of mkdir(): this removes the directory +// named by this Filename, if it is in fact a directory. +//////////////////////////////////////////////////////////////////// +bool Filename:: +rmdir() const { + string os_specific = to_os_specific(); + + int result = ::rmdir(os_specific.c_str()); + +#ifdef WIN32 + if (result != 0) { + // Windows may require the directory to be writable before we can + // remove it. + chmod(os_specific.c_str(), 0777); + result = ::rmdir(os_specific.c_str()); + } #endif return (result == 0); diff --git a/dtool/src/dtoolutil/filename.h b/dtool/src/dtoolutil/filename.h index 8c64d56d46..813cb715e9 100644 --- a/dtool/src/dtoolutil/filename.h +++ b/dtool/src/dtoolutil/filename.h @@ -203,6 +203,8 @@ PUBLISHED: bool copy_to(const Filename &other) const; bool make_dir() const; + bool mkdir() const; + bool rmdir() const; // Comparison operators are handy. INLINE bool operator == (const string &other) const;