Currently we are using flag parameters to determine whether to use
directory resp. file permissions. This is rather ugly because we
need to maintain 2 variables for one purpose while we can use -1 for
permission values that shouldn't be used.

Signed-off-by: Michal Hocko <mho...@suse.cz>
---
 include/libcgroup/groups.h |    8 +++-----
 src/api.c                  |   11 +++++------
 src/tools/cgcreate.c       |   14 +++++---------
 3 files changed, 13 insertions(+), 20 deletions(-)

diff --git a/include/libcgroup/groups.h b/include/libcgroup/groups.h
index 1060641..c46e261 100644
--- a/include/libcgroup/groups.h
+++ b/include/libcgroup/groups.h
@@ -523,13 +523,11 @@ int cgroup_get_procs(char *name, char *controller, pid_t 
**pids, int *size);
 /**
  * Change permission of files and directories of given group
  * @param cgroup The cgroup which permissions should be changed
- * @param dir_mode The permission mode of group directory
- * @param dirm_change Denotes whether the directory change should be done
- * @param file_mode The permission mode of group files
- * @param filem_change Denotes whether the directory change should be done
+ * @param dir_mode The permission mode of group directory (-1 for no change)
+ * @param file_mode The permission mode of group files (-1 for no change)
  */
 int cg_chmod_recursive(struct cgroup *cgroup, mode_t dir_mode,
-       int dirm_change, mode_t file_mode, int filem_change);
+       mode_t file_mode);
 
 /**
  * @}
diff --git a/src/api.c b/src/api.c
index 311db8d..8be7495 100644
--- a/src/api.c
+++ b/src/api.c
@@ -202,7 +202,7 @@ fail:
 }
 
 int cg_chmod_file(FTS *fts, FTSENT *ent, mode_t dir_mode,
-       int dirm_change, mode_t file_mode, int filem_change)
+       mode_t file_mode)
 {
        int ret = 0;
        const char *filename = fts->fts_path;
@@ -217,14 +217,14 @@ int cg_chmod_file(FTS *fts, FTSENT *ent, mode_t dir_mode,
        case FTS_DC:
        case FTS_DNR:
        case FTS_DP:
-               if (dirm_change)
+               if (dir_mode != -1U)
                        ret = cg_chmod_path(filename, dir_mode);
                break;
        case FTS_F:
        case FTS_NSOK:
        case FTS_NS:
        case FTS_DEFAULT:
-               if (filem_change)
+               if (file_mode != -1U)
                        ret = cg_chmod_path(filename, file_mode);
                break;
        }
@@ -236,7 +236,7 @@ int cg_chmod_file(FTS *fts, FTSENT *ent, mode_t dir_mode,
  * TODO: Need to decide a better place to put this function.
  */
 int cg_chmod_recursive(struct cgroup *cgroup, mode_t dir_mode,
-       int dirm_change, mode_t file_mode, int filem_change)
+       mode_t file_mode)
 {
        int ret = 0;
        int final_ret =0;
@@ -273,8 +273,7 @@ int cg_chmod_recursive(struct cgroup *cgroup, mode_t 
dir_mode,
                        cgroup_dbg("fts_read failed\n");
                        break;
                }
-               ret = cg_chmod_file(fts, ent, dir_mode, dirm_change,
-                       file_mode, filem_change);
+               ret = cg_chmod_file(fts, ent, dir_mode, file_mode);
                if (ret) {
                        last_errno = errno;
                        final_ret = ECGOTHER;
diff --git a/src/tools/cgcreate.c b/src/tools/cgcreate.c
index 7312b32..95ed3fc 100644
--- a/src/tools/cgcreate.c
+++ b/src/tools/cgcreate.c
@@ -125,10 +125,8 @@ int main(int argc, char *argv[])
        int capacity = argc;
 
        /* permission variables */
-       mode_t dir_mode = 0;
-       mode_t file_mode = 0;
-       int dirm_change = 0;
-       int filem_change = 0;
+       mode_t dir_mode = -1U;
+       mode_t file_mode = -1U;
 
        /* no parametr on input */
        if (argc < 2) {
@@ -233,11 +231,9 @@ int main(int argc, char *argv[])
                        }
                        break;
                case 'd':
-                       dirm_change = 1;
                        ret = parse_mode(optarg, &dir_mode, argv[0]);
                        break;
                case 'f':
-                       filem_change = 1;
                        ret = parse_mode(optarg, &file_mode, argv[0]);
                        break;
                default:
@@ -310,9 +306,9 @@ int main(int argc, char *argv[])
                        cgroup_free(&cgroup);
                        goto err;
                }
-               if (dirm_change + filem_change > 0) {
-                       ret = cg_chmod_recursive(cgroup, dir_mode, dirm_change,
-                               file_mode, filem_change);
+
+               if (dir_mode != -1U || file_mode != -1U) {
+                       ret = cg_chmod_recursive(cgroup, dir_mode, file_mode);
                        if (ret) {
                                fprintf(stderr, "%s: can't change permission " \
                                        "of cgroup %s: %s\n", argv[0],
-- 
1.7.4.4


------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to