citrun

watch C/C++ source code execute
Log | Files | Refs | LICENSE

commit 146253fedac87717f58a806172d62cc0bed96d9d
parent 1db5b34daa9f6b21a0310575b1941ed844d550fd
Author: Kyle Milz <kyle@0x30.net>
Date:   Tue, 23 Aug 2016 22:14:58 -0600

src: split out function to scan process dir

Diffstat:
Msrc/dump_main.cc | 1+
Msrc/process_dir.cc | 31+++++++++++++++++++++----------
Msrc/process_dir.h | 9+++++++++
3 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/src/dump_main.cc b/src/dump_main.cc @@ -41,6 +41,7 @@ main(int argc, char *argv[]) char *sarg = NULL; int tflag = 0; + pdir.scan(); if (argc == 1) print_summary(pdir); diff --git a/src/process_dir.cc b/src/process_dir.cc @@ -1,35 +1,46 @@ #include "process_dir.h" -#include <sys/types.h> - #include <err.h> #include <cstdlib> // getenv #include <cstring> #include <iostream> -#include <dirent.h> // opendir, readdir ProcessDir::ProcessDir() { - const char *process_dir; if (std::getenv("CITRUN_TESTING") != NULL) - process_dir = "runtime/"; + m_procdir = "runtime/"; else - process_dir = "/tmp/citrun/"; + m_procdir = "/tmp/citrun/"; - DIR *dirp; - if ((dirp = opendir(process_dir)) == NULL) + if ((m_dirp = opendir(m_procdir)) == NULL) err(1, "opendir"); +} + +ProcessDir::~ProcessDir() +{ + closedir(m_dirp); +} +void +ProcessDir::scan() +{ struct dirent *dp; - while ((dp = readdir(dirp)) != NULL) { + + rewinddir(m_dirp); + while ((dp = readdir(m_dirp)) != NULL) { if (std::strcmp(dp->d_name, ".") == 0 || std::strcmp(dp->d_name, "..") == 0) continue; - std::string p(process_dir); + std::string p(m_procdir); p.append(dp->d_name); + if (m_known_files.find(p) != m_known_files.end()) + // We already know this file. + continue; + + m_known_files.insert(p); m_procfiles.push_back(ProcessFile(p)); } } diff --git a/src/process_dir.h b/src/process_dir.h @@ -1,12 +1,21 @@ #include "process_file.h" +#include <sys/types.h> + +#include <dirent.h> // DIR, opendir, readdir +#include <unordered_set> #include <vector> class ProcessDir { public: ProcessDir(); + ~ProcessDir(); + void scan(); std::vector<ProcessFile> m_procfiles; private: + const char *m_procdir; + DIR *m_dirp; + std::unordered_set<std::string> m_known_files; };