sensor-hal: change readdir to readdir_r 75/64475/4
authorkibak.yoon <kibak.yoon@samsung.com>
Fri, 1 Apr 2016 07:54:20 +0000 (16:54 +0900)
committerKibak Yoon <kibak.yoon@samsung.com>
Fri, 1 Apr 2016 13:20:50 +0000 (06:20 -0700)
* use thread-safe API(readdir_r)
* remove the assign statement in while condition

Change-Id: I6e052744eb06da2c50bf59541505f26ac043a3c4
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/util.cpp

index df01a1e..19790f9 100644 (file)
@@ -31,8 +31,10 @@ static bool get_event_num(const string &input_path, string &event_num)
 {
        const string event_prefix = "event";
        DIR *dir = NULL;
-       struct dirent *dir_entry = NULL;
-       string node_name;
+       struct dirent dir_entry;
+       struct dirent *result;
+       std::string node_name;
+       int error;
        bool find = false;
 
        dir = opendir(input_path.c_str());
@@ -43,8 +45,16 @@ static bool get_event_num(const string &input_path, string &event_num)
 
        int prefix_size = event_prefix.size();
 
-       while (!find && (dir_entry = readdir(dir))) {
-               node_name = dir_entry->d_name;
+       while (true) {
+               error = readdir_r(dir, &dir_entry, &result);
+
+               if (error != 0)
+                       continue;
+
+               if (result == NULL)
+                       break;
+
+               node_name = std::string(dir_entry.d_name);
 
                if (node_name.compare(0, prefix_size, event_prefix) == 0) {
                        event_num = node_name.substr(prefix_size, node_name.size() - prefix_size);
@@ -139,10 +149,12 @@ static bool get_input_method(const string &key, int &method, string &device_num)
 
        const int input_info_len = sizeof(input_info)/sizeof(input_info[0]);
        size_t prefix_size;
-       string name_node, name;
-       string d_name;
+       std::string name_node, name;
+       std::string d_name;
        DIR *dir = NULL;
-       struct dirent *dir_entry = NULL;
+       struct dirent dir_entry;
+       struct dirent *result;
+       int error;
        bool find = false;
 
        for (int i = 0; i < input_info_len; ++i) {
@@ -157,8 +169,16 @@ static bool get_input_method(const string &key, int &method, string &device_num)
 
                find = false;
 
-               while (!find && (dir_entry = readdir(dir))) {
-                       d_name = string(dir_entry->d_name);
+               while (true) {
+                       error = readdir_r(dir, &dir_entry, &result);
+
+                       if (error != 0)
+                               continue;
+
+                       if (result == NULL)
+                               break;
+
+                       d_name = std::string(dir_entry.d_name);
 
                        if (d_name.compare(0, prefix_size, input_info[i].prefix) == 0) {
                                name_node = input_info[i].dir_path + d_name + string("/name");