Oh, my bad, sorry. I assumed that val is always integer. I guess it is better to ignore val == ULLONG_MAX:
=================================================================== RCS file: /cvs/src/sbin/disklabel/editor.c,v retrieving revision 1.368 diff -u -p -r1.368 editor.c --- editor.c 2021/05/30 19:02:30 1.368 +++ editor.c 2021/06/23 20:23:03 @@ -2418,7 +2418,7 @@ apply_unit(double val, u_char unit, u_int64_t *n) } val *= factor / DEV_BSIZE; - if (val > ULLONG_MAX) + if (val >= (double)ULLONG_MAX) return (-1); *n = val; return (0); @@ -2429,7 +2429,7 @@ parse_sizespec(const char *buf, double *val, char **un { errno = 0; *val = strtod(buf, unit); - if (errno == ERANGE || *val < 0 || *val > ULLONG_MAX) + if (errno == ERANGE || *val < 0 || *val >= (double)ULLONG_MAX) return (-1); /* too big/small */ if (*val == 0 && *unit == buf) return (-1); /* No conversion performed. */ Ali Farzanrad <ali_farzan...@riseup.net> wrote: > Hi tech@, > > disklabel shows a warning at build time which might be important. > Following diff will surpass the warning. > > =================================================================== > RCS file: /cvs/src/sbin/disklabel/editor.c,v > retrieving revision 1.368 > diff -u -p -r1.368 editor.c > --- editor.c 2021/05/30 19:02:30 1.368 > +++ editor.c 2021/06/23 19:25:45 > @@ -2418,7 +2418,7 @@ apply_unit(double val, u_char unit, u_int64_t *n) > } > > val *= factor / DEV_BSIZE; > - if (val > ULLONG_MAX) > + if (val != (double)(u_int64_t)val) > return (-1); > *n = val; > return (0); > @@ -2429,7 +2429,7 @@ parse_sizespec(const char *buf, double *val, char **un > { > errno = 0; > *val = strtod(buf, unit); > - if (errno == ERANGE || *val < 0 || *val > ULLONG_MAX) > + if (errno == ERANGE || *val < 0 || *val != (double)(u_int64_t)*val) > return (-1); /* too big/small */ > if (*val == 0 && *unit == buf) > return (-1); /* No conversion performed. */ > >