diff --git a/inc/qcbor/qcbor_common.h b/inc/qcbor/qcbor_common.h
index 1fd5bc8..b4afb37 100644
--- a/inc/qcbor/qcbor_common.h
+++ b/inc/qcbor/qcbor_common.h
@@ -1,35 +1,35 @@
-/*==============================================================================
- Copyright (c) 2016-2018, The Linux Foundation.
- Copyright (c) 2018-2023, Laurence Lundblade.
- Copyright (c) 2021, Arm Limited.
- All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors, nor the name "Laurence Lundblade" may be used to
-      endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- =============================================================================*/
+/* ==========================================================================
+ * Copyright (c) 2016-2018, The Linux Foundation.
+ * Copyright (c) 2018-2023, Laurence Lundblade.
+ * Copyright (c) 2021, Arm Limited.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors, nor the name "Laurence Lundblade" may be used to
+ *       endorse or promote products derived from this software without
+ *       specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ========================================================================= */
 
 
 #ifndef qcbor_common_h
@@ -433,7 +433,7 @@
    /** More than @ref QCBOR_MAX_TAGS_PER_ITEM tags encountered for a
     *  CBOR ITEM.  @ref QCBOR_MAX_TAGS_PER_ITEM is a limit of this
     *  implementation.  During decoding, too many tags in the
-    *  caller-configured tag list, or not enough space in 
+    *  caller-configured tag list, or not enough space in
     *  @ref  QCBORTagListOut. This error makes no further decoding
     *  possible.  */
    QCBOR_ERR_TOO_MANY_TAGS = 60,
diff --git a/inc/qcbor/qcbor_private.h b/inc/qcbor/qcbor_private.h
index 725f27b..4532767 100644
--- a/inc/qcbor/qcbor_private.h
+++ b/inc/qcbor/qcbor_private.h
@@ -1,35 +1,35 @@
-/*==============================================================================
- Copyright (c) 2016-2018, The Linux Foundation.
- Copyright (c) 2018-2023, Laurence Lundblade.
- Copyright (c) 2021, Arm Limited.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are
- met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors, nor the name "Laurence Lundblade" may be used to
- endorse or promote products derived from this software without
- specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- =============================================================================*/
+/* ==========================================================================
+ * Copyright (c) 2016-2018, The Linux Foundation.
+ * Copyright (c) 2018-2023, Laurence Lundblade.
+ * Copyright (c) 2021, Arm Limited.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors, nor the name "Laurence Lundblade" may be used to
+ *       endorse or promote products derived from this software without
+ *       specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ========================================================================= */
 
 
 #ifndef qcbor_private_h
@@ -49,8 +49,8 @@
 #endif
 
 
-/* It was originally defined as QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA,
- * but this is incosistent with all the other QCBOR_DISABLE_
+/* This was originally defined as QCBOR_CONFIG_DISABLE_EXP_AND_MANTISSA,
+ * but this is inconsistent with all the other QCBOR_DISABLE_
  * #defines, so the name was changed and this was added for backwards
  * compatibility
  */
@@ -71,6 +71,56 @@
 #endif /* USEFULBUF_DISABLE_ALL_FLOAT */
 
 
