From a4cf218a3e6396a7d21f2b831c052933d5b70a5c Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Fri, 31 Jul 2015 15:49:28 -0300 Subject: [PATCH] Removes chrono references to make it compile with gcc 4.8.x --- headers/modsecurity/assay.h | 3 +-- src/assay.cc | 3 ++- src/utils.cc | 13 +++++++++++++ src/utils.h | 1 + src/variables/duration.cc | 7 +++---- test/test-cases/regression/variable-DURATION.json | 2 +- 6 files changed, 21 insertions(+), 8 deletions(-) diff --git a/headers/modsecurity/assay.h b/headers/modsecurity/assay.h index a10f0299..d4ea4333 100644 --- a/headers/modsecurity/assay.h +++ b/headers/modsecurity/assay.h @@ -25,7 +25,6 @@ #include #include #include -#include #endif #include @@ -189,7 +188,7 @@ class Assay { std::string id; time_t timeStamp; - std::chrono::system_clock::time_point start; + clock_t start; int highest_severity; private: diff --git a/src/assay.cc b/src/assay.cc index 42bbd388..0cecadcc 100644 --- a/src/assay.cc +++ b/src/assay.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include "modsecurity/modsecurity.h" #include "modsecurity/intervention.h" @@ -102,7 +103,7 @@ Assay::Assay(ModSecurity *ms, Rules *rules) m_requestBodyType(UnknownFormat), m_requestHeadersNames(NULL), m_responseHeadersNames(NULL), - start(std::chrono::system_clock::now()), + start(cpu_seconds()), m_ms(ms) { id = std::to_string(this->timeStamp) + \ std::to_string(generate_assay_unique_id()); diff --git a/src/utils.cc b/src/utils.cc index a573cc32..1251a140 100644 --- a/src/utils.cc +++ b/src/utils.cc @@ -196,5 +196,18 @@ void createDir(std::string dir, int mode) { #endif } + +double cpu_seconds(void) { + struct timespec t; + + if (!clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t)) + return static_cast(t.tv_sec) + + static_cast(t.tv_nsec / 1000000000.0); + else + return static_cast(clock()) / + static_cast(CLOCKS_PER_SEC); +} + + } // namespace ModSecurity diff --git a/src/utils.h b/src/utils.h index 9474d476..c58c0e19 100644 --- a/src/utils.h +++ b/src/utils.h @@ -32,6 +32,7 @@ namespace ModSecurity { void chomp(std::string *str); std::string uri_decode(const std::string & sSrc); std::string tolower(std::string str); + double cpu_seconds(void); } // namespace ModSecurity #define SRC_UTILS_H_ diff --git a/src/variables/duration.cc b/src/variables/duration.cc index 39b82d00..5b433be6 100644 --- a/src/variables/duration.cc +++ b/src/variables/duration.cc @@ -19,10 +19,10 @@ #include #include #include -#include #include #include "modsecurity/assay.h" +#include "src/utils.h" namespace ModSecurity { namespace Variables { @@ -33,10 +33,9 @@ std::list> std::string res; std::pair pair; - auto e = std::chrono::high_resolution_clock::now() - assay->start; + double e = cpu_seconds() - assay->start; - res = std::to_string( - std::chrono::duration_cast(e).count()); + res = std::to_string(e); pair = std::make_pair(std::string("DURATION"), std::string(res)); resl.push_back(pair); diff --git a/test/test-cases/regression/variable-DURATION.json b/test/test-cases/regression/variable-DURATION.json index 624840a5..d88edebc 100644 --- a/test/test-cases/regression/variable-DURATION.json +++ b/test/test-cases/regression/variable-DURATION.json @@ -37,7 +37,7 @@ ] }, "expected":{ - "debug_log":"Target value: \"[0-9]+\"" + "debug_log":"Target value: \"[0-9\\.]+\"" }, "rules":[ "SecRuleEngine On",