Hi Junio, On Thu, 23 Apr 2020, Junio C Hamano wrote: > Junio C Hamano <gitster@xxxxxxxxx> writes: > > > Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes: > > > >> Yes (modulo doing "greater than" comparison on pointers which is IIRC not > >> permitted in C in general). > > > > Of course, people write a loop like this > > > > char *cp, *ep = strchr(string, '\n'); > > > > for (cp = string; cp < ep; cp++) > > ... > > > > all the time, and forbidding pointer comparison would make the > > language impossible to use ;-) > > > > I think you are confused with a different rule---what is not kosher > > is to compare two pointers that do not point into elements of the > > same array. Whether the comparison is done in (ptr1 < ptr2) way, or > > (ptr2 - ptr1 < 0) way, does not change the equation. Yep, that's my confusion all right. > Having said that, between > > 1. if (strict || slash - url > 0) > 2. if (strict || slash > url) > c->host = url_decode_mem(host, slash - host); > > I think the former is moderately easier to read. It still has the > same "Huh?" factor that a comparison between slash and URL guards > the size of the region being decoded, which is slash - host, and > makes the reader wonder how these two variables, URL and host, > relate to each other at this point in the code, though, either way > the comparison is spelled. I fully agree! That's why I use `strict || slash - host > 0` in my next iteration (actually, I decided to rename `strict`, but that's beside the point). Ciao, Dscho