Quoting Stéphane Graber ([email protected]): > Since we're no longer always returning a getenv result or some defined > string, the callers should cleanup the variable after use. > > As a result, change from const char* to char*, add the needed free() > everywhere and use strdup() on strings coming from getenv. > > Signed-off-by: Stéphane Graber <[email protected]>
Acked-by: Serge E. Hallyn <[email protected]> > --- > src/lxc/lxclock.c | 11 +++++++++-- > src/lxc/monitor.c | 6 +++++- > src/lxc/utils.c | 23 +++++++++++++---------- > src/lxc/utils.h | 2 +- > 4 files changed, 28 insertions(+), 14 deletions(-) > > diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c > index 598d6c0..b7a0078 100644 > --- a/src/lxc/lxclock.c > +++ b/src/lxc/lxclock.c > @@ -98,7 +98,7 @@ static char *lxclock_name(const char *p, const char *n) > int ret; > int len; > char *dest; > - const char *rundir; > + char *rundir; > > /* lockfile will be: > * "/run" + "/lock/lxc/$lxcpath/$lxcname + '\0' if root > @@ -113,12 +113,15 @@ static char *lxclock_name(const char *p, const char *n) > return NULL; > len += strlen(rundir); > > - if ((dest = malloc(len)) == NULL) > + if ((dest = malloc(len)) == NULL) { > + free(rundir); > return NULL; > + } > > ret = snprintf(dest, len, "%s/lock/lxc/%s", rundir, p); > if (ret < 0 || ret >= len) { > free(dest); > + free(rundir); > return NULL; > } > ret = mkdir_p(dest, 0755); > @@ -130,6 +133,7 @@ static char *lxclock_name(const char *p, const char *n) > d = realloc(dest, l2); > if (!d) { > free(dest); > + free(rundir); > return NULL; > } > len = l2; > @@ -138,12 +142,15 @@ static char *lxclock_name(const char *p, const char *n) > ret = snprintf(dest, len, "/tmp/%d/lxc/%s", geteuid(), p); > if (ret < 0 || ret >= len) { > free(dest); > + free(rundir); > return NULL; > } > ret = snprintf(dest, len, "/tmp/%d/lxc/%s/%s", geteuid(), p, n); > } else > ret = snprintf(dest, len, "%s/lock/lxc/%s/%s", rundir, p, n); > > + free(rundir); > + > if (ret < 0 || ret >= len) { > free(dest); > return NULL; > diff --git a/src/lxc/monitor.c b/src/lxc/monitor.c > index 704cc22..e45b5cf 100644 > --- a/src/lxc/monitor.c > +++ b/src/lxc/monitor.c > @@ -54,7 +54,7 @@ int lxc_monitor_fifo_name(const char *lxcpath, char > *fifo_path, size_t fifo_path > int do_mkdirp) > { > int ret; > - const char *rundir; > + char *rundir; > > rundir = get_rundir(); > if (!rundir) > @@ -64,19 +64,23 @@ int lxc_monitor_fifo_name(const char *lxcpath, char > *fifo_path, size_t fifo_path > ret = snprintf(fifo_path, fifo_path_sz, "%s/lxc/%s", rundir, > lxcpath); > if (ret < 0 || ret >= fifo_path_sz) { > ERROR("rundir/lxcpath (%s/%s) too long for monitor > fifo", rundir, lxcpath); > + free(rundir); > return -1; > } > ret = mkdir_p(fifo_path, 0755); > if (ret < 0) { > ERROR("unable to create monitor fifo dir %s", > fifo_path); > + free(rundir); > return ret; > } > } > ret = snprintf(fifo_path, fifo_path_sz, "%s/lxc/%s/monitor-fifo", > rundir, lxcpath); > if (ret < 0 || ret >= fifo_path_sz) { > ERROR("rundir/lxcpath (%s/%s) too long for monitor fifo", > rundir, lxcpath); > + free(rundir); > return -1; > } > + free(rundir); > return 0; > } > > diff --git a/src/lxc/utils.c b/src/lxc/utils.c > index db5cc19..c5c450d 100644 > --- a/src/lxc/utils.c > +++ b/src/lxc/utils.c > @@ -376,7 +376,7 @@ out: > return values[i]; > } > > -const char *get_rundir() > +char *get_rundir() > { > char *rundir; > const char *homedir; > @@ -387,18 +387,21 @@ const char *get_rundir() > } > > rundir = getenv("XDG_RUNTIME_DIR"); > - if (!rundir) { > - INFO("XDG_RUNTIME_DIR isn't set in the environment."); > - homedir = getenv("HOME"); > - if (!homedir) { > - ERROR("HOME isn't set in the environment."); > - return NULL; > - } > + if (rundir) { > + rundir = strdup(rundir); > + return rundir; > + } > > - rundir = malloc(sizeof(char) * (17 + strlen(homedir))); > - sprintf(rundir, "%s/.cache/lxc/run/", homedir); > + INFO("XDG_RUNTIME_DIR isn't set in the environment."); > + homedir = getenv("HOME"); > + if (!homedir) { > + ERROR("HOME isn't set in the environment."); > + return NULL; > } > > + rundir = malloc(sizeof(char) * (17 + strlen(homedir))); > + sprintf(rundir, "%s/.cache/lxc/run/", homedir); > + > return rundir; > } > > diff --git a/src/lxc/utils.h b/src/lxc/utils.h > index f541253..f6f3373 100644 > --- a/src/lxc/utils.h > +++ b/src/lxc/utils.h > @@ -39,7 +39,7 @@ extern void lxc_setup_fs(void); > extern int get_u16(unsigned short *val, const char *arg, int base); > extern int mkdir_p(const char *dir, mode_t mode); > extern void remove_trailing_slashes(char *p); > -extern const char *get_rundir(void); > +extern char *get_rundir(void); > > extern const char *lxc_global_config_value(const char *option_name); > > -- > 1.9.rc1 > > _______________________________________________ > lxc-devel mailing list > [email protected] > http://lists.linuxcontainers.org/listinfo/lxc-devel _______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
