diff options
author | Matthew Jordan <mjordan@digium.com> | 2015-03-30 01:53:15 +0000 |
---|---|---|
committer | Matthew Jordan <mjordan@digium.com> | 2015-03-30 01:53:15 +0000 |
commit | 1cf949c48992ed2b7b9e6aed1a94096e69328152 (patch) | |
tree | 48cef4cefff12fcb48c27949be60e0f9b842101a /main/stdtime | |
parent | d2776d4d456af2c332657852a1bbbd56c52b93e9 (diff) |
clang compiler warnings: Fix warning for -Wgnu-variable-sized-type-not-at-end
This patch fixes a warning caught by clang, wherein a variable sized struct is
not located at the end of a struct. While the code in question actually
expected this, this is a good warning to watch for. Hence, this patch refactors
the code in question to not have two variable length elements in the same
struct.
Review: https://reviewboard.asterisk.org/r/4530/
ASTERISK-24917
Reported by: dkdegroot
patches:
rb4530.patch submitted by dkdegroot (License 6600)
........
Merged revisions 433717 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 433718 from http://svn.asterisk.org/svn/asterisk/branches/13
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433719 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/stdtime')
-rw-r--r-- | main/stdtime/localtime.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/main/stdtime/localtime.c b/main/stdtime/localtime.c index 969c59749..2cd5003d1 100644 --- a/main/stdtime/localtime.c +++ b/main/stdtime/localtime.c @@ -354,10 +354,9 @@ static int inotify_fd = -1; static void *inotify_daemon(void *data) { - struct { - struct inotify_event iev; - char name[FILENAME_MAX + 1]; - } buf; + /* inotify_event is dynamically sized */ + struct inotify_event *iev; + size_t real_sizeof_iev = sizeof(*iev) + FILENAME_MAX + 1; ssize_t res; struct state *cur; @@ -372,14 +371,15 @@ static void *inotify_daemon(void *data) inotify_thread = AST_PTHREADT_NULL; return NULL; } + iev = ast_alloca(real_sizeof_iev); common_startup(); for (;/*ever*/;) { /* This read should block, most of the time. */ - if ((res = read(inotify_fd, &buf, sizeof(buf))) < sizeof(buf.iev) && res > 0) { + if ((res = read(inotify_fd, &iev, real_sizeof_iev)) < sizeof(*iev) && res > 0) { /* This should never happen */ - ast_log(LOG_ERROR, "Inotify read less than a full event (%zd < %zu)?!!\n", res, sizeof(buf.iev)); + ast_log(LOG_ERROR, "Inotify read less than a full event (%zd < %zu)?!!\n", res, sizeof(*iev)); break; } else if (res < 0) { if (errno == EINTR || errno == EAGAIN) { @@ -395,7 +395,7 @@ static void *inotify_daemon(void *data) } AST_LIST_LOCK(&zonelist); AST_LIST_TRAVERSE_SAFE_BEGIN(&zonelist, cur, list) { - if (cur->wd[0] == buf.iev.wd || cur->wd[1] == buf.iev.wd) { + if (cur->wd[0] == iev->wd || cur->wd[1] == iev->wd) { AST_LIST_REMOVE_CURRENT(list); sstate_free(cur); break; |