diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 33abd7cf81cf4c1361ae7388ede6df2f2f457620..b24a904b4895b3f8a59bfc257fedf88e9a927b78 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -2843,7 +2843,9 @@ static int retrieve_file(char *dir, int msgnum) } } } - truncate(full_fn, fdlen); + if (truncate(full_fn, fdlen) < 0) { + ast_log(LOG_WARNING, "Unable to truncate '%s': %s\n", full_fn, strerror(errno)); + } } } else { res = SQLGetData(stmt, x + 1, SQL_CHAR, rowdata, sizeof(rowdata), NULL); diff --git a/channels/chan_features.c b/channels/chan_features.c index 5da503f4cfcce7d0d6b0fa6e06935697ae28e41b..49400ad60bd94159136d1b0acf96f07c67f6bbe1 100644 --- a/channels/chan_features.c +++ b/channels/chan_features.c @@ -449,7 +449,11 @@ static struct ast_channel *features_new(struct feature_pvt *p, int state, int id for (x=1;x<4;x++) { if (b2) ast_free(b2); - asprintf(&b2, "%s/%s-%d", p->tech, p->dest, x); + if (asprintf(&b2, "%s/%s-%d", p->tech, p->dest, x) < 0) { + ast_log(LOG_WARNING, "Unable to create channel name: %s\n", strerror(errno)); + b2 = NULL; + continue; + } for (y=0;y<3;y++) { if (y == idx) continue; diff --git a/include/asterisk/stringfields.h b/include/asterisk/stringfields.h index 4b18474154f76aba655f57382e6db630e9fcde47..20597a5913d51ff4137599cf070c6a78eccaba65 100644 --- a/include/asterisk/stringfields.h +++ b/include/asterisk/stringfields.h @@ -255,12 +255,16 @@ int __ast_string_field_init(struct ast_string_field_mgr *mgr, const char *__d__ = (data); \ size_t __dlen__ = (__d__) ? strlen(__d__) + 1 : 1; \ const char **__p__ = (const char **) (ptr); \ + char *__q__; \ if (__dlen__ == 1) \ *__p__ = __ast_string_field_empty; \ - else if (!__ast_string_field_ptr_grow(&(x)->__field_mgr, __dlen__, ptr)) \ - memcpy((char *) *__p__, __d__, __dlen__); \ - else if ((*__p__ = __ast_string_field_alloc_space(&(x)->__field_mgr, &(x)->__field_mgr_pool, __dlen__))) \ - memcpy((char *) *__p__, __d__, __dlen__); \ + else if (!__ast_string_field_ptr_grow(&(x)->__field_mgr, __dlen__, ptr)) { \ + __q__ = (char *) *__p__; \ + memcpy(__q__, __d__, __dlen__); \ + } else if ((*__p__ = __ast_string_field_alloc_space(&(x)->__field_mgr, &(x)->__field_mgr_pool, __dlen__))) { \ + __q__ = (char *) *__p__; \ + memcpy(__q__, __d__, __dlen__); \ + } \ } while (0) /*! diff --git a/main/cli.c b/main/cli.c index 6152867c12c63e0d4050677d10930ad5742cb43a..c4ffd392c6167821ddec6b700ae1e95ecdd65a59 100644 --- a/main/cli.c +++ b/main/cli.c @@ -1769,7 +1769,8 @@ static int __ast_cli_unregister(struct ast_cli_entry *e, struct ast_cli_entry *e e->_full_cmd = NULL; if (e->handler) { /* this is a new-style entry. Reset fields and free memory. */ - memset((char **)(e->cmda), '\0', sizeof(e->cmda)); + char *cmda = (char *) e->cmda; + memset(cmda, '\0', sizeof(e->cmda)); ast_free(e->command); e->command = NULL; e->usage = NULL; diff --git a/main/frame.c b/main/frame.c index 35bb47fff154afd5acb71e4a8a87d788866c699d..8c0982b8c0bff594ce6d27d7ed0b6a046f61f017 100644 --- a/main/frame.c +++ b/main/frame.c @@ -478,9 +478,12 @@ struct ast_frame *ast_frdup(const struct ast_frame *f) memcpy(out->data.ptr, f->data.ptr, out->datalen); } if (srclen > 0) { + /* This may seem a little strange, but it's to avoid a gcc (4.2.4) compiler warning */ + char *src; out->src = buf + sizeof(*out) + AST_FRIENDLY_OFFSET + f->datalen; + src = (char *) out->src; /* Must have space since we allocated for it */ - strcpy((char *)out->src, f->src); + strcpy(src, f->src); } ast_copy_flags(out, f, AST_FRFLAG_HAS_TIMING_INFO); out->ts = f->ts; diff --git a/main/pbx.c b/main/pbx.c index 974ca61531e5ca6e76c84f260c7bfe525edc51bf..1e6ce170e2f506ab0a25288e6ff87091f47bb04c 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -7077,14 +7077,19 @@ int ast_context_add_ignorepat2(struct ast_context *con, const char *value, const { struct ast_ignorepat *ignorepat, *ignorepatc, *ignorepatl = NULL; int length; + char *pattern; length = sizeof(struct ast_ignorepat); length += strlen(value) + 1; if (!(ignorepat = ast_calloc(1, length))) return -1; /* The cast to char * is because we need to write the initial value. - * The field is not supposed to be modified otherwise + * The field is not supposed to be modified otherwise. Also, gcc 4.2 + * sees the cast as dereferencing a type-punned pointer and warns about + * it. This is the workaround (we're telling gcc, yes, that's really + * what we wanted to do). */ - strcpy((char *)ignorepat->pattern, value); + pattern = (char *) ignorepat->pattern; + strcpy(pattern, value); ignorepat->next = NULL; ignorepat->registrar = registrar; ast_wrlock_context(con);