Hi Thien,

If d_name = "abcd1_123xxx" and file_name_find_g = "abc", then your code still 
match.

Can you try to use regex which is available in c++11?
For example:
#include <regex>
...
std::regex pattern1(file_name_find_g + "_[0-9]+_[0-9]+.log");
std::regex pattern2(file_name_find_g + "_[0-9]+_[0-9]+_[0-9]+_[0-9]+.log");
if (std::regex_match(finfo->d_name, pattern1) ||
     std::regex_match(finfo->d_name, pattern2)) {
   ...
}

Not yet verify, just the idea.

Best Regards,
ThuanTr

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

---
 src/log/logd/lgs_filehdl.cc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/log/logd/lgs_filehdl.cc b/src/log/logd/lgs_filehdl.cc
index 0d7fb2b74..238259454 100644
--- a/src/log/logd/lgs_filehdl.cc
+++ b/src/log/logd/lgs_filehdl.cc
@@ -965,8 +965,10 @@ static int chr_cnt_b(char *str, char c, int lim) {
 static std::string file_name_find_g;
 static int filter_logfile_name(const struct dirent *finfo) {
   int found = 0;
+  int len = file_name_find_g.length();
 
-  if ((strstr(finfo->d_name, file_name_find_g.c_str()) != nullptr) &&
+  if ((strncmp(finfo->d_name, file_name_find_g.c_str(), len) == 0) &&
+      isdigit(finfo->d_name[len + 1]) &&
       (strstr(finfo->d_name, ".log") != nullptr))
     found = 1;
 
-- 
2.17.1



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

Reply via email to