From 1cf949c48992ed2b7b9e6aed1a94096e69328152 Mon Sep 17 00:00:00 2001 From: Matthew Jordan <mjordan@digium.com> Date: Mon, 30 Mar 2015 01:53:15 +0000 Subject: [PATCH] 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 --- main/stdtime/localtime.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/main/stdtime/localtime.c b/main/stdtime/localtime.c index 969c59749d..2cd5003d13 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; -- GitLab