From 82dea0126e58dc53238347d1cd4e326209a80cd0 Mon Sep 17 00:00:00 2001 From: Fredrik Hultin Date: Wed, 17 Feb 2016 12:08:43 +0100 Subject: [PATCH] Using /dev/urandom instead of rand(). --- src/files.cpp | 1 - src/files.h | 75 +++++++++++++++++++++++------------------------ src/filesunix.cpp | 12 +++++++- src/filesunix.h | 57 ++++++++++++++++++----------------- 4 files changed, 75 insertions(+), 70 deletions(-) diff --git a/src/files.cpp b/src/files.cpp index 437d4be..c51d9c0 100644 --- a/src/files.cpp +++ b/src/files.cpp @@ -24,7 +24,6 @@ Files::Files() Files::~Files() { - srand(time(0)); } bool Files::fileFromStr(std::string fileName, std::string str) diff --git a/src/files.h b/src/files.h index a170f99..9287f64 100644 --- a/src/files.h +++ b/src/files.h @@ -26,51 +26,48 @@ class FilesException : public std::runtime_error { class Files { public: - // Pure virtual functions + // Pure virtual functions + virtual void genSourceFileList(std::string dir) = 0; + + virtual time_t getDate(std::string file) = 0; + virtual bool fileExists(std::string file) = 0; + + virtual int isDir(std::string path) = 0; + + virtual bool createDir(std::string dir) = 0; + virtual bool removeDir(std::string dir) = 0; + virtual bool removeFile(const std::string& path) = 0; + virtual std::string getHomeDir() = 0; + virtual std::string getTmpDirStr() = 0; + virtual std::string getGlobalTmpDir() = 0; + virtual void wait() = 0; + virtual std::pair pathSplit(std::string path) = 0; + virtual bool copy(std::string from, std::string to) = 0; - virtual void genSourceFileList(std::string dir) = 0; - - virtual time_t getDate(std::string file) = 0; - virtual bool fileExists(std::string file) = 0; - - virtual int isDir(std::string path) = 0; - - virtual bool createDir(std::string dir) = 0; - virtual bool removeDir(std::string dir) = 0; - virtual bool removeFile(const std::string& path) = 0; - virtual std::string getHomeDir() = 0; - virtual std::string getTmpDirStr() = 0; - virtual std::string getGlobalTmpDir() = 0; - virtual void wait() = 0; - virtual std::pair pathSplit(std::string path) = 0; - virtual bool copy(std::string from, std::string to) = 0; + virtual std::string dirName(std::string filename) = 0; + virtual std::string baseName(std::string filename) = 0; + virtual std::string combinePath(std::vector p) = 0; + virtual std::string realpath(std::string filename) = 0; + virtual std::string getAbsoluteExecutablePath(std::string filename) = 0; + virtual int chdir(std::string dir) = 0; + virtual std::string genSystemTempFileName(const std::string& prefix) = 0; + + // Actual functions + Files(); + virtual ~Files(); + + virtual bool checkRecompile(std::string src, std::string obj); - virtual std::string dirName(std::string filename) = 0; - virtual std::string baseName(std::string filename) = 0; - virtual std::string combinePath(std::vector p) = 0; - virtual std::string realpath(std::string filename) = 0; - virtual std::string getAbsoluteExecutablePath(std::string filename) = 0; - virtual int chdir(std::string dir) = 0; - virtual std::string genSystemTempFileName(const std::string& prefix) = 0; - - // Actual functions + virtual void initializeTmpDir(); + virtual std::string getTmpDir(); + virtual bool erase(std::string fileName); - Files(); - virtual ~Files(); - - virtual bool checkRecompile(std::string src, std::string obj); + virtual std::string strFromFile(std::string fileName); - virtual void initializeTmpDir(); - virtual std::string getTmpDir(); - virtual bool erase(std::string fileName); - - virtual std::string strFromFile(std::string fileName); - - virtual bool fileFromStr(std::string fileName, std::string str); + virtual bool fileFromStr(std::string fileName, std::string str); private: - bool once; - + bool once; }; #endif diff --git a/src/filesunix.cpp b/src/filesunix.cpp index 5b1e9f7..98c61cf 100644 --- a/src/filesunix.cpp +++ b/src/filesunix.cpp @@ -253,5 +253,15 @@ int FilesUnix::chdir(std::string dir) std::string FilesUnix::genSystemTempFileName(const std::string& prefix) { - return combinePath(Tools::makeStrVector("/tmp", Str(prefix << rand()))); + int32_t rNum = 0; + std::ifstream f("/dev/urandom"); + + if(!f.good()){ + throw FilesException("could not read from /dev/urandom"); + } + + f.read((char*)&rNum, 4); + f.close(); + + return combinePath(Tools::makeStrVector("/tmp", Str(prefix << rNum))); } diff --git a/src/filesunix.h b/src/filesunix.h index 7bb989b..71f49c9 100644 --- a/src/filesunix.h +++ b/src/filesunix.h @@ -16,37 +16,36 @@ class FilesUnix: public Files { public: - - void genSourceFileList(std::string dir); - - time_t getDate(std::string file); - bool fileExists(std::string file); - - int isDir (std::string path); - bool createDir(std::string dir); - std::string getHomeDir(); - std::string getTmpDirStr(); - std::string getGlobalTmpDir(); - bool removeDir(std::string dir); - bool copy(std::string from, std::string to); - bool removeFile(const std::string& path); - - std::pair pathSplit(std::string path); - - void wait(); - - std::string dirName(std::string filename); - std::string baseName(std::string filename); - - std::string combinePath(std::vector p); - std::string realpath(std::string filename); - int chdir(std::string dir); - - std::string getAbsoluteExecutablePath(std::string filename); - std::string genSystemTempFileName(const std::string& prefix); + void genSourceFileList(std::string dir); + + time_t getDate(std::string file); + bool fileExists(std::string file); + + int isDir (std::string path); + bool createDir(std::string dir); + std::string getHomeDir(); + std::string getTmpDirStr(); + std::string getGlobalTmpDir(); + bool removeDir(std::string dir); + bool copy(std::string from, std::string to); + bool removeFile(const std::string& path); + + std::pair pathSplit(std::string path); + + void wait(); + + std::string dirName(std::string filename); + std::string baseName(std::string filename); + + std::string combinePath(std::vector p); + std::string realpath(std::string filename); + int chdir(std::string dir); + + std::string getAbsoluteExecutablePath(std::string filename); + std::string genSystemTempFileName(const std::string& prefix); private: - bool find(std::string what, std::string where, std::string result); + bool find(std::string what, std::string where, std::string result); }; #endif