Ack
Thanks, Vu
On 4/13/20 9:48 AM, thien.m.huynh wrote:
Replace a previous patch of this ticket due to regex is not yet fully
supported by gcc 4.8.
---
src/log/logd/lgs_filehdl.cc | 53 +++++++++++++++++++++++++++++++------
1 file changed, 45 insertions(+), 8 deletions(-)
diff --git a/src/log/logd/lgs_filehdl.cc b/src/log/logd/lgs_filehdl.cc
index 9f4e27979..1743c53fd 100644
--- a/src/log/logd/lgs_filehdl.cc
+++ b/src/log/logd/lgs_filehdl.cc
@@ -26,7 +26,6 @@
#include <sys/stat.h>
#include <unistd.h>
#include <string>
-#include <regex>
#include "base/logtrace.h"
#include "base/osaf_time.h"
@@ -955,6 +954,19 @@ static int chr_cnt_b(char *str, char c, int lim) {
return cnt;
}
+/**
+ * Check if all character is decimal digit
+ * @param data string to be checked
+ * @param size number of characters to check
+ * @return: true if all character is decimal digit
+ */
+static bool all_digits(const char *data, int size) {
+ for (int i = 0; i < size; i++) {
+ if (!isdigit(data[i])) return false;
+ }
+ return true;
+}
+
/**
* Filter function used by scandir.
* Find a current log file if it exist
@@ -965,13 +977,38 @@ static int chr_cnt_b(char *str, char c, int lim) {
/* Filename prefix (no timestamps or extension */
static std::string file_name_find_g;
static int filter_logfile_name(const struct dirent *finfo) {
- const std::string pattern =
- "^" + file_name_find_g + "_[0-9]{8}_[0-9]{6}.log$";
- const std::regex e{pattern};
- if (std::regex_match(finfo->d_name, e)) {
- return 1;
- }
- return 0;
+ size_t name_len = strlen(file_name_find_g.c_str());
+ size_t fixed_length = name_len + strlen("_yyyymmdd_hhmmss.log");
+
+ if (strlen(finfo->d_name) != fixed_length) return 0;
+
+ size_t day_length = strlen("yyyymmdd");
+ size_t time_length = strlen("hhmmss");
+ int day_offset = 1 + name_len;
+ int time_offset = 1 + day_offset + day_length;
+ int extension_offset = time_offset + time_length;
+
+ bool start_with_filename =
+ strncmp(finfo->d_name, file_name_find_g.c_str(), name_len) == 0;
+ if (start_with_filename == false) return 0;
+
+ bool underscore_1 = finfo->d_name[day_offset - 1] == '_';
+ if (underscore_1 == false) return 0;
+
+ bool yyyymmdd_format = all_digits(finfo->d_name + day_offset, day_length);
+ if (yyyymmdd_format == false) return 0;
+
+ bool underscore_2 = finfo->d_name[time_offset - 1] == '_';
+ if (underscore_2 == false) return 0;
+
+ bool hhmmss_format = all_digits(finfo->d_name + time_offset, time_length);
+ if (hhmmss_format == false) return 0;
+
+ bool log_extension =
+ strncmp(finfo->d_name + extension_offset, ".log", strlen(".log")) == 0;
+ if (log_extension == false) return 0;
+
+ return 1;
}
/**
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel