1 /* ISC license. */
2 
3 #include <skalibs/bsdsnowflake.h>
4 #include <errno.h>
5 #include <skalibs/biguint.h>
6 
bu_addc(uint32_t * c,unsigned int cn,uint32_t const * a,unsigned int an,uint32_t const * b,unsigned int bn,int carry)7 int bu_addc (uint32_t *c, unsigned int cn, uint32_t const *a, unsigned int an, uint32_t const *b, unsigned int bn, int carry)
8 {
9   unsigned int i = 0 ;
10   for (; i < cn ; i++)
11   {
12     uint32_t ai = (i < an) ? a[i] : 0 ;
13     uint32_t bi = (i < bn) ? b[i] : 0 ;
14     uint32_t ci = ai + bi + carry ;
15     carry = (carry || bi) && (ci < ai) ;
16     c[i] = ci ;
17   }
18   return carry ? (errno = EOVERFLOW, 0) : 1 ;
19 }
20