kopia lustrzana https://github.com/Hamlib/Hamlib
Distinguish wanted from unwanted fall through instances
Compile with -Wimplicit-fallthrough; analyze the results. Define macro to mark valid fall through constructs. Mark all of the good ones, and fix the bad. Not available with all compilers - for those without the feature this commit does nothing.pull/1818/head
rodzic
a7c8c3fa9e
commit
6c372f981f
|
@ -73,6 +73,23 @@
|
||||||
#include <hamlib/riglist.h>
|
#include <hamlib/riglist.h>
|
||||||
//#include <hamlib/config.h>
|
//#include <hamlib/config.h>
|
||||||
|
|
||||||
|
/* Define macros for handling attributes, if the compiler implements them
|
||||||
|
* Should be available in c23-capable compilers, or c++11 ones
|
||||||
|
*/
|
||||||
|
// From ISO/IEC 9899:202y n3301 working draft
|
||||||
|
#ifndef __has_c_attribute
|
||||||
|
#define __has_c_attribute(x) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Macro to mark fallthrough as OK
|
||||||
|
// Squelch warnings if -Wimplicit-fallthrough added to CFLAGS
|
||||||
|
#if __has_c_attribute(fallthrough)
|
||||||
|
#define HL_FALLTHROUGH [[fallthrough]];
|
||||||
|
#else
|
||||||
|
/* Fall back */
|
||||||
|
#define HL_FALLTHROUGH
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup rig
|
* \addtogroup rig
|
||||||
* @{
|
* @{
|
||||||
|
|
|
@ -3393,6 +3393,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo)
|
||||||
rig_debug(RIG_DEBUG_ERR, "%s: unknown vfo '%s'\n", __func__,
|
rig_debug(RIG_DEBUG_ERR, "%s: unknown vfo '%s'\n", __func__,
|
||||||
rig_strvfo(rs->current_vfo));
|
rig_strvfo(rs->current_vfo));
|
||||||
}
|
}
|
||||||
|
HL_FALLTHROUGH // Fall into outer default
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (priv->x25cmdfails == 0 || priv_caps->x25x26_always)
|
if (priv->x25cmdfails == 0 || priv_caps->x25x26_always)
|
||||||
|
@ -9111,12 +9112,14 @@ static int icom_parse_spectrum_frame(RIG *rig, size_t length,
|
||||||
|
|
||||||
case SCOPE_MODE_FIXED:
|
case SCOPE_MODE_FIXED:
|
||||||
cache->spectrum_mode = RIG_SPECTRUM_MODE_FIXED;
|
cache->spectrum_mode = RIG_SPECTRUM_MODE_FIXED;
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
case SCOPE_MODE_SCROLL_C:
|
case SCOPE_MODE_SCROLL_C:
|
||||||
if (cache->spectrum_mode == RIG_SPECTRUM_MODE_NONE)
|
if (cache->spectrum_mode == RIG_SPECTRUM_MODE_NONE)
|
||||||
{
|
{
|
||||||
cache->spectrum_mode = RIG_SPECTRUM_MODE_CENTER_SCROLL;
|
cache->spectrum_mode = RIG_SPECTRUM_MODE_CENTER_SCROLL;
|
||||||
}
|
}
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
case SCOPE_MODE_SCROLL_F:
|
case SCOPE_MODE_SCROLL_F:
|
||||||
if (cache->spectrum_mode == RIG_SPECTRUM_MODE_NONE)
|
if (cache->spectrum_mode == RIG_SPECTRUM_MODE_NONE)
|
||||||
|
|
|
@ -5600,7 +5600,7 @@ int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg)
|
||||||
SNPRINTF(morsebuf, sizeof morsebuf, "KY2%s", m2);
|
SNPRINTF(morsebuf, sizeof morsebuf, "KY2%s", m2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* FALL THROUGH */
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* the command must consist of 28 bytes 0x20 padded */
|
/* the command must consist of 28 bytes 0x20 padded */
|
||||||
|
|
|
@ -1298,6 +1298,7 @@ static int get_freq_and_mode(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode,
|
||||||
|
|
||||||
case MD_CWN:
|
case MD_CWN:
|
||||||
*width = rig_passband_narrow(rig, RIG_MODE_CW);
|
*width = rig_passband_narrow(rig, RIG_MODE_CW);
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
case MD_CW:
|
case MD_CW:
|
||||||
*mode = RIG_MODE_CW;
|
*mode = RIG_MODE_CW;
|
||||||
|
@ -1305,6 +1306,7 @@ static int get_freq_and_mode(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode,
|
||||||
|
|
||||||
case MD_CWNR:
|
case MD_CWNR:
|
||||||
*width = rig_passband_narrow(rig, RIG_MODE_CW);
|
*width = rig_passband_narrow(rig, RIG_MODE_CW);
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
case MD_CWR:
|
case MD_CWR:
|
||||||
*mode = RIG_MODE_CWR;
|
*mode = RIG_MODE_CWR;
|
||||||
|
@ -1312,6 +1314,7 @@ static int get_freq_and_mode(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode,
|
||||||
|
|
||||||
case MD_AMN:
|
case MD_AMN:
|
||||||
*width = rig_passband_narrow(rig, RIG_MODE_AM);
|
*width = rig_passband_narrow(rig, RIG_MODE_AM);
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
case MD_AM:
|
case MD_AM:
|
||||||
*mode = RIG_MODE_AM;
|
*mode = RIG_MODE_AM;
|
||||||
|
@ -1319,6 +1322,7 @@ static int get_freq_and_mode(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode,
|
||||||
|
|
||||||
case MD_FMN:
|
case MD_FMN:
|
||||||
*width = rig_passband_narrow(rig, RIG_MODE_FM);
|
*width = rig_passband_narrow(rig, RIG_MODE_FM);
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
case MD_FM:
|
case MD_FM:
|
||||||
*mode = RIG_MODE_FM;
|
*mode = RIG_MODE_FM;
|
||||||
|
|
|
@ -794,6 +794,7 @@ static int ft920_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
|
||||||
{
|
{
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
case RIG_VFO_MEM: /* MEM TUNE or user doesn't care */
|
case RIG_VFO_MEM: /* MEM TUNE or user doesn't care */
|
||||||
case RIG_VFO_MAIN:
|
case RIG_VFO_MAIN:
|
||||||
|
@ -965,6 +966,7 @@ static int ft920_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
||||||
{
|
{
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
case RIG_VFO_MEM: /* MEM TUNE or user doesn't care */
|
case RIG_VFO_MEM: /* MEM TUNE or user doesn't care */
|
||||||
case RIG_VFO_MAIN:
|
case RIG_VFO_MAIN:
|
||||||
|
|
|
@ -4414,9 +4414,9 @@ int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
|
||||||
case RIG_METER_VDD: SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), format, 5);
|
case RIG_METER_VDD: SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), format, 5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
rig_debug(RIG_DEBUG_ERR, "%s: unknown val.i=%d\n", __func__, val.i);
|
rig_debug(RIG_DEBUG_ERR, "%s: unknown val.i=%d\n", __func__, val.i);
|
||||||
|
RETURNFUNC(-RIG_EINVAL);
|
||||||
default: RETURNFUNC(-RIG_EINVAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -408,8 +408,8 @@ int HAMLIB_API port_close(hamlib_port_t *p, rig_port_t port_type)
|
||||||
default:
|
default:
|
||||||
rig_debug(RIG_DEBUG_ERR, "%s(): Unknown port type %d\n",
|
rig_debug(RIG_DEBUG_ERR, "%s(): Unknown port type %d\n",
|
||||||
__func__, port_type);
|
__func__, port_type);
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
/* fall through */
|
|
||||||
case RIG_PORT_DEVICE:
|
case RIG_PORT_DEVICE:
|
||||||
ret = close(p->fd);
|
ret = close(p->fd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3611,8 +3611,8 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
|
||||||
{
|
{
|
||||||
ptt = RIG_PTT_ON;
|
ptt = RIG_PTT_ON;
|
||||||
}
|
}
|
||||||
|
HL_FALLTHROUGH
|
||||||
|
|
||||||
/* fall through */
|
|
||||||
case RIG_PTT_RIG_MICDATA:
|
case RIG_PTT_RIG_MICDATA:
|
||||||
if (caps->set_ptt == NULL)
|
if (caps->set_ptt == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -412,15 +412,25 @@ do {
|
||||||
hashv += keylen; \
|
hashv += keylen; \
|
||||||
switch ( _hj_k ) { \
|
switch ( _hj_k ) { \
|
||||||
case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \
|
case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \
|
case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \
|
case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \
|
case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \
|
case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \
|
case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 5: _hj_j += _hj_key[4]; \
|
case 5: _hj_j += _hj_key[4]; \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \
|
case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \
|
case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \
|
case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 1: _hj_i += _hj_key[0]; \
|
case 1: _hj_i += _hj_key[0]; \
|
||||||
} \
|
} \
|
||||||
HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
|
HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
|
||||||
|
@ -547,7 +557,9 @@ do { \
|
||||||
uint32_t _mur_k1=0; \
|
uint32_t _mur_k1=0; \
|
||||||
switch((keylen) & 3) { \
|
switch((keylen) & 3) { \
|
||||||
case 3: _mur_k1 ^= _mur_tail[2] << 16; \
|
case 3: _mur_k1 ^= _mur_tail[2] << 16; \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 2: _mur_k1 ^= _mur_tail[1] << 8; \
|
case 2: _mur_k1 ^= _mur_tail[1] << 8; \
|
||||||
|
HL_FALLTHROUGH \
|
||||||
case 1: _mur_k1 ^= _mur_tail[0]; \
|
case 1: _mur_k1 ^= _mur_tail[0]; \
|
||||||
_mur_k1 *= _mur_c1; \
|
_mur_k1 *= _mur_c1; \
|
||||||
_mur_k1 = MUR_ROTL32(_mur_k1,15); \
|
_mur_k1 = MUR_ROTL32(_mur_k1,15); \
|
||||||
|
|
Ładowanie…
Reference in New Issue