tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

addsub.c (708B)


      1 /* Copyright (c) 2003-2004, Roger Dingledine
      2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
      3 * Copyright (c) 2007-2021, The Tor Project, Inc. */
      4 /* See LICENSE for licensing information */
      5 
      6 /**
      7 * \file addsub.c
      8 *
      9 * \brief Helpers for addition and subtraction.
     10 *
     11 * Currently limited to non-wrapping (saturating) addition.
     12 **/
     13 
     14 #include "lib/intmath/addsub.h"
     15 #include "lib/cc/compat_compiler.h"
     16 
     17 /* Helper: safely add two uint32_t's, capping at UINT32_MAX rather
     18 * than overflow */
     19 uint32_t
     20 tor_add_u32_nowrap(uint32_t a, uint32_t b)
     21 {
     22  /* a+b > UINT32_MAX check, without overflow */
     23  if (PREDICT_UNLIKELY(a > UINT32_MAX - b)) {
     24    return UINT32_MAX;
     25  } else {
     26    return a+b;
     27  }
     28 }