Hi Paul, On 1/17/23 22:53, Paul Eggert wrote: > On 1/17/23 12:24, Alejandro Colomar wrote: >> >>         This  macro  produces  incorrect values when x + step would overflow or >>         wrap around > > The macro can have undefined behavior on overflow, if the result type is signed. > So I suggest replacing "produces incorrect values" with "has undefined behavior". > > I suppose you could also document that the behavior is well-defined if the > result type is unsigned, but that sounds like overkill. Indeed. v2 below. Cheers, Alex --- roundup(3) Library Functions Manual roundup(3) NAME roundup - round up in steps LIBRARY Standard C library (libc) SYNOPSIS #include roundup(x, step); DESCRIPTION This macro rounds x to the nearest multiple of step that is not less than x. It is typically used for rounding up a pointer to align it or increas‐ ing a buffer to be allocated. This API is not designed to be generic, and doesn’t work in some cases that are not important for the typical use cases described above. See CAVEATS. RETURN VALUE This macro returns the rounded value. STANDARDS This nonstandard macro is present in glibc and some BSDs. CAVEATS The arguments may be evaluated more than once. x should be nonnegative, and step should be positive. If x + step would overflow or wrap around, the behavior is undefined. SEE ALSO ceil(3), floor(3), lrint(3), rint(3), lround(3), round(3) Linux man‐pages (unreleased) (date) roundup(3) --