From 79dc7b34258e04c400288f53d2d5849702dc87a7 Mon Sep 17 00:00:00 2001 From: Manuel Weichselbaumer Date: Sun, 24 Jan 2021 22:45:14 +0100 Subject: [PATCH 1/2] Add support for official Timestamp32 extension type --- src/private/unpack_p.cpp | 10 ++++++++++ src/private/unpack_p.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/private/unpack_p.cpp b/src/private/unpack_p.cpp index d8370d4..fe01096 100644 --- a/src/private/unpack_p.cpp +++ b/src/private/unpack_p.cpp @@ -4,6 +4,7 @@ #include "../endianhelper.h" #include +#include #include #include #include @@ -367,6 +368,9 @@ quint8 * MsgPackPrivate::unpack_fixext2(QVariant &v, quint8 *p) quint8 * MsgPackPrivate::unpack_fixext4(QVariant &v, quint8 *p) { qint8 type = static_cast(*(++p)); + if (type == -1) { + return unpack_timestamp32(v, p + 1); + } return unpack_ext(v, p + 1, type, 4); } @@ -409,6 +413,12 @@ quint8 * MsgPackPrivate::unpack_ext32(QVariant &v, quint8 *p) return unpack_ext(v, p + 1, type, len); } +quint8 * MsgPackPrivate::unpack_timestamp32(QVariant &v, quint8 *p) +{ + v = QDateTime::fromSecsSinceEpoch(_msgpack_load32(quint32, p)); + return p + 4; +} + bool MsgPackPrivate::register_unpacker(qint8 msgpack_type, MsgPack::unpack_user_f unpacker) { if (unpacker == nullptr) { diff --git a/src/private/unpack_p.h b/src/private/unpack_p.h index b44151a..3869c57 100644 --- a/src/private/unpack_p.h +++ b/src/private/unpack_p.h @@ -75,6 +75,8 @@ quint8 * unpack_fixext16(QVariant &v, quint8 *p); quint8 * unpack_ext8(QVariant &v, quint8 *p); quint8 * unpack_ext16(QVariant &v, quint8 *p); quint8 * unpack_ext32(QVariant &v, quint8 *p); + +quint8 * unpack_timestamp32(QVariant &v, quint8 *p); } #endif // MSGPACK_P_H From d0391b23fa3f6b5a5c1944f6598638008ced2f1b Mon Sep 17 00:00:00 2001 From: Manuel Weichselbaumer Date: Wed, 3 Feb 2021 13:22:15 +0100 Subject: [PATCH 2/2] iOS compilation fix (see https://forum.qt.io/topic/70466/ios-compiling-error-qchar-h-45-1-error-unknown-type-name-qt_begin_namespace) --- qmsgpack.pri | 4 ++-- src/private/qt_types_p.cpp | 2 +- src/stream/{time.cpp => datetime.cpp} | 2 +- src/stream/{time.h => datetime.h} | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) rename src/stream/{time.cpp => datetime.cpp} (99%) rename src/stream/{time.h => datetime.h} (92%) diff --git a/qmsgpack.pri b/qmsgpack.pri index f50e83c..ae09ba2 100644 --- a/qmsgpack.pri +++ b/qmsgpack.pri @@ -21,12 +21,12 @@ HEADERS += \ !contains(DEFINES, MSGPACK_NO_PACKTYPES) { SOURCES += \ $$PWD/src/private/qt_types_p.cpp \ - $$PWD/src/stream/time.cpp \ + $$PWD/src/stream/datetime.cpp \ $$PWD/src/stream/geometry.cpp HEADERS += \ $$PWD/src/private/qt_types_p.h \ - $$PWD/src/stream/time.h \ + $$PWD/src/stream/datetime.h \ $$PWD/src/stream/geometry.h qtHaveModule(gui) { diff --git a/src/private/qt_types_p.cpp b/src/private/qt_types_p.cpp index 0982c2d..3256b78 100644 --- a/src/private/qt_types_p.cpp +++ b/src/private/qt_types_p.cpp @@ -5,7 +5,7 @@ #include "unpack_p.h" #include "../msgpackstream.h" #include "../endianhelper.h" -#include "../stream/time.h" +#include "../stream/datetime.h" #include diff --git a/src/stream/time.cpp b/src/stream/datetime.cpp similarity index 99% rename from src/stream/time.cpp rename to src/stream/datetime.cpp index cc24baa..775ac66 100644 --- a/src/stream/time.cpp +++ b/src/stream/datetime.cpp @@ -1,6 +1,6 @@ // This is an open source non-commercial project. Dear PVS-Studio, please check it. // PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com -#include "time.h" +#include "datetime.h" #include "../msgpack.h" void MsgPackPrivate::pack_qtime_raw(const QTime &time, quint8 *p) diff --git a/src/stream/time.h b/src/stream/datetime.h similarity index 92% rename from src/stream/time.h rename to src/stream/datetime.h index 82728cb..9418a58 100644 --- a/src/stream/time.h +++ b/src/stream/datetime.h @@ -1,5 +1,5 @@ -#ifndef TIME_H -#define TIME_H +#ifndef DATETIME_H +#define DATETIME_H #include "../msgpack_export.h" #include "../msgpackstream.h" @@ -22,5 +22,5 @@ void pack_qdate_raw(const QDate &date, quint8 *p); QDate unpack_qdate_raw(quint8 *p); } -#endif // TIME_H +#endif // DATETIME_H