Test with gcc 8 and fix a few minor warnings and issues
diff --git a/Makefile.gcc8 b/Makefile.gcc8
new file mode 100644
index 0000000..50d483b
--- /dev/null
+++ b/Makefile.gcc8
@@ -0,0 +1,64 @@
+# Copyright (c) 2018, Laurence Lundblade.
+# 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.
+# * The name "Laurence Lundblade" may not 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.# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+CFLAGS=-I inc -I test -Os -Wall -Werror -pedantic-errors -Wextra -Wshadow -Wparentheses -xc -std=c99 -Werror=maybe-uninitialized
+CC=/usr/local/bin/gcc-8
+
+QCBOR_OBJ=src/UsefulBuf.o src/qcbor_encode.o src/qcbor_decode.o src/ieee754.o
+
+TEST_OBJ=test/UsefulBuf_Tests.o test/qcbor_encode_tests.o test/qcbor_decode_tests.o test/run_tests.o \
+ test/float_tests.o test/half_to_double_from_rfc7049.o
+
+qcbortest: libqcbor.a $(TEST_OBJ) cmd_line_main.o
+ $(CC) -o $@ $^ libqcbor.a
+
+qcbormin: libqcbor.a min_use_main.o
+ $(CC) -dead_strip -o $@ $^ libqcbor.a
+
+libqcbor.a: $(QCBOR_OBJ)
+ ar -r $@ $^
+
+src/UsefulBuf.o: inc/UsefulBuf.h
+src/qcbor_decode.o: inc/UsefulBuf.h inc/qcbor.h src/ieee754.h
+src/qcbor_encode.o: inc/UsefulBuf.h inc/qcbor.h src/ieee754.h
+src/iee754.o: src/ieee754.h
+
+test/run_tests.o: test/UsefulBuf_Tests.h test/float_tests.h test/run_tests.h test/qcbor_encode_tests.h\
+ test/qcbor_decode_tests.h
+test/UsefulBuf_Tests.o: test/UsefulBuf_Tests.h inc/qcbor.h inc/UsefulBuf.h
+test/qcbor_encode_tests.o: test/qcbor_encode_tests.h inc/qcbor.h inc/UsefulBuf.h
+test/qcbor_decode_tests.o: test/qcbor_decode_tests.h inc/qcbor.h inc/UsefulBuf.h
+test/float_tests.o: inc/qcbor.h inc/UsefulBuf.h test/float_tests.h test/half_to_double_from_rfc7049.h
+test/half_to_double_from_rfc7049.o: test/half_to_double_from_rfc7049.h
+
+cmd_line_main.o: test/run_tests.h inc/qcbor.h
+
+min_use_main.o: inc/qcbor.h inc/UsefulBuf.h
+
+clean:
+ rm -f $(QCBOR_OBJ2) $(TEST_OBJ) libqcbor.a
diff --git a/inc/qcbor.h b/inc/qcbor.h
index 7b684be..897346c 100644
--- a/inc/qcbor.h
+++ b/inc/qcbor.h
@@ -524,7 +524,8 @@
/**
The maximum number of items in a single array or map when encoding of decoding.
*/
-#define QCBOR_MAX_ITEMS_IN_ARRAY (UINT16_MAX) // This value is 65,535 a lot of items for an array
+// -1 is because the value UINT16_MAX is used to track indefinite length arraysUINT16_MAX
+#define QCBOR_MAX_ITEMS_IN_ARRAY (UINT16_MAX-1)
/**
The maximum nesting of arrays and maps when encoding or decoding. The
@@ -2113,26 +2114,26 @@
void QCBOREncode_AddType7(QCBOREncodeContext *pCtx, size_t uSize, uint64_t uNum);
-static void inline QCBOREncode_AddInt64ToMap(QCBOREncodeContext *pCtx, const char *szLabel, int64_t uNum)
+static inline void QCBOREncode_AddInt64ToMap(QCBOREncodeContext *pCtx, const char *szLabel, int64_t uNum)
{
QCBOREncode_AddBuffer(pCtx, CBOR_MAJOR_TYPE_TEXT_STRING, UsefulBuf_FromSZ(szLabel)); // AddSZString not defined yet
QCBOREncode_AddInt64(pCtx, uNum);
}
-static void inline QCBOREncode_AddInt64ToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, int64_t uNum)
+static inline void QCBOREncode_AddInt64ToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, int64_t uNum)
{
QCBOREncode_AddInt64(pCtx, nLabel);
QCBOREncode_AddInt64(pCtx, uNum);
}
-static void inline QCBOREncode_AddUInt64ToMap(QCBOREncodeContext *pCtx, const char *szLabel, uint64_t uNum)
+static inline void QCBOREncode_AddUInt64ToMap(QCBOREncodeContext *pCtx, const char *szLabel, uint64_t uNum)
{
QCBOREncode_AddBuffer(pCtx, CBOR_MAJOR_TYPE_TEXT_STRING, UsefulBuf_FromSZ(szLabel)); // AddSZString not defined yet
QCBOREncode_AddUInt64(pCtx, uNum);
}
-static void inline QCBOREncode_AddUInt64ToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, uint64_t uNum)
+static inline void QCBOREncode_AddUInt64ToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, uint64_t uNum)
{
QCBOREncode_AddInt64(pCtx, nLabel);
QCBOREncode_AddUInt64(pCtx, uNum);
@@ -2175,13 +2176,13 @@
}
-static void inline QCBOREncode_AddDoubleToMap(QCBOREncodeContext *pCtx, const char *szLabel, double dNum)
+static inline void QCBOREncode_AddDoubleToMap(QCBOREncodeContext *pCtx, const char *szLabel, double dNum)
{
QCBOREncode_AddSZString(pCtx, szLabel);
QCBOREncode_AddDouble(pCtx, dNum);
}
-static void inline QCBOREncode_AddDoubleToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, double dNum)
+static inline void QCBOREncode_AddDoubleToMapN(QCBOREncodeContext *pCtx, int64_t nLabel, double dNum)
{
QCBOREncode_AddInt64(pCtx, nLabel);
QCBOREncode_AddDouble(pCtx, dNum);
diff --git a/src/qcbor_decode.c b/src/qcbor_decode.c
index 2c301b6..8d216c7 100644
--- a/src/qcbor_decode.c
+++ b/src/qcbor_decode.c
@@ -536,6 +536,7 @@
nReturn = QCBOR_ERR_INVALID_CBOR;
goto Done;
}
+ /* FALLTHROUGH */
// fall through intentionally
default: // 0-19
diff --git a/test/qcbor_decode_tests.c b/test/qcbor_decode_tests.c
index 021c150..d71ebd5 100644
--- a/test/qcbor_decode_tests.c
+++ b/test/qcbor_decode_tests.c
@@ -567,9 +567,10 @@
uint8_t *pEncoded;
size_t nEncodedLen;
- int64_t i1, i2;
- size_t i3, i4;
- const uint8_t *s3, *s4;
+ int64_t i1=0, i2=0;
+ size_t i3=0, i4=0;
+ const uint8_t *s3= (uint8_t *)"";
+ const uint8_t *s4= (uint8_t *)"";
if(CreateSimpleArray(23, 6000, &pEncoded, &nEncodedLen) < 0) {