+/*
+ * Convenience macro for selecting the proper return value in case floating
+ * point feature(s) are disabled.
+ *
+ * The macros:
+ *
+ *  FLOAT_ERR_CODE_NO_FLOAT(x) Can be used when disabled floating point should
+ *                              result error, and all other cases should return
+ *                             'x'.
+ *
+ *  The below macros always return QCBOR_ERR_ALL_FLOAT_DISABLED when all
+ *  floating point is disabled.
+ *
+ *  FLOAT_ERR_CODE_NO_HALF_PREC(x) Can be used when disabled preferred float
+ *                                 results in error, and all other cases should
+ *                                 return 'x'.
+ *  FLOAT_ERR_CODE_NO_FLOAT_HW(x) Can be used when disabled hardware floating
+ *                                point results in error, and all other cases
+ *                                should return 'x'.
+ *  FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) Can be used when either disabled
+ *                                             preferred float or disabling
+ *                                             hardware floating point results in
+ *                                             error, and all other cases should
+ *                                             return 'x'.
+ */
+#ifdef USEFULBUF_DISABLE_ALL_FLOAT
+   #define FLOAT_ERR_CODE_NO_FLOAT(x)                 QCBOR_ERR_ALL_FLOAT_DISABLED
+   #define FLOAT_ERR_CODE_NO_HALF_PREC(x)             QCBOR_ERR_ALL_FLOAT_DISABLED
+   #define FLOAT_ERR_CODE_NO_FLOAT_HW(x)              QCBOR_ERR_ALL_FLOAT_DISABLED
+   #define FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) QCBOR_ERR_ALL_FLOAT_DISABLED
+#else /* USEFULBUF_DISABLE_ALL_FLOAT*/
+   #define FLOAT_ERR_CODE_NO_FLOAT(x)     x
+   #ifdef QCBOR_DISABLE_PREFERRED_FLOAT
+      #define FLOAT_ERR_CODE_NO_HALF_PREC(x) QCBOR_ERR_HALF_PRECISION_DISABLED
+      #define FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) QCBOR_ERR_HALF_PRECISION_DISABLED
+   #else /* QCBOR_DISABLE_PREFERRED_FLOAT */
+      #define FLOAT_ERR_CODE_NO_HALF_PREC(x) x
+      #ifdef QCBOR_DISABLE_FLOAT_HW_USE
+         #define FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) QCBOR_ERR_HW_FLOAT_DISABLED
+      #else
+         #define FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) x
+      #endif
+   #endif /* QCBOR_DISABLE_PREFERRED_FLOAT */
+   #ifdef QCBOR_DISABLE_FLOAT_HW_USE
+      #define FLOAT_ERR_CODE_NO_FLOAT_HW(x)  QCBOR_ERR_HW_FLOAT_DISABLED
+   #else /* QCBOR_DISABLE_FLOAT_HW_USE */
+      #define FLOAT_ERR_CODE_NO_FLOAT_HW(x)  x
+   #endif /* QCBOR_DISABLE_FLOAT_HW_USE */
+#endif /*USEFULBUF_DISABLE_ALL_FLOAT*/
+
 
 /*
  * These are special values for the AdditionalInfo bits that are part of
@@ -129,55 +179,7 @@
 #define QCBOR_MAX_TAGS_PER_ITEM1 4
 
 
-/*
- * Convenience macro for selecting the proper return value in case floating
- * point feature(s) are disabled.
- *
- * The macros:
- *
- *  FLOAT_ERR_CODE_NO_FLOAT(x) Can be used when disabled floating point should
- *                              result error, and all other cases should return
- *                             'x'.
- *
- *  The below macros always return QCBOR_ERR_ALL_FLOAT_DISABLED when all
- *  floating point is disabled.
- *
- *  FLOAT_ERR_CODE_NO_HALF_PREC(x) Can be used when disabled preferred float
- *                                 results in error, and all other cases should
- *                                 return 'x'.
- *  FLOAT_ERR_CODE_NO_FLOAT_HW(x) Can be used when disabled hardware floating
- *                                point results in error, and all other cases
- *                                should return 'x'.
- *  FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) Can be used when either disabled
- *                                             preferred float or disabling
- *                                             hardware floating point results in
- *                                             error, and all other cases should
- *                                             return 'x'.
- */
-#ifdef USEFULBUF_DISABLE_ALL_FLOAT
-   #define FLOAT_ERR_CODE_NO_FLOAT(x)                 QCBOR_ERR_ALL_FLOAT_DISABLED
-   #define FLOAT_ERR_CODE_NO_HALF_PREC(x)             QCBOR_ERR_ALL_FLOAT_DISABLED
-   #define FLOAT_ERR_CODE_NO_FLOAT_HW(x)              QCBOR_ERR_ALL_FLOAT_DISABLED
-   #define FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) QCBOR_ERR_ALL_FLOAT_DISABLED
-#else /* USEFULBUF_DISABLE_ALL_FLOAT*/
-   #define FLOAT_ERR_CODE_NO_FLOAT(x)     x
-   #ifdef QCBOR_DISABLE_PREFERRED_FLOAT
-      #define FLOAT_ERR_CODE_NO_HALF_PREC(x) QCBOR_ERR_HALF_PRECISION_DISABLED
-      #define FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) QCBOR_ERR_HALF_PRECISION_DISABLED
-   #else /* QCBOR_DISABLE_PREFERRED_FLOAT */
-      #define FLOAT_ERR_CODE_NO_HALF_PREC(x) x
-      #ifdef QCBOR_DISABLE_FLOAT_HW_USE
-         #define FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) QCBOR_ERR_HW_FLOAT_DISABLED
-      #else
-         #define FLOAT_ERR_CODE_NO_HALF_PREC_NO_FLOAT_HW(x) x
-      #endif
-   #endif /* QCBOR_DISABLE_PREFERRED_FLOAT */
-   #ifdef QCBOR_DISABLE_FLOAT_HW_USE
-      #define FLOAT_ERR_CODE_NO_FLOAT_HW(x)  QCBOR_ERR_HW_FLOAT_DISABLED
-   #else /* QCBOR_DISABLE_FLOAT_HW_USE */
-      #define FLOAT_ERR_CODE_NO_FLOAT_HW(x)  x
-   #endif /* QCBOR_DISABLE_FLOAT_HW_USE */
-#endif /*USEFULBUF_DISABLE_ALL_FLOAT*/
+
 
 
 /*
@@ -196,15 +198,15 @@
  *   32-bit machine: (15 + 1) * (4 + 2 + 1 + 1 pad) + 4 = 132 bytes
  */
 typedef struct __QCBORTrackNesting {
-   // PRIVATE DATA STRUCTURE
+  /* PRIVATE DATA STRUCTURE */
    struct {
-      // See function QCBOREncode_OpenMapOrArray() for details on how this works
-      uint32_t  uStart;   // uStart is the byte position where the array starts
-      uint16_t  uCount;   // Number of items in the arrary or map; counts items
-                          // in a map, not pairs of items
-      uint8_t   uMajorType; // Indicates if item is a map or an array
-   } pArrays[QCBOR_MAX_ARRAY_NESTING+1], // stored state for the nesting levels
-   *pCurrentNesting; // the current nesting level
+      /* See QCBOREncode_OpenMapOrArray() for details on how this works */
+      uint32_t  uStart;   /* uStart is the position where the array starts */
+      uint16_t  uCount;   /* Number of items in the arrary or map; counts items
+                           * in a map, not pairs of items */
+      uint8_t   uMajorType; /* Indicates if item is a map or an array */
+   } pArrays[QCBOR_MAX_ARRAY_NESTING+1], /* stored state for nesting levels */
+   *pCurrentNesting; /* the current nesting level */
 } QCBORTrackNesting;
 
 
