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 53c76e8..d51ddfb 100644 --- a/src/api.c +++ b/src/api.c @@ -176,7 +176,7 @@ static int cg_chown_recursive(char **path, uid_t owner, gid_t group) } 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; @@ -189,14 +189,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 = chmod(filename, dir_mode); break; case FTS_F: case FTS_NSOK: case FTS_NS: case FTS_DEFAULT: - if (filem_change) + if (file_mode != -1U) ret = chmod(filename, file_mode); break; } @@ -212,7 +212,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; @@ -249,8 +249,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