Hi Thien,

Just a minor comment.
Instead of using many variables then just use them to compare with 0/1 or 
true/false.
I think it's better to use if directly.

E.g,
+  bool hhmmss_format = all_digits(finfo->d_name + time_offset, 
+ time_length);  if (hhmmss_format == false) return 0;
->
// time format
+  if (!all_digits(finfo->d_name + time_offset, time_length) )
+      return 0;

-----Original Message-----
From: thien.m.huynh <thien.m.hu...@dektech.com.au> 
Sent: Monday, April 13, 2020 9:49 AM
To: Thuan Tran <thuan.t...@dektech.com.au>; Vu Minh Nguyen 
<vu.m.ngu...@dektech.com.au>
Cc: opensaf-devel@lists.sourceforge.net
Subject: [devel] [PATCH 1/1] log: log content is placed in a file of another 
stream [#3175]

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;
 }
 
 /**
--
2.17.1



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel


_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to