#include "common/extension.h"
#include "common/logger.h"
#include "common/platform_exception.h"
+#include "common/scope_exit.h"
#include "common/tools.h"
#include "nfc/aid_data.h"
#include "nfc/defs.h"
PlatformResult NFCAdapter::GetCachedMessage(picojson::object& out) {
ScopeLogger();
nfc_ndef_message_h message_handle = NULL;
+ SCOPE_EXIT { NFCMessageUtils::RemoveMessageHandle(message_handle); };
int result = nfc_manager_get_cached_message(&message_handle);
if (NFC_ERROR_INVALID_NDEF_MESSAGE == result || NFC_ERROR_NO_NDEF_MESSAGE == result) {
LoggerE("Error: %d", result);
- NFCMessageUtils::RemoveMessageHandle(message_handle);
+
return PlatformResult(ErrorCode::NO_ERROR);
}
if (NFC_ERROR_NONE != result) {
LoggerE("Failed to get cached message: %d", result);
- NFCMessageUtils::RemoveMessageHandle(message_handle);
return NFCUtil::CodeToResult(result, "Failed to get cached message");
}
unsigned char* raw_data = NULL;
if (NFC_ERROR_NONE != nfc_ndef_message_get_rawdata(message_handle, &raw_data, &size)) {
LoggerE("Unknown error while getting message.");
free(raw_data);
- NFCMessageUtils::RemoveMessageHandle(message_handle);
return PlatformResult(ErrorCode::NO_ERROR);
}
PlatformResult ret = NFCMessageUtils::ReportNdefMessageFromData(raw_data, size, out);
free(raw_data);
if (ret.IsError()) {
LoggerE("Error: %s", ret.message().c_str());
- NFCMessageUtils::RemoveMessageHandle(message_handle);
return ret;
}
- NFCMessageUtils::RemoveMessageHandle(message_handle);
return PlatformResult(ErrorCode::NO_ERROR);
}