Gabriele Contini
2019-10-19 78b6def7e795a1bdc37093f582db56cbdae01347
src/library/base/FileUtils.cpp
New file
@@ -0,0 +1,69 @@
/*
 * FileUtils.cpp
 *
 *  Created on: Oct 8, 2019
 *      Author: devel
 */
#include <fstream>
#include <string>
#include <cerrno>
#include <iostream>
#include <algorithm>
#include "FileUtils.hpp"
namespace license {
using namespace std;
vector<string> filter_existing_files(const vector<string> &fileList,
      EventRegistry& registry,const char* extraData) {
   vector<string> existingFiles;
   for (auto it = fileList.begin(); it != fileList.end(); it++) {
      registry.addEvent(LICENSE_SPECIFIED,it->c_str(), extraData);
      ifstream f(it->c_str());
      if (f.good()) {
         existingFiles.push_back(*it);
         registry.addEvent(LICENSE_FOUND,it->c_str(),extraData);
      } else {
         registry.addEvent(LICENSE_FILE_NOT_FOUND,it->c_str(), extraData);
      }
      f.close();
   }
   return existingFiles;
}
string get_file_contents(const char *filename, size_t max_size) {
   ifstream in(filename, std::ios::binary);
   if (in) {
      string contents;
      size_t index = in.seekg(0, ios::end).tellg();
      size_t limited_size = min(index, max_size);
      contents.resize(limited_size);
      in.seekg(0, ios::beg);
      in.read(&contents[0], limited_size);
      return contents;
   }
   throw(errno);
}
string remove_extension(const string& path) {
   if (path == "." || path == "..") {
      return path;
   }
   size_t dotpos = path.find_last_of(".");
   //no dot
   if (dotpos == string::npos) {
      return path;
   }
   //find the last path separator
   size_t pathsep_pos = path.find_last_of("\\/");
   if (pathsep_pos == string::npos) {
      return (dotpos == 0 ? path : path.substr(0, dotpos));
   } else if(pathsep_pos >= dotpos +1) {
      return path;
   }
   return path.substr(0, dotpos);
}
}