[PATCH] diff: strip trailing / on dirs

Denys Vlasenko vda.linux at googlemail.com
Fri Jul 9 17:40:56 UTC 2010


On Friday 09 July 2010 17:46, Matheus Izvekov wrote:
> On 09:40 Fri 09 Jul     , Natanael Copa wrote:
> > fixes #2203
> > https://bugs.busybox.net/show_bug.cgi?id=2203
> > ---
> >  editors/diff.c |    6 ++++++
> >  1 files changed, 6 insertions(+), 0 deletions(-)
> > 
> > diff --git a/editors/diff.c b/editors/diff.c
> > index 07594e8..e2da626 100644
> > --- a/editors/diff.c
> > +++ b/editors/diff.c
> > @@ -788,9 +788,15 @@ static void diffdir(char *p[2], const char *s_start)
> >  
> >  	memset(&list, 0, sizeof(list));
> >  	for (i = 0; i < 2; i++) {
> > +		char *lc;
> >  		/*list[i].s = list[i].e = 0; - memset did it */
> >  		/*list[i].dl = NULL; */
> >  
> > +		/* trim trailing / in dirs. */
> > +		lc = last_char_is(p[i], '/');
> > +		if (lc && lc != p[i])
> > +			*lc = '\0';
> > +
> >  		/* We need to trim root directory prefix.
> >  		 * Using list.len to specify its length,
> >  		 * add_to_dirlist will remove it. */
> > -- 
> > 1.7.1.1
> > 
> > _______________________________________________
> > busybox mailing list
> > busybox at busybox.net
> > http://lists.busybox.net/mailman/listinfo/busybox
> 
> Thanks for reporting that bug!
> Besides stripping only one slash, as Bernhard pointed out, the
> problem with this patch is that it directly modifiles the file names
> stored in argv, so in case the files do differ, the headers are wrong.
> Consider this output from gnu diff:
>   % diff -ur diff1 diff2/////
>   diff -ur diff1/test diff2//////test
>   --- diff1/test  2010-07-09 12:26:55.248987189 -0300
>   +++ diff2//////test     2010-07-09 11:26:08.454402145 -0300
> 
> Notice the slashes are preserved in the header.
> 
> The patch below should fix the issue properly, but please do test!

Applied, thanks!
-- 
vda


More information about the busybox mailing list