open may fail in case there is not proper permissions and hence giving
a wrong result. This patch uses stat instead which is always better.

Signed-off-by: Sudhir Kumar <[email protected]>
Acked-by: Dhaval Giani <[email protected]>
Acked-by: Balbir Singh <[email protected]>

---
 tests/test_functions.c |   24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

Index: trunk/tests/test_functions.c
===================================================================
--- trunk.orig/tests/test_functions.c
+++ trunk/tests/test_functions.c
@@ -288,7 +288,7 @@ void test_cgroup_delete_cgroup(int retco
                /* check group under mountpoint2 */
                        build_path(path1_group, mountpoint2, name, NULL);
 
-               if (group_exist(path1_group) == -1)
+               if (group_exist(path1_group) == ENOENT)
                        message(i, PASS, "delete_cgroup()", retval,
                                                 info[GRPDELETEDINFS]);
                else
@@ -299,10 +299,10 @@ void test_cgroup_delete_cgroup(int retco
         /* check group under both mountpoints */
                /* Check if the group deleted under both mountpoints */
                build_path(path1_group, mountpoint, name, NULL);
-               if (group_exist(path1_group) == -1) {
+               if (group_exist(path1_group) == ENOENT) {
                        build_path(path2_group, mountpoint2, name, NULL);
 
-                       if (group_exist(path2_group) == -1)
+                       if (group_exist(path2_group) == ENOENT)
                                message(i, PASS, "delete_cgroup()",
                                                 retval, info[GRPDELETEDINFS]);
                        else
@@ -347,11 +347,21 @@ void get_controllers(const char *name, i
  */
 int group_exist(char *path_group)
 {
+       struct stat statbuf;
        int ret;
-       ret = open(path_group, O_DIRECTORY);
-       if (ret == -1)
-               return ret;
-       return 0;
+       if (stat(path_group, &statbuf) == -1) {
+               /* Group deleted. OK */
+               if (errno == ENOENT)
+                       return ENOENT;
+               /* There is some other failure */
+               printf("stat failed, return code is %d\n", errno);
+               return -1;
+       }
+
+       if (S_ISDIR(statbuf.st_mode))
+               return 0;
+       else
+               return -1;
 }
 
 /**



------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to