]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
build: Fixes for gcc 5 compilation 66/3266/3
authorGeorge Joseph <george.joseph@fairview5.com>
Mon, 6 Apr 2015 18:58:30 +0000 (18:58 +0000)
committerJoshua Colp <jcolp@digium.com>
Thu, 21 Jul 2016 12:35:14 +0000 (07:35 -0500)
These are fixes for compilation under gcc 5.0...

chan_sip.c:    In parse_request needed to make 'lim' unsigned.
inline_api.h:  Needed to add a check for '__GNUC_STDC_INLINE__' to detect C99
               inline semantics (same as clang).
ccss.c:        In ast_cc_set_parm, needed to fix weird comparison.
dsp.c:         Needed to work around a possible compiler bug.  It was throwing
               an array-bounds error but neither
               sgriepentrog, rmudgett nor I could figure out why.
manager.c:     In action_atxfer, needed to correct an array allocation.

This patch will go to 11, 13, trunk.

Review: https://reviewboard.asterisk.org/r/4581/
Reported-by: Jeffrey Ollie
Tested-by: George Joseph
ASTERISK-24932 #close

Change-Id: I967d296cdf2c7834a2bdffd401b077a8a968d09b

channels/chan_sip.c
main/ccss.c
main/dsp.c
main/manager.c

index 80f1189dda3339dbbcd50191ad58f7e4a24dd7c2..a7cfc5b7372949f288ae886789f97bbe5ebc2967 100644 (file)
@@ -9459,7 +9459,8 @@ static int parse_request(struct sip_request *req)
 {
        char *c = req->data->str;
        ptrdiff_t *dst = req->header;
-       int i = 0, lim = SIP_MAX_HEADERS - 1;
+       int i = 0;
+       unsigned int lim = SIP_MAX_HEADERS - 1;
        unsigned int skipping_headers = 0;
        ptrdiff_t current_header_offset = 0;
        char *previous_header = "";
index b1585312ef91d2c276adf9c82deb69bd8e65424e..46def8fffe4be9e9b11f533a8315bfc3e1087721 100644 (file)
@@ -813,7 +813,7 @@ int ast_cc_set_param(struct ast_cc_config_params *params, const char * const nam
                return 0;
        }
 
-       if (!sscanf(value, "%30u", &value_as_uint) == 1) {
+       if (sscanf(value, "%30u", &value_as_uint) != 1) {
                return -1;
        }
 
index ec5e09b7dc7cac84337a2acbbfc5b4ce87560d83..f0ace1092011a3338f123e21a4f1d8001a764d91 100644 (file)
@@ -102,9 +102,11 @@ static struct progalias {
        { "uk", PROG_MODE_UK },
 };
 
+#define FREQ_ARRAY_SIZE 7
+
 static struct progress {
        enum gsamp_size size;
-       int freqs[7];
+       int freqs[FREQ_ARRAY_SIZE];
 } modes[] = {
        { GSAMP_SIZE_NA, { 350, 440, 480, 620, 950, 1400, 1800 } },     /*!< North America */
        { GSAMP_SIZE_CR, { 425 } },                                     /*!< Costa Rica, Brazil */
@@ -391,7 +393,7 @@ struct ast_dsp {
        struct ast_dsp_busy_pattern busy_cadence;
        int historicnoise[DSP_HISTORY];
        int historicsilence[DSP_HISTORY];
-       goertzel_state_t freqs[7];
+       goertzel_state_t freqs[FREQ_ARRAY_SIZE];
        int freqcount;
        int gsamps;
        enum gsamp_size gsamp_size;
@@ -1036,6 +1038,8 @@ static int __ast_dsp_call_progress(struct ast_dsp *dsp, short *s, int len)
        int pass;
        int newstate = DSP_TONE_STATE_SILENCE;
        int res = 0;
+       int freqcount = dsp->freqcount > FREQ_ARRAY_SIZE ? FREQ_ARRAY_SIZE : dsp->freqcount;
+
        while (len) {
                /* Take the lesser of the number of samples we need and what we have */
                pass = len;
@@ -1043,7 +1047,7 @@ static int __ast_dsp_call_progress(struct ast_dsp *dsp, short *s, int len)
                        pass = dsp->gsamp_size - dsp->gsamps;
                }
                for (x = 0; x < pass; x++) {
-                       for (y = 0; y < dsp->freqcount; y++) {
+                       for (y = 0; y < freqcount; y++) {
                                goertzel_sample(&dsp->freqs[y], s[x]);
                        }
                        dsp->genergy += s[x] * s[x];
@@ -1052,8 +1056,8 @@ static int __ast_dsp_call_progress(struct ast_dsp *dsp, short *s, int len)
                dsp->gsamps += pass;
                len -= pass;
                if (dsp->gsamps == dsp->gsamp_size) {
-                       float hz[7];
-                       for (y = 0; y < 7; y++) {
+                       float hz[FREQ_ARRAY_SIZE];
+                       for (y = 0; y < FREQ_ARRAY_SIZE; y++) {
                                hz[y] = goertzel_result(&dsp->freqs[y]);
                        }
                        switch (dsp->progmode) {
@@ -1652,7 +1656,7 @@ static void ast_dsp_prog_reset(struct ast_dsp *dsp)
 
        dsp->gsamp_size = modes[dsp->progmode].size;
        dsp->gsamps = 0;
-       for (x = 0; x < ARRAY_LEN(modes[dsp->progmode].freqs); x++) {
+       for (x = 0; x < FREQ_ARRAY_SIZE; x++) {
                if (modes[dsp->progmode].freqs[x]) {
                        goertzel_init(&dsp->freqs[x], (float)modes[dsp->progmode].freqs[x], dsp->gsamp_size, dsp->sample_rate);
                        max = x + 1;
@@ -1678,6 +1682,7 @@ static struct ast_dsp *__ast_dsp_new(unsigned int sample_rate)
                dsp->digitmode = DSP_DIGITMODE_DTMF;
                dsp->faxmode = DSP_FAXMODE_DETECT_CNG;
                dsp->sample_rate = sample_rate;
+               dsp->freqcount = 0;
                /* Initialize digit detector */
                ast_digit_detect_init(&dsp->digit_state, dsp->digitmode & DSP_DIGITMODE_MF, dsp->sample_rate);
                dsp->display_inband_dtmf_warning = 1;
index 23f1595f5e638d29f752f5dfe1dec581a7a021b5..2e59ae61233bcda3472939e44759b927151688ba 100644 (file)
@@ -3940,7 +3940,7 @@ static int action_atxfer(struct mansession *s, const struct message *m)
 static int check_blacklist(const char *cmd)
 {
        char *cmd_copy, *cur_cmd;
-       char *cmd_words[MAX_BLACKLIST_CMD_LEN] = { NULL, };
+       char *cmd_words[AST_MAX_CMD_LEN] = { NULL, };
        int i;
 
        cmd_copy = ast_strdupa(cmd);