]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
clang compiler warnings: Fix warning for -Wgnu-variable-sized-type-not-at-end
authorMatthew Jordan <mjordan@digium.com>
Mon, 30 Mar 2015 01:52:47 +0000 (01:52 +0000)
committerMatthew Jordan <mjordan@digium.com>
Mon, 30 Mar 2015 01:52:47 +0000 (01:52 +0000)
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

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433718 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/stdtime/localtime.c

index 969c59749d11cc7f638b9b472e5a32da0dd694bf..2cd5003d133f237406fce9c8af3bf1aee14262c4 100644 (file)
@@ -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;