On 05/19/2011 09:39 PM, Michal Hocko wrote:
> 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);

NACK, this changes ABI! As I commented in previous patch, please make
new function. *Sigh* :(.

Otherwise, all 4 patches are very well written, keep up the good work!

Jan

>  /**
>   * @}
> 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],


------------------------------------------------------------------------------
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