From 5b73bfebbcbf0af3569b76d7dfacd3dca30801ec Mon Sep 17 00:00:00 2001 From: Benichou Date: Wed, 22 Feb 2017 15:54:49 +0100 Subject: [PATCH] Add support of VxWorks 7 --- README.md | 2 ++ include/spdlog/details/os.h | 6 +++++- include/spdlog/fmt/bundled/format.cc | 9 +++++---- include/spdlog/fmt/bundled/format.h | 16 ++++++++-------- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index bca645c2..b8aaca05 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Just copy the source [folder](https://github.com/gabime/spdlog/tree/master/inclu * Windows (vc 2013+, cygwin/mingw) * Mac OSX (clang 3.5+) * Android + * VxWorks 7 ##Features * Very fast - performance is the primary goal (see [benchmarks](#benchmarks) below). @@ -25,6 +26,7 @@ Just copy the source [folder](https://github.com/gabime/spdlog/tree/master/inclu * Console logging (colors supported). * syslog. * Windows debugger (```OutputDebugString(..)```) + * Android output (```__android_log_write(..)```) * Easily extendable with custom log targets (just implement a single function in the [sink](include/spdlog/sinks/sink.h) interface). * Severity based filtering - threshold levels can be modified in runtime as well as in compile time. diff --git a/include/spdlog/details/os.h b/include/spdlog/details/os.h index b63ce667..3d36314a 100644 --- a/include/spdlog/details/os.h +++ b/include/spdlog/details/os.h @@ -306,8 +306,12 @@ inline int utc_minutes_offset(const std::tm& tm = details::os::localtime()) }; long int offset_seconds = helper::calculate_gmt_offset(tm); +#else +#ifdef __VXWORKS__ + long int offset_seconds = 0; #else long int offset_seconds = tm.tm_gmtoff; +#endif #endif return static_cast(offset_seconds / 60); @@ -377,7 +381,7 @@ inline std::string errno_str(int err_num) else return "Unkown error"; -#elif defined(__FreeBSD__) || defined(__APPLE__) || defined(ANDROID) || defined(__SUNPRO_CC) || \ +#elif defined(__FreeBSD__) || defined(__APPLE__) || defined(ANDROID) || defined(__SUNPRO_CC) || defined(__VXWORKS__) || \ ((_POSIX_C_SOURCE >= 200112L) && ! defined(_GNU_SOURCE)) // posix version if (strerror_r(err_num, buf, buf_size) == 0) diff --git a/include/spdlog/fmt/bundled/format.cc b/include/spdlog/fmt/bundled/format.cc index fd8855be..2e643fa6 100644 --- a/include/spdlog/fmt/bundled/format.cc +++ b/include/spdlog/fmt/bundled/format.cc @@ -35,6 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include // for std::ptrdiff_t +#include #if defined(_WIN32) && defined(__MINGW32__) # include @@ -444,12 +445,12 @@ namespace fmt { typedef internal::NamedArg NamedArg; const NamedArg *named_arg = FMT_NULL; bool use_values = - args.type(ArgList::MAX_PACKED_ARGS - 1) == internal::Arg::NONE; + args.type(ArgList::MAX_PACKED_ARGS - 1) == internal::Arg::NONE_ARG; if (use_values) { for (unsigned i = 0;/*nothing*/; ++i) { internal::Arg::Type arg_type = args.type(i); switch (arg_type) { - case internal::Arg::NONE: + case internal::Arg::NONE_ARG: return; case internal::Arg::NAMED_ARG: named_arg = static_cast(args.values_[i].pointer); @@ -470,7 +471,7 @@ namespace fmt { } for (unsigned i = ArgList::MAX_PACKED_ARGS;/*nothing*/; ++i) { switch (args.args_[i].type) { - case internal::Arg::NONE: + case internal::Arg::NONE_ARG: return; case internal::Arg::NAMED_ARG: named_arg = static_cast(args.args_[i].pointer); @@ -493,7 +494,7 @@ namespace fmt { { Arg arg = args_[arg_index]; switch (arg.type) { - case Arg::NONE: + case Arg::NONE_ARG: error = "argument index out of range"; break; case Arg::NAMED_ARG: diff --git a/include/spdlog/fmt/bundled/format.h b/include/spdlog/fmt/bundled/format.h index e5e2e2ef..5dbc5684 100644 --- a/include/spdlog/fmt/bundled/format.h +++ b/include/spdlog/fmt/bundled/format.h @@ -1285,7 +1285,7 @@ struct Value enum Type { - NONE, NAMED_ARG, + NONE_ARG, NAMED_ARG, // Integer types should go first, INT, UINT, LONG_LONG, ULONG_LONG, BOOL, CHAR, LAST_INTEGER_TYPE = CHAR, // followed by floating-point types. @@ -1684,7 +1684,7 @@ class MakeArg: public Arg public: MakeArg() { - type = Arg::NONE; + type = Arg::NONE_ARG; } template @@ -1781,12 +1781,12 @@ public: { using internal::Arg; Arg arg; - bool use_values = type(MAX_PACKED_ARGS - 1) == Arg::NONE; + bool use_values = type(MAX_PACKED_ARGS - 1) == Arg::NONE_ARG; if (index < MAX_PACKED_ARGS) { Arg::Type arg_type = type(index); internal::Value &val = arg; - if (arg_type != Arg::NONE) + if (arg_type != Arg::NONE_ARG) val = use_values ? values_[index] : args_[index]; arg.type = arg_type; return arg; @@ -1795,12 +1795,12 @@ public: { // The index is greater than the number of arguments that can be stored // in values, so return a "none" argument. - arg.type = Arg::NONE; + arg.type = Arg::NONE_ARG; return arg; } for (unsigned i = MAX_PACKED_ARGS; i <= index; ++i) { - if (args_[i].type == Arg::NONE) + if (args_[i].type == Arg::NONE_ARG) return args_[i]; } return args_[index]; @@ -1961,7 +1961,7 @@ public: { switch (arg.type) { - case Arg::NONE: + case Arg::NONE_ARG: case Arg::NAMED_ARG: FMT_ASSERT(false, "invalid argument type"); break; @@ -2672,7 +2672,7 @@ static Value make(const T &value) template struct ArgArray { - typedef Arg Type[N + 1]; // +1 for the list end Arg::NONE + typedef Arg Type[N + 1]; // +1 for the list end Arg::NONE_ARG template static Arg make(const T &value)