[lxc-devel] [PATCH v2] Cleanup parts of lxc-destroy

Serge Hallyn serge.hallyn at ubuntu.com
Wed Sep 30 16:28:26 UTC 2015


The same anti-goto was originally pounded into me, then I did some kernel
coding and saw how nice it can be compared to alternatives :)

fwiw, the plus side of the goto in this case is to commonize the work to
be done before the next loop (in this case just a 'counter++').  The minus
side is that "what do i do if lxc_container_new failed" isn't all in one
place.  Hence I say in this case it's a draw for me.

This may seem like extraneous chatting, but occasionally coding style
discussion is important - there's no coding style which when used
consistently is nearly as ugly as code which mixes coding styles :)

Quoting Christian Brauner (christianvanbrauner at gmail.com):
> Sorry, my teachers pounded a violent hatred for gotos for non-cleanup purposes
> into me. Thanks. :)
> 
> On Wed, Sep 30, 2015 at 04:13:12PM +0000, Serge Hallyn wrote:
> > Quoting Christian Brauner (christianvanbrauner at gmail.com):
> > > A bit of pedantry usually doesn't hurt. The code should be easier to follow now
> > > and avoids some repetitions.
> > > 
> > > Signed-off-by: Christian Brauner <christianvanbrauner at gmail.com>
> > 
> > Note I still don't really feel the first hunk is an improvement
> > in readability, but at this point it's subjective, so I won't
> > object :)
> > 
> > Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>
> > 
> > thanks,
> > -serge
> > 
> > > ---
> > >  src/lxc/lxc_destroy.c | 27 ++++++++++++++-------------
> > >  1 file changed, 14 insertions(+), 13 deletions(-)
> > > 
> > > diff --git a/src/lxc/lxc_destroy.c b/src/lxc/lxc_destroy.c
> > > index f1830fd..ab1029f 100644
> > > --- a/src/lxc/lxc_destroy.c
> > > +++ b/src/lxc/lxc_destroy.c
> > > @@ -141,6 +141,7 @@ static int do_destroy_with_snapshots(struct lxc_container *c)
> > >  {
> > >  	struct lxc_container *c1;
> > >  	struct stat fbuf;
> > > +	bool bret = false;
> > >  	char path[MAXPATHLEN];
> > >  	char *buf = NULL;
> > >  	char *lxcpath = NULL;
> > > @@ -184,8 +185,10 @@ static int do_destroy_with_snapshots(struct lxc_container *c)
> > >  			if (!(lxcname = strtok_r(NULL, "\n", &scratch)))
> > >  				break;
> > >  			c1 = lxc_container_new(lxcname, lxcpath);
> > > -			if (!c1)
> > > -				goto next;
> > > +			if (!c1) {
> > > +				counter++;
> > > +				continue;
> > > +			}
> > >  			if (!c1->destroy(c1)) {
> > >  				fprintf(stderr, "Destroying snapshot %s of %s failed\n", lxcname, my_args.name);
> > >  				lxc_container_put(c1);
> > > @@ -193,7 +196,6 @@ static int do_destroy_with_snapshots(struct lxc_container *c)
> > >  				return -1;
> > >  			}
> > >  			lxc_container_put(c1);
> > > -next:
> > >  			counter++;
> > >  		}
> > >  		free(buf);
> > > @@ -203,16 +205,15 @@ next:
> > >  	ret = snprintf(path, MAXPATHLEN, "%s/%s/snaps", c->config_path, c->name);
> > >  	if (ret < 0 || ret >= MAXPATHLEN)
> > >  		return -1;
> > > -	if (dir_exists(path)) {
> > > -		if (!c->destroy_with_snapshots(c)) {
> > > -			fprintf(stderr, "Destroying %s failed\n", my_args.name);
> > > -			return -1;
> > > -		}
> > > -	} else {
> > > -		if (!c->destroy(c)) {
> > > -			fprintf(stderr, "Destroying %s failed\n", my_args.name);
> > > -			return -1;
> > > -		}
> > > +
> > > +	if (dir_exists(path))
> > > +		bret = c->destroy_with_snapshots(c);
> > > +	else
> > > +		bret = c->destroy(c);
> > > +
> > > +	if (!bret) {
> > > +		fprintf(stderr, "Destroying %s failed\n", my_args.name);
> > > +		return -1;
> > >  	}
> > >  
> > >  	printf("Destroyed container %s including snapshots \n", my_args.name);
> > > -- 
> > > 2.6.0
> > > 
> > 
> > 
> > 
> > > _______________________________________________
> > > lxc-devel mailing list
> > > lxc-devel at lists.linuxcontainers.org
> > > http://lists.linuxcontainers.org/listinfo/lxc-devel
> > 
> > _______________________________________________
> > lxc-devel mailing list
> > lxc-devel at lists.linuxcontainers.org
> > http://lists.linuxcontainers.org/listinfo/lxc-devel
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


More information about the lxc-devel mailing list