Skip to content

Instantly share code, notes, and snippets.

@gavincangan
Created February 27, 2019 18:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gavincangan/24b48dae2e99bcb32bcb642f16ee9cd6 to your computer and use it in GitHub Desktop.
Save gavincangan/24b48dae2e99bcb32bcb642f16ee9cd6 to your computer and use it in GitHub Desktop.
Glob C++
/*
* Source: https://stackoverflow.com/questions/8401777/simple-glob-in-c-on-unix-system
*/
#include <glob.h> // glob(), globfree()
#include <string.h> // memset()
#include <vector>
#include <stdexcept>
#include <string>
#include <sstream>
std::vector<std::string> glob(const std::string& pattern) {
using namespace std;
// glob struct resides on the stack
glob_t glob_result;
memset(&glob_result, 0, sizeof(glob_result));
// do the glob operation
int return_value = glob(pattern.c_str(), GLOB_TILDE, NULL, &glob_result);
if(return_value != 0) {
globfree(&glob_result);
stringstream ss;
ss << "glob() failed with return_value " << return_value << endl;
throw std::runtime_error(ss.str());
}
// collect all the filenames into a std::list<std::string>
vector<string> filenames;
for(size_t i = 0; i < glob_result.gl_pathc; ++i) {
filenames.push_back(string(glob_result.gl_pathv[i]));
}
// cleanup
globfree(&glob_result);
// done
return filenames;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment