From abe2ce9ce95c002197cf660b5eb856988dfc9b16 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Mon, 9 May 2016 08:46:14 +0200 Subject: [PATCH] oc-payload.cc: fix signed/unsigned char issues When char == signed char, conversion to and from uint_8 fails in some places. Started to happen recently in Ostro OS, perhaps because of a compiler update. The conversion of sid is straightforward. OCSecurityPayload->securityData is less obvious: it is an uint_8 pointer, which seems to end up getting converted to a boolean instead of a character string. The typecast unfortunately has to be done inside the macro, reducing its type safety. ../src/structures/oc-payload.cc: In function 'v8::Local js_OCDiscoveryPayload(OCDiscoveryPayload*)': ../src/structures/oc-payload.cc:240:30: error: invalid conversion from 'char*' to 'uint8_t* {aka unsigned char*}' [-fpermissive] js_SID(payload->sid)); In file included from ../src/structures/oc-payload.cc:18:0: ../src/structures/oc-payload.cc: In function 'v8::Local js_OCSecurityPayload(OCSecurityPayload*)': ../src/structures/../common.h:63:45: error: 'Nan::imp::FactoryBase::return_t {aka class v8::Local}' has no member named 'ToLocalChecked' Nan::New((source)->memberName).ToLocalChecked()); \ ^ ../src/structures/oc-payload.cc:312:3: note: in expansion of macro 'SET_STRING_IF_NOT_NULL' SET_STRING_IF_NOT_NULL(returnValue, payload, securityData); Signed-off-by: Patrick Ohly --- src/common.h | 2 +- src/structures/oc-payload.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common.h b/src/common.h index b0b5c599..60c89fe7 100644 --- a/src/common.h +++ b/src/common.h @@ -60,7 +60,7 @@ #define SET_STRING_IF_NOT_NULL(destination, source, memberName) \ if ((source)->memberName) { \ Nan::Set((destination), Nan::New(#memberName).ToLocalChecked(), \ - Nan::New((source)->memberName).ToLocalChecked()); \ + Nan::New(reinterpret_cast((source)->memberName)).ToLocalChecked()); \ } #define SET_VALUE_ON_OBJECT(destination, type, source, memberName) \ diff --git a/src/structures/oc-payload.cc b/src/structures/oc-payload.cc index d65bedd2..fa31fdaa 100644 --- a/src/structures/oc-payload.cc +++ b/src/structures/oc-payload.cc @@ -237,7 +237,7 @@ static Local js_OCDiscoveryPayload(OCDiscoveryPayload *payload) { if (payload->sid) { Nan::Set(returnValue, Nan::New("sid").ToLocalChecked(), - js_SID(payload->sid)); + js_SID(reinterpret_cast(payload->sid))); } // Count the resources @@ -266,7 +266,7 @@ static Local js_OCDevicePayload(OCDevicePayload *payload) { if (payload->sid) { Nan::Set(returnValue, Nan::New("sid").ToLocalChecked(), - js_SID(payload->sid)); + js_SID(reinterpret_cast(payload->sid))); } SET_STRING_IF_NOT_NULL(returnValue, payload, deviceName);