| //===- FileUtils.cpp - File system utility functions for snapshotting -----===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file was developed by the LLVM research group and is distributed under |
| // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file is Unix-specific; to become part of LLVM it needs to be made |
| // portable for the architectures/systems LLVM supports. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm-tv/Support/FileUtils.h" |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #include <dirent.h> |
| #include <stdlib.h> |
| |
| /// Returns the number of entries in the directory named PATH. |
| /// |
| /// FIXME: If we want to be portable, we can use opendir/readdir/closedir() |
| /// and stat(), instead of scandir() and alphasort(). Also, this function |
| /// will probably not skip directories (better verify this!) |
| /// |
| unsigned llvm::GetNumFilesInDir(const std::string &path) { |
| struct dirent **namelist; |
| int n = scandir(path.c_str(), &namelist, 0, alphasort); |
| int num = n; |
| if (n < 0) |
| perror("scandir"); |
| else { |
| while (n--) |
| free(namelist[n]); |
| free(namelist); |
| } |
| return num; |
| } |
| |
| |
| /// GetFilesInDir - returns a listing of files in directory |
| /// |
| void llvm::GetFilesInDir(const std::string &path, |
| std::vector<std::string> &list) |
| { |
| struct dirent **namelist; |
| int n = scandir(path.c_str(), &namelist, 0, alphasort); |
| if (n < 0) |
| perror("scandir"); |
| else { |
| while(n--) { |
| list.push_back(std::string(namelist[n]->d_name)); |
| free(namelist[n]); |
| } |
| free(namelist); |
| } |
| } |
| |
| bool llvm::DirectoryExists (const std::string &dirPath) { |
| struct stat stbuf; |
| if (stat (dirPath.c_str (), &stbuf) < 0) |
| return false; |
| return S_ISDIR (stbuf.st_mode); |
| } |
| |
| void llvm::EnsureDirectoryExists (const std::string &dirPath) { |
| if (!DirectoryExists (dirPath)) |
| mkdir (dirPath.c_str (), 0777); |
| } |