diff options
author | Brad King <brad.king@kitware.com> | 2003-04-08 17:10:44 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2003-04-08 17:10:44 (GMT) |
commit | 7dff3a7f69d1ec1e36d38903e94e433f6583d96e (patch) | |
tree | 52188fec4a7e35d1fd08e3ed6c3dcfbf1095a818 /Source/kwsys/Directory.cxx | |
parent | 7f48313225537a7bcc92c0f1c73754bdc50a2ca4 (diff) | |
download | CMake-7dff3a7f69d1ec1e36d38903e94e433f6583d96e.zip CMake-7dff3a7f69d1ec1e36d38903e94e433f6583d96e.tar.gz CMake-7dff3a7f69d1ec1e36d38903e94e433f6583d96e.tar.bz2 |
ENH: Added kwsys library for platform-independent system tools.
Diffstat (limited to 'Source/kwsys/Directory.cxx')
-rw-r--r-- | Source/kwsys/Directory.cxx | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/Source/kwsys/Directory.cxx b/Source/kwsys/Directory.cxx new file mode 100644 index 0000000..3036081 --- /dev/null +++ b/Source/kwsys/Directory.cxx @@ -0,0 +1,116 @@ +/*========================================================================= + + Program: KWSys - Kitware System Library + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include <Directory.hxx> + +// First microsoft compilers + +#ifdef _MSC_VER +#include <windows.h> +#include <io.h> +#include <ctype.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/stat.h> +#include <sys/types.h> + +namespace KWSYS_NAMESPACE +{ + +bool Directory::Load(const char* name) +{ + char* buf; + size_t n = strlen(name); + if ( name[n - 1] == '/' ) + { + buf = new char[n + 1 + 1]; + sprintf(buf, "%s*", name); + } + else + { + buf = new char[n + 2 + 1]; + sprintf(buf, "%s/*", name); + } + struct _finddata_t data; // data of current file + + // Now put them into the file array + size_t srchHandle = _findfirst(buf, &data); + delete [] buf; + + if ( srchHandle == -1 ) + { + return 0; + } + + // Loop through names + do + { + m_Files.push_back(data.name); + } + while ( _findnext(srchHandle, &data) != -1 ); + m_Path = name; + return _findclose(srchHandle) != -1; +} + +} // namespace KWSYS_NAMESPACE + +#else + +// Now the POSIX style directory access + +#include <sys/types.h> +#include <dirent.h> + +namespace KWSYS_NAMESPACE +{ + +bool Directory::Load(const char* name) +{ + DIR* dir = opendir(name); + + if (!dir) + { + return 0; + } + + for (dirent* d = readdir(dir); d; d = readdir(dir) ) + { + m_Files.push_back(d->d_name); + } + m_Path = name; + closedir(dir); + return 1; +} + +} // namespace KWSYS_NAMESPACE + +#endif + +namespace KWSYS_NAMESPACE +{ + +const char* Directory::GetFile(size_t dindex) +{ + if ( dindex >= m_Files.size() ) + { + return 0; + } + return m_Files[dindex].c_str(); +} + +} // namespace KWSYS_NAMESPACE |