@@ -219,11 +221,11 @@
  *  32-bit machine: 15 + 1 + 132 = 148 bytes
  */
 struct _QCBOREncodeContext {
-   // PRIVATE DATA STRUCTURE
-   UsefulOutBuf      OutBuf;  // Pointer to output buffer, its length and
-                              // position in it
-   uint8_t           uError;  // Error state, always from QCBORError enum
-   QCBORTrackNesting nesting; // Keep track of array and map nesting
+   /* PRIVATE DATA STRUCTURE */
+   UsefulOutBuf      OutBuf;  /* Pointer to output buffer, its length and
+                               * position in it. */
+   uint8_t           uError;  /* Error state, always from QCBORError enum */
+   QCBORTrackNesting nesting; /* Keep track of array and map nesting */
 };
 
 
@@ -244,41 +246,42 @@
  * 32-bit machine size is 200 bytes
  */
 typedef struct __QCBORDecodeNesting  {
-   // PRIVATE DATA STRUCTURE
+  /* PRIVATE DATA STRUCTURE */
    struct nesting_decode_level {
       /*
-       This keeps tracking info for each nesting level. There are two
-       main types of levels:
-         1) Byte count tracking. This is for the top level input CBOR
-         which might be a single item or a CBOR sequence and byte
-         string wrapped encoded CBOR.
-         2) Item tracking. This is for maps and arrays.
-
-       uLevelType has value QCBOR_TYPE_BYTE_STRING for 1) and
-       QCBOR_TYPE_MAP or QCBOR_TYPE_ARRAY or QCBOR_TYPE_MAP_AS_ARRAY
-       for 2).
-
-       Item tracking is either for definite or indefinite-length
-       maps/arrays. For definite lengths, the total count and items
-       unconsumed are tracked. For indefinite-length, uTotalCount is
-       QCBOR_COUNT_INDICATES_INDEFINITE_LENGTH (UINT16_MAX) and there
-       is no per-item count of members. For indefinite-length maps and
-       arrays, uCountCursor is UINT16_MAX if not consumed and zero if
-       it is consumed in the pre-order traversal. Additionally, if
-       entered in bounded mode, uCountCursor is
-       QCBOR_COUNT_INDICATES_ZERO_LENGTH to indicate it is empty.
-
-       This also records whether a level is bounded or not.  All
-       byte-count tracked levels (the top-level sequence and
-       bstr-wrapped CBOR) are bounded. Maps and arrays may or may not
-       be bounded. They are bounded if they were Entered() and not if
-       they were traversed with GetNext(). They are marked as bounded
-       by uStartOffset not being UINT32_MAX.
+       * This keeps tracking info for each nesting level. There are two
+       * main types of levels:
+       *   1) Byte count tracking. This is for the top level input CBOR
+       *   which might be a single item or a CBOR sequence and byte
+       *   string wrapped encoded CBOR.
+       *   2) Item tracking. This is for maps and arrays.
+       *
+       * uLevelType has value QCBOR_TYPE_BYTE_STRING for 1) and
+       * QCBOR_TYPE_MAP or QCBOR_TYPE_ARRAY or QCBOR_TYPE_MAP_AS_ARRAY
+       * for 2).
+       *
+       * Item tracking is either for definite or indefinite-length
+       * maps/arrays. For definite lengths, the total count and items
+       * unconsumed are tracked. For indefinite-length, uTotalCount is
+       * QCBOR_COUNT_INDICATES_INDEFINITE_LENGTH (UINT16_MAX) and
+       * there is no per-item count of members. For indefinite-length
+       * maps and arrays, uCountCursor is UINT16_MAX if not consumed
+       * and zero if it is consumed in the pre-order
+       * traversal. Additionally, if entered in bounded mode,
+       * uCountCursor is QCBOR_COUNT_INDICATES_ZERO_LENGTH to indicate
+       * it is empty.
+       *
+       * This also records whether a level is bounded or not.  All
+       * byte-count tracked levels (the top-level sequence and
+       * bstr-wrapped CBOR) are bounded. Maps and arrays may or may
+       * not be bounded. They are bounded if they were Entered() and
+       * not if they were traversed with GetNext(). They are marked as
+       * bounded by uStartOffset not being UINT32_MAX.
        */
       /*
-       If uLevelType can put in a separately indexed array, the union/
-       struct will be 8 bytes rather than 9 and a lot of wasted
-       padding for alignment will be saved.
+       * If uLevelType can put in a separately indexed array, the
+       * union/ struct will be 8 bytes rather than 9 and a lot of
+       * wasted padding for alignment will be saved.
        */
       uint8_t  uLevelType;
       union {
@@ -302,25 +305,25 @@
     *pCurrent,
     *pCurrentBounded;
    /*
-    pCurrent is for item-by-item pre-order traversal.
-
-    pCurrentBounded points to the current bounding level or is NULL if
-    there isn't one.
-
-    pCurrent must always be below pCurrentBounded as the pre-order
-    traversal is always bounded by the bounding level.
-
-    When a bounded level is entered, the pre-order traversal is set to
-    the first item in the bounded level. When a bounded level is
-    exited, the pre-order traversl is set to the next item after the
-    map, array or bstr. This may be more than one level up, or even
-    the end of the input CBOR.
+    * pCurrent is for item-by-item pre-order traversal.
+    *
+    * pCurrentBounded points to the current bounding level or is NULL
+    * if there isn't one.
+    *
+    * pCurrent must always be below pCurrentBounded as the pre-order
+    * traversal is always bounded by the bounding level.
+    *
+    * When a bounded level is entered, the pre-order traversal is set
+    * to the first item in the bounded level. When a bounded level is
+    * exited, the pre-order traversl is set to the next item after the
+    * map, array or bstr. This may be more than one level up, or even
+    * the end of the input CBOR.
     */
 } QCBORDecodeNesting;
 
 
 typedef struct  {
-   // PRIVATE DATA STRUCTURE
+   /* PRIVATE DATA STRUCTURE */
    void *pAllocateCxt;
    UsefulBuf (* pfAllocator)(void *pAllocateCxt, void *pOldMem, size_t uNewSize);
 } QCBORInternalAllocator;
@@ -329,34 +332,34 @@
 /*
  * PRIVATE DATA STRUCTURE
  *
- * The decode context. This data structure plus the public QCBORDecode_xxx
- * functions form an "object" that does CBOR decoding.
+ * The decode context. This data structure plus the public
+ * QCBORDecode_xxx functions form an "object" that does CBOR decoding.
  *
  * Size approximation (varies with CPU/compiler):
  *  64-bit machine: 32 + 1 + 1 + 6 bytes padding + 72 + 16 + 8 + 8 = 144 bytes
  *  32-bit machine: 16 + 1 + 1 + 2 bytes padding + 68 +  8 + 8 + 4 = 108 bytes
  */
 struct _QCBORDecodeContext {
-   // PRIVATE DATA STRUCTURE
+  /* PRIVATE DATA STRUCTURE */
    UsefulInputBuf InBuf;
 
-
    QCBORDecodeNesting nesting;
 
-
-   // If a string allocator is configured for indefinite-length
-   // strings, it is configured here.
+   /* If a string allocator is configured for indefinite-length
+    * strings, it is configured here.
+    */
    QCBORInternalAllocator StringAllocator;
 
-   // These are special for the internal MemPool allocator.
-   // They are not used otherwise. We tried packing these
-   // in the MemPool itself, but there are issues
-   // with memory alignment.
+   /* These are special for the internal MemPool allocator.  They are
+    * not used otherwise. We tried packing these in the MemPool
+    * itself, but there are issues with memory alignment.
+    */
    uint32_t uMemPoolSize;
    uint32_t uMemPoolFreeOffset;
 
-   // A cached offset to the end of the current map
-   // 0 if no value is cached.
+   /* A cached offset to the end of the current map 0 if no value is
+    * cached.
+    */
 #define QCBOR_MAP_OFFSET_CACHE_INVALID UINT32_MAX
    uint32_t uMapEndOffsetCache;
 
@@ -371,8 +374,8 @@
 
 };
 
-/* Used internally in the impementation here
- * Must not conflict with any of the official CBOR types
+/* Used internally in the impementation here Must not conflict with
+ * any of the official CBOR types
  */
 #define CBOR_MAJOR_NONE_TYPE_RAW            9
 #define CBOR_MAJOR_NONE_TAG_LABEL_REORDER  10
@@ -380,7 +383,7 @@
 #define CBOR_MAJOR_NONE_TYPE_OPEN_BSTR     12
 
 
-// Add this to types to indicate they are to be encoded as indefinite lengths
+/* Add this to types to indicate they are to be encoded as indefinite lengths */
 #define QCBOR_INDEFINITE_LEN_TYPE_MODIFIER 0x80
 #define CBOR_MAJOR_NONE_TYPE_ARRAY_INDEFINITE_LEN \
             CBOR_MAJOR_TYPE_ARRAY + QCBOR_INDEFINITE_LEN_TYPE_MODIFIER
