On Fri, Jul 14, 2017 at 01:41:58AM +0300, Michael S. Tsirkin wrote:
> On Thu, Jul 13, 2017 at 12:17:40PM -0300, Eduardo Habkost wrote:
> > > > Oh right. So you need to find dots and split at these points.
> > > > Something like the below? Completely untested.
> > > > 
> > > > int mstcmp(const char *s1, const char *s2)
> > > > {
> > > >         const char *e1, *e2;
> > > >         int l1, l2, c;
> > > > 
> > > >         do {
> > > >                 e1 = strchr(s1, '.');
> > > >                 e2 = strchr(s2, '.');
> > > > 
> > > >                 l1 = e1 ? e1 - s1 + 1 : strlen(s1);
> > > >                 l2 = e2 ? e2 - s2 + 1 : strlen(s2);
> > > > 
> > > >                 /* compare numerically: shorter strings give smaller 
> > > > numbers */
> > > >                 if (l1 != l2) {
> > > >                         break;
> > > >                 }
> > > >                 c = strncmp(s1, s2, l1);
> > > >                 if (c) {
> > > >                         return c;
> > > >                 }
> > > >                 s1 += l1;
> > > >                 s2 += l1;
> > > >         } while (l1);
> > > > 
> > > >         return l1 - l2;
> > > > }
> > 
> > I believe copying strverscmp() from gnulib as-is is better than
> > reimplementing a subset of it.
> 
> I would then probably copy it unconditionally.

That's probably what I will do.  Saving a few bytes in the QEMU
binary is probably not worth the extra ./configure cruft.

-- 
Eduardo

Reply via email to