mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1050299: Wrap BlutoothInterface array initializaton in preprocessor macro, r=shuang
This patch fixes array initialization in the |Convert| functions of |BluetoothInterface|. Designated initializers are not supported by all compilers, so we wrap them into a macro and only used them when possible.
This commit is contained in:
parent
8b90044343
commit
7a7fa414f1
@ -13,6 +13,16 @@
|
||||
#include "nsThreadUtils.h"
|
||||
#include "nsXULAppAPI.h"
|
||||
|
||||
#if MOZ_IS_GCC && MOZ_GCC_VERSION_AT_LEAST(4, 7, 0)
|
||||
/* use designated array initializers if supported */
|
||||
#define CONVERT(in_, out_) \
|
||||
[in_] = out_
|
||||
#else
|
||||
/* otherwise init array element by position */
|
||||
#define CONVERT(in_, out_) \
|
||||
out_
|
||||
#endif
|
||||
|
||||
BEGIN_BLUETOOTH_NAMESPACE
|
||||
|
||||
template<class T>
|
||||
@ -27,17 +37,17 @@ static nsresult
|
||||
Convert(bt_status_t aIn, BluetoothStatus& aOut)
|
||||
{
|
||||
static const BluetoothStatus sStatus[] = {
|
||||
[BT_STATUS_SUCCESS] = STATUS_SUCCESS,
|
||||
[BT_STATUS_FAIL] = STATUS_FAIL,
|
||||
[BT_STATUS_NOT_READY] = STATUS_NOT_READY,
|
||||
[BT_STATUS_NOMEM] = STATUS_NOMEM,
|
||||
[BT_STATUS_BUSY] = STATUS_BUSY,
|
||||
[BT_STATUS_DONE] = STATUS_DONE,
|
||||
[BT_STATUS_UNSUPPORTED] = STATUS_UNSUPPORTED,
|
||||
[BT_STATUS_PARM_INVALID] = STATUS_PARM_INVALID,
|
||||
[BT_STATUS_UNHANDLED] = STATUS_UNHANDLED,
|
||||
[BT_STATUS_AUTH_FAILURE] = STATUS_AUTH_FAILURE,
|
||||
[BT_STATUS_RMT_DEV_DOWN] = STATUS_RMT_DEV_DOWN
|
||||
CONVERT(BT_STATUS_SUCCESS, STATUS_SUCCESS),
|
||||
CONVERT(BT_STATUS_FAIL, STATUS_FAIL),
|
||||
CONVERT(BT_STATUS_NOT_READY, STATUS_NOT_READY),
|
||||
CONVERT(BT_STATUS_NOMEM, STATUS_NOMEM),
|
||||
CONVERT(BT_STATUS_BUSY, STATUS_BUSY),
|
||||
CONVERT(BT_STATUS_DONE, STATUS_DONE),
|
||||
CONVERT(BT_STATUS_UNSUPPORTED, STATUS_UNSUPPORTED),
|
||||
CONVERT(BT_STATUS_PARM_INVALID, STATUS_PARM_INVALID),
|
||||
CONVERT(BT_STATUS_UNHANDLED, STATUS_UNHANDLED),
|
||||
CONVERT(BT_STATUS_AUTH_FAILURE, STATUS_AUTH_FAILURE),
|
||||
CONVERT(BT_STATUS_RMT_DEV_DOWN, STATUS_RMT_DEV_DOWN)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sStatus)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -72,8 +82,8 @@ static nsresult
|
||||
Convert(bool aIn, bt_scan_mode_t& aOut)
|
||||
{
|
||||
static const bt_scan_mode_t sScanMode[] = {
|
||||
[false] = BT_SCAN_MODE_CONNECTABLE,
|
||||
[true] = BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE
|
||||
CONVERT(false, BT_SCAN_MODE_CONNECTABLE),
|
||||
CONVERT(true, BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sScanMode)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -238,10 +248,10 @@ Convert(BluetoothSocketType aIn, btsock_type_t& aOut)
|
||||
// by gcc. Start values in |BluetoothSocketType| at index
|
||||
// 0 to fix this problem.
|
||||
static const btsock_type_t sSocketType[] = {
|
||||
[0] = static_cast<btsock_type_t>(0), // invalid, [0] required by gcc
|
||||
[BluetoothSocketType::RFCOMM] = BTSOCK_RFCOMM,
|
||||
[BluetoothSocketType::SCO] = BTSOCK_SCO,
|
||||
[BluetoothSocketType::L2CAP] = BTSOCK_L2CAP,
|
||||
CONVERT(0, static_cast<btsock_type_t>(0)), // invalid, [0] required by gcc
|
||||
CONVERT(BluetoothSocketType::RFCOMM, BTSOCK_RFCOMM),
|
||||
CONVERT(BluetoothSocketType::SCO, BTSOCK_SCO),
|
||||
CONVERT(BluetoothSocketType::L2CAP, BTSOCK_L2CAP),
|
||||
// EL2CAP is not supported by Bluedroid
|
||||
};
|
||||
if (aIn == BluetoothSocketType::EL2CAP ||
|
||||
@ -256,8 +266,8 @@ static nsresult
|
||||
Convert(BluetoothHandsfreeAtResponse aIn, bthf_at_response_t& aOut)
|
||||
{
|
||||
static const bthf_at_response_t sAtResponse[] = {
|
||||
[HFP_AT_RESPONSE_ERROR] = BTHF_AT_RESPONSE_ERROR,
|
||||
[HFP_AT_RESPONSE_OK] = BTHF_AT_RESPONSE_OK
|
||||
CONVERT(HFP_AT_RESPONSE_ERROR, BTHF_AT_RESPONSE_ERROR),
|
||||
CONVERT(HFP_AT_RESPONSE_OK, BTHF_AT_RESPONSE_OK)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sAtResponse)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -270,8 +280,9 @@ static nsresult
|
||||
Convert(BluetoothHandsfreeCallAddressType aIn, bthf_call_addrtype_t& aOut)
|
||||
{
|
||||
static const bthf_call_addrtype_t sCallAddressType[] = {
|
||||
[HFP_CALL_ADDRESS_TYPE_UNKNOWN] = BTHF_CALL_ADDRTYPE_UNKNOWN,
|
||||
[HFP_CALL_ADDRESS_TYPE_INTERNATIONAL] = BTHF_CALL_ADDRTYPE_INTERNATIONAL
|
||||
CONVERT(HFP_CALL_ADDRESS_TYPE_UNKNOWN, BTHF_CALL_ADDRTYPE_UNKNOWN),
|
||||
CONVERT(HFP_CALL_ADDRESS_TYPE_INTERNATIONAL,
|
||||
BTHF_CALL_ADDRTYPE_INTERNATIONAL)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sCallAddressType)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -284,8 +295,8 @@ static nsresult
|
||||
Convert(BluetoothHandsfreeCallDirection aIn, bthf_call_direction_t& aOut)
|
||||
{
|
||||
static const bthf_call_direction_t sCallDirection[] = {
|
||||
[HFP_CALL_DIRECTION_OUTGOING] = BTHF_CALL_DIRECTION_OUTGOING,
|
||||
[HFP_CALL_DIRECTION_INCOMING] = BTHF_CALL_DIRECTION_INCOMING
|
||||
CONVERT(HFP_CALL_DIRECTION_OUTGOING, BTHF_CALL_DIRECTION_OUTGOING),
|
||||
CONVERT(HFP_CALL_DIRECTION_INCOMING, BTHF_CALL_DIRECTION_INCOMING)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sCallDirection)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -298,9 +309,9 @@ static nsresult
|
||||
Convert(BluetoothHandsfreeCallMode aIn, bthf_call_mode_t& aOut)
|
||||
{
|
||||
static const bthf_call_mode_t sCallMode[] = {
|
||||
[HFP_CALL_MODE_VOICE] = BTHF_CALL_TYPE_VOICE,
|
||||
[HFP_CALL_MODE_DATA] = BTHF_CALL_TYPE_DATA,
|
||||
[HFP_CALL_MODE_FAX] = BTHF_CALL_TYPE_FAX
|
||||
CONVERT(HFP_CALL_MODE_VOICE, BTHF_CALL_TYPE_VOICE),
|
||||
CONVERT(HFP_CALL_MODE_DATA, BTHF_CALL_TYPE_DATA),
|
||||
CONVERT(HFP_CALL_MODE_FAX, BTHF_CALL_TYPE_FAX)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sCallMode)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -313,8 +324,8 @@ static nsresult
|
||||
Convert(BluetoothHandsfreeCallMptyType aIn, bthf_call_mpty_type_t& aOut)
|
||||
{
|
||||
static const bthf_call_mpty_type_t sCallMptyType[] = {
|
||||
[HFP_CALL_MPTY_TYPE_SINGLE] = BTHF_CALL_MPTY_TYPE_SINGLE,
|
||||
[HFP_CALL_MPTY_TYPE_MULTI] = BTHF_CALL_MPTY_TYPE_MULTI
|
||||
CONVERT(HFP_CALL_MPTY_TYPE_SINGLE, BTHF_CALL_MPTY_TYPE_SINGLE),
|
||||
CONVERT(HFP_CALL_MPTY_TYPE_MULTI, BTHF_CALL_MPTY_TYPE_MULTI)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sCallMptyType)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -327,13 +338,13 @@ static nsresult
|
||||
Convert(BluetoothHandsfreeCallState aIn, bthf_call_state_t& aOut)
|
||||
{
|
||||
static const bthf_call_state_t sCallState[] = {
|
||||
[HFP_CALL_STATE_ACTIVE] = BTHF_CALL_STATE_ACTIVE,
|
||||
[HFP_CALL_STATE_HELD] = BTHF_CALL_STATE_HELD,
|
||||
[HFP_CALL_STATE_DIALING] = BTHF_CALL_STATE_DIALING,
|
||||
[HFP_CALL_STATE_ALERTING] = BTHF_CALL_STATE_ALERTING,
|
||||
[HFP_CALL_STATE_INCOMING] = BTHF_CALL_STATE_INCOMING,
|
||||
[HFP_CALL_STATE_WAITING] = BTHF_CALL_STATE_WAITING,
|
||||
[HFP_CALL_STATE_IDLE] = BTHF_CALL_STATE_IDLE
|
||||
CONVERT(HFP_CALL_STATE_ACTIVE, BTHF_CALL_STATE_ACTIVE),
|
||||
CONVERT(HFP_CALL_STATE_HELD, BTHF_CALL_STATE_HELD),
|
||||
CONVERT(HFP_CALL_STATE_DIALING, BTHF_CALL_STATE_DIALING),
|
||||
CONVERT(HFP_CALL_STATE_ALERTING, BTHF_CALL_STATE_ALERTING),
|
||||
CONVERT(HFP_CALL_STATE_INCOMING, BTHF_CALL_STATE_INCOMING),
|
||||
CONVERT(HFP_CALL_STATE_WAITING, BTHF_CALL_STATE_WAITING),
|
||||
CONVERT(HFP_CALL_STATE_IDLE, BTHF_CALL_STATE_IDLE)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sCallState)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -346,8 +357,8 @@ static nsresult
|
||||
Convert(BluetoothHandsfreeNetworkState aIn, bthf_network_state_t& aOut)
|
||||
{
|
||||
static const bthf_network_state_t sNetworkState[] = {
|
||||
[HFP_NETWORK_STATE_NOT_AVAILABLE] = BTHF_NETWORK_STATE_NOT_AVAILABLE,
|
||||
[HFP_NETWORK_STATE_AVAILABLE] = BTHF_NETWORK_STATE_AVAILABLE
|
||||
CONVERT(HFP_NETWORK_STATE_NOT_AVAILABLE, BTHF_NETWORK_STATE_NOT_AVAILABLE),
|
||||
CONVERT(HFP_NETWORK_STATE_AVAILABLE, BTHF_NETWORK_STATE_AVAILABLE)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sNetworkState)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -360,8 +371,8 @@ static nsresult
|
||||
Convert(BluetoothHandsfreeServiceType aIn, bthf_service_type_t& aOut)
|
||||
{
|
||||
static const bthf_service_type_t sServiceType[] = {
|
||||
[HFP_SERVICE_TYPE_HOME] = BTHF_SERVICE_TYPE_HOME,
|
||||
[HFP_SERVICE_TYPE_ROAMING] = BTHF_SERVICE_TYPE_ROAMING
|
||||
CONVERT(HFP_SERVICE_TYPE_HOME, BTHF_SERVICE_TYPE_HOME),
|
||||
CONVERT(HFP_SERVICE_TYPE_ROAMING, BTHF_SERVICE_TYPE_ROAMING)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sServiceType)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -374,8 +385,8 @@ static nsresult
|
||||
Convert(BluetoothHandsfreeVolumeType aIn, bthf_volume_type_t& aOut)
|
||||
{
|
||||
static const bthf_volume_type_t sVolumeType[] = {
|
||||
[HFP_VOLUME_TYPE_SPEAKER] = BTHF_VOLUME_TYPE_SPK,
|
||||
[HFP_VOLUME_TYPE_MICROPHONE] = BTHF_VOLUME_TYPE_MIC
|
||||
CONVERT(HFP_VOLUME_TYPE_SPEAKER, BTHF_VOLUME_TYPE_SPK),
|
||||
CONVERT(HFP_VOLUME_TYPE_MICROPHONE, BTHF_VOLUME_TYPE_MIC)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sVolumeType)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -389,11 +400,11 @@ static nsresult
|
||||
Convert(ControlPlayStatus aIn, btrc_play_status_t& aOut)
|
||||
{
|
||||
static const btrc_play_status_t sPlayStatus[] = {
|
||||
[PLAYSTATUS_STOPPED] = BTRC_PLAYSTATE_STOPPED,
|
||||
[PLAYSTATUS_PLAYING] = BTRC_PLAYSTATE_PLAYING,
|
||||
[PLAYSTATUS_PAUSED] = BTRC_PLAYSTATE_PAUSED,
|
||||
[PLAYSTATUS_FWD_SEEK] = BTRC_PLAYSTATE_FWD_SEEK,
|
||||
[PLAYSTATUS_REV_SEEK] = BTRC_PLAYSTATE_REV_SEEK
|
||||
CONVERT(PLAYSTATUS_STOPPED, BTRC_PLAYSTATE_STOPPED),
|
||||
CONVERT(PLAYSTATUS_PLAYING, BTRC_PLAYSTATE_PLAYING),
|
||||
CONVERT(PLAYSTATUS_PAUSED, BTRC_PLAYSTATE_PAUSED),
|
||||
CONVERT(PLAYSTATUS_FWD_SEEK, BTRC_PLAYSTATE_FWD_SEEK),
|
||||
CONVERT(PLAYSTATUS_REV_SEEK, BTRC_PLAYSTATE_REV_SEEK)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sPlayStatus)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -406,10 +417,10 @@ static nsresult
|
||||
Convert(enum BluetoothAvrcpPlayerAttribute aIn, btrc_player_attr_t& aOut)
|
||||
{
|
||||
static const btrc_player_attr_t sPlayerAttr[] = {
|
||||
[AVRCP_PLAYER_ATTRIBUTE_EQUALIZER] = BTRC_PLAYER_ATTR_EQUALIZER,
|
||||
[AVRCP_PLAYER_ATTRIBUTE_REPEAT] = BTRC_PLAYER_ATTR_REPEAT,
|
||||
[AVRCP_PLAYER_ATTRIBUTE_SHUFFLE] = BTRC_PLAYER_ATTR_SHUFFLE,
|
||||
[AVRCP_PLAYER_ATTRIBUTE_SCAN] = BTRC_PLAYER_ATTR_SCAN
|
||||
CONVERT(AVRCP_PLAYER_ATTRIBUTE_EQUALIZER, BTRC_PLAYER_ATTR_EQUALIZER),
|
||||
CONVERT(AVRCP_PLAYER_ATTRIBUTE_REPEAT, BTRC_PLAYER_ATTR_REPEAT),
|
||||
CONVERT(AVRCP_PLAYER_ATTRIBUTE_SHUFFLE, BTRC_PLAYER_ATTR_SHUFFLE),
|
||||
CONVERT(AVRCP_PLAYER_ATTRIBUTE_SCAN, BTRC_PLAYER_ATTR_SCAN)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sPlayerAttr)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -422,11 +433,11 @@ static nsresult
|
||||
Convert(enum BluetoothAvrcpStatus aIn, btrc_status_t& aOut)
|
||||
{
|
||||
static const btrc_status_t sStatus[] = {
|
||||
[AVRCP_STATUS_BAD_COMMAND] = BTRC_STS_BAD_CMD,
|
||||
[AVRCP_STATUS_BAD_PARAMETER] = BTRC_STS_BAD_PARAM,
|
||||
[AVRCP_STATUS_NOT_FOUND] = BTRC_STS_NOT_FOUND,
|
||||
[AVRCP_STATUS_INTERNAL_ERROR] = BTRC_STS_INTERNAL_ERR,
|
||||
[AVRCP_STATUS_SUCCESS] = BTRC_STS_NO_ERROR
|
||||
CONVERT(AVRCP_STATUS_BAD_COMMAND, BTRC_STS_BAD_CMD),
|
||||
CONVERT(AVRCP_STATUS_BAD_PARAMETER, BTRC_STS_BAD_PARAM),
|
||||
CONVERT(AVRCP_STATUS_NOT_FOUND, BTRC_STS_NOT_FOUND),
|
||||
CONVERT(AVRCP_STATUS_INTERNAL_ERROR, BTRC_STS_INTERNAL_ERR),
|
||||
CONVERT(AVRCP_STATUS_SUCCESS, BTRC_STS_NO_ERROR)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sStatus)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -439,12 +450,12 @@ static nsresult
|
||||
Convert(enum BluetoothAvrcpEvent aIn, btrc_event_id_t& aOut)
|
||||
{
|
||||
static const btrc_event_id_t sEventId[] = {
|
||||
[AVRCP_EVENT_PLAY_STATUS_CHANGED] = BTRC_EVT_PLAY_STATUS_CHANGED,
|
||||
[AVRCP_EVENT_TRACK_CHANGE] = BTRC_EVT_TRACK_CHANGE,
|
||||
[AVRCP_EVENT_TRACK_REACHED_END] = BTRC_EVT_TRACK_REACHED_END,
|
||||
[AVRCP_EVENT_TRACK_REACHED_START] = BTRC_EVT_TRACK_REACHED_START,
|
||||
[AVRCP_EVENT_PLAY_POS_CHANGED] = BTRC_EVT_PLAY_POS_CHANGED,
|
||||
[AVRCP_EVENT_APP_SETTINGS_CHANGED] = BTRC_EVT_APP_SETTINGS_CHANGED
|
||||
CONVERT(AVRCP_EVENT_PLAY_STATUS_CHANGED, BTRC_EVT_PLAY_STATUS_CHANGED),
|
||||
CONVERT(AVRCP_EVENT_TRACK_CHANGE, BTRC_EVT_TRACK_CHANGE),
|
||||
CONVERT(AVRCP_EVENT_TRACK_REACHED_END, BTRC_EVT_TRACK_REACHED_END),
|
||||
CONVERT(AVRCP_EVENT_TRACK_REACHED_START, BTRC_EVT_TRACK_REACHED_START),
|
||||
CONVERT(AVRCP_EVENT_PLAY_POS_CHANGED, BTRC_EVT_PLAY_POS_CHANGED),
|
||||
CONVERT(AVRCP_EVENT_APP_SETTINGS_CHANGED, BTRC_EVT_APP_SETTINGS_CHANGED)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sEventId)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -457,8 +468,8 @@ static nsresult
|
||||
Convert(enum BluetoothAvrcpNotification aIn, btrc_notification_type_t& aOut)
|
||||
{
|
||||
static const btrc_notification_type_t sNotificationType[] = {
|
||||
[AVRCP_NTF_INTERIM] = BTRC_NOTIFICATION_TYPE_INTERIM,
|
||||
[AVRCP_NTF_CHANGED] = BTRC_NOTIFICATION_TYPE_CHANGED
|
||||
CONVERT(AVRCP_NTF_INTERIM, BTRC_NOTIFICATION_TYPE_INTERIM),
|
||||
CONVERT(AVRCP_NTF_CHANGED, BTRC_NOTIFICATION_TYPE_CHANGED)
|
||||
};
|
||||
if (aIn >= MOZ_ARRAY_LENGTH(sNotificationType)) {
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
|
Loading…
Reference in New Issue
Block a user