static int _muldiv()

in subprojects/speex/resample.c [592:603]


static int _muldiv(spx_uint32_t *result, spx_uint32_t value, spx_uint32_t mul, spx_uint32_t div)
{
   speex_assert(result);
   spx_uint32_t major = value / div;
   spx_uint32_t remainder = value % div;
   /* TODO: Could use 64 bits operation to check for overflow. But only guaranteed in C99+ */
   if (remainder > UINT32_MAX / mul || major > UINT32_MAX / mul
       || major * mul > UINT32_MAX - remainder * mul / div)
      return RESAMPLER_ERR_OVERFLOW;
   *result = remainder * mul / div + major * mul;
   return RESAMPLER_ERR_SUCCESS;
}