mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
Open input path once using file descriptor
This commit is contained in:
parent
7bcb58dea0
commit
9d5a00bde1
@ -42,6 +42,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#if !defined(_WIN32)
|
#if !defined(_WIN32)
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#else
|
#else
|
||||||
// Windows support is probably very fragile
|
// Windows support is probably very fragile
|
||||||
@ -145,8 +146,9 @@ bool isIgnorable(const std::string &f) {
|
|||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
void loadExpressions(const string &inPath, ExpressionMap &exprMap) {
|
void loadExpressions(const string &inPath, ExpressionMap &exprMap) {
|
||||||
// Is our input path a file or a directory?
|
// Is our input path a file or a directory?
|
||||||
|
int fd = open(inPath.c_str(), O_RDONLY);
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (stat(inPath.c_str(), &st) != 0) {
|
if (fstat(fd, &st) != 0) {
|
||||||
cerr << "Can't stat path: '" << inPath << "'" << endl;
|
cerr << "Can't stat path: '" << inPath << "'" << endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
@ -159,7 +161,7 @@ void loadExpressions(const string &inPath, ExpressionMap &exprMap) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
} else if (S_ISDIR(st.st_mode)) {
|
} else if (S_ISDIR(st.st_mode)) {
|
||||||
DIR *d = opendir(inPath.c_str());
|
DIR *d = fdopendir(fd);
|
||||||
if (d == nullptr) {
|
if (d == nullptr) {
|
||||||
cerr << "Can't open directory: '" << inPath << "'" << endl;
|
cerr << "Can't open directory: '" << inPath << "'" << endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -188,11 +190,12 @@ void loadExpressions(const string &inPath, ExpressionMap &exprMap) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
closedir(d);
|
(void)closedir(d);
|
||||||
} else {
|
} else {
|
||||||
cerr << "Can't stat path: '" << inPath << "'" << endl;
|
cerr << "Can't stat path: '" << inPath << "'" << endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
(void)close(fd);
|
||||||
}
|
}
|
||||||
#else // windows TODO: improve
|
#else // windows TODO: improve
|
||||||
void HS_CDECL loadExpressions(const string &inPath, ExpressionMap &exprMap) {
|
void HS_CDECL loadExpressions(const string &inPath, ExpressionMap &exprMap) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user