Is it right to say the value of CMSG_ALIGN(i) is the minimum value of multiple of 8  and  >=i if i is an unsigned int variable?
#include <stdio.h>
int main(void) 
{
    int i;
    for (i=0; i<50; ++i) {
        printf("%d\n", CMSG_ALIGN(i));
    }
}
Output I get:
/*       i              CMSG_ALIGN(i)
 *
 *       0                     0
 *       [1,8]                 8
 *       [9,16]                16
 */
 
    