utils: Add utility function to calculate padding length
authorTobias Brunner <tobias@strongswan.org>
Fri, 11 Oct 2013 23:01:06 +0000 (01:01 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 17 Oct 2013 08:25:34 +0000 (10:25 +0200)
src/libstrongswan/tests/test_utils.c
src/libstrongswan/utils/utils.h

index 506b3a1..3ca0412 100644 (file)
@@ -167,11 +167,18 @@ START_TEST(test_untoh)
 END_TEST
 
 /*******************************************************************************
- * round_up/down
+ * pad_len/round_up/down
  */
 
 START_TEST(test_round)
 {
+       ck_assert_int_eq(pad_len(0, 4), 0);
+       ck_assert_int_eq(pad_len(1, 4), 3);
+       ck_assert_int_eq(pad_len(2, 4), 2);
+       ck_assert_int_eq(pad_len(3, 4), 1);
+       ck_assert_int_eq(pad_len(4, 4), 0);
+       ck_assert_int_eq(pad_len(5, 4), 3);
+
        ck_assert_int_eq(round_up(0, 4), 0);
        ck_assert_int_eq(round_up(1, 4), 4);
        ck_assert_int_eq(round_up(2, 4), 4);
index 8fe7412..5c237a7 100644 (file)
@@ -679,26 +679,30 @@ static inline u_int64_t untoh64(void *network)
 }
 
 /**
- * Round up size to be multiple of alignement
+ * Get the padding required to make size a multiple of alignment
  */
-static inline size_t round_up(size_t size, int alignement)
+static inline size_t pad_len(size_t size, size_t alignment)
 {
-       int remainder;
+       size_t remainder;
 
-       remainder = size % alignement;
-       if (remainder)
-       {
-               size += alignement - remainder;
-       }
-       return size;
+       remainder = size % alignment;
+       return remainder ? alignment - remainder : 0;
+}
+
+/**
+ * Round up size to be multiple of alignment
+ */
+static inline size_t round_up(size_t size, size_t alignment)
+{
+       return size + pad_len(size, alignment);
 }
 
 /**
- * Round down size to be a multiple of alignement
+ * Round down size to be a multiple of alignment
  */
-static inline size_t round_down(size_t size, int alignement)
+static inline size_t round_down(size_t size, size_t alignment)
 {
-       return size - (size % alignement);
+       return size - (size % alignment);
 }
 
 /**