On Tue, Dec 8, 2009 at 7:03 PM, Jan Safranek <[email protected]> wrote: > When a group parameter has empty value (like uninitialized cpuset.cpus), > libcgroup does not return this parameter value - it returns > ECGROUPVALUENOTEXIST instead. > > I think reading whole parameter file instead of just '%s' is the right thing > to do - it helps also with multiline values, like cpuacct.stat. >
I am not so sure that I agree with this. I will go through with it again in the morning with a clear mind :-) and then send in comments. > Signed-off-by: Jan Safranek <[email protected]> > --- > > src/api.c | 10 +++++++--- > 1 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/src/api.c b/src/api.c > index cfcf507..00bce0a 100644 > --- a/src/api.c > +++ b/src/api.c > @@ -1775,7 +1775,7 @@ static int cg_rd_ctrl_file(char *subsys, char *cgroup, > char *file, char **value) > if (!ctrl_file) > return ECGROUPVALUENOTEXIST; > > - *value = malloc(CG_VALUE_MAX); > + *value = calloc(CG_VALUE_MAX, 1); > if (!*value) { > last_errno = errno; > return ECGOTHER; > @@ -1785,10 +1785,14 @@ static int cg_rd_ctrl_file(char *subsys, char > *cgroup, char *file, char **value) > * using %as crashes when we try to read from files like > * memory.stat > */ > - ret = fscanf(ctrl_file, "%s", *value); > - if (ret == 0 || ret == EOF) { > + ret = fread(*value, 1, CG_VALUE_MAX-1, ctrl_file); > + if (ret < 0) { > free(*value); > *value = NULL; > + } else { > + /* remove trailing \n */ > + if (ret > 0 && (*value)[ret-1] == '\n') > + (*value)[ret-1] = '\0'; > } > > fclose(ctrl_file); > > -- Joan Crawford - "I, Joan Crawford, I believe in the dollar. Everything I earn, I spend." - http://www.brainyquote.com/quotes/authors/j/joan_crawford.html ------------------------------------------------------------------------------ Return on Information: Google Enterprise Search pays you back Get the facts. http://p.sf.net/sfu/google-dev2dev _______________________________________________ Libcg-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libcg-devel
