--- /dev/null
+From 0390d827eab62ad2d84f0d6db8278d683659c0ba Mon Sep 17 00:00:00 2001
+From: Oleg Pereverzev <oleg.pereverzev@gmail.com>
+Date: Mon, 12 Jun 2017 23:20:59 +0300
+Subject: [PATCH] Support for GCC 7
+
+---
+ lib/runcmd.c | 3 +++
+ lib/snprintf.c | 6 ++++++
+ src/naemon/checks.c | 12 +++++++++++-
+ src/naemon/configuration.c | 13 +++++++++++--
+ src/naemon/macros.c | 18 ++++++++++++++++++
+ src/naemon/xodtemplate.c | 11 ++++++++++-
+ 6 files changed, 59 insertions(+), 4 deletions(-)
+
+diff --git a/lib/runcmd.c b/lib/runcmd.c
+index eb6668fe..4e55fbd7 100644
+--- a/lib/runcmd.c
++++ b/lib/runcmd.c
+@@ -199,6 +199,9 @@ int runcmd_cmd2strv(const char *str, int *out_argc, char **out_argv)
+ set_state(STATE_INSQ | STATE_INARG);
+ continue;
+ }
++#if __GNUC__ >= 7
++ __attribute__((fallthrough));
++#endif
+ case '"':
+ if (have_state(STATE_INSQ))
+ break;
+diff --git a/lib/snprintf.c b/lib/snprintf.c
+index 49bf8962..80b69dbf 100644
+--- a/lib/snprintf.c
++++ b/lib/snprintf.c
+@@ -493,6 +493,9 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
+ break;
+ case 'X':
+ cnk->flags |= DP_F_UP;
++#if __GNUC__ >= 7
++ __attribute__((fallthrough));
++#endif
+ case 'x':
+ cnk->type = CNK_HEX;
+ cnk->flags |= DP_F_UNSIGNED;
+@@ -503,6 +506,9 @@ static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args
+ case 'G':
+ case 'F':
+ cnk->flags |= DP_F_UP;
++#if __GNUC__ >= 7
++ __attribute__((fallthrough));
++#endif
+ case 'a':
+ /* hex float not supported yet */
+ case 'e':
+diff --git a/src/naemon/checks.c b/src/naemon/checks.c
+index 97bd9f73..91d83ef1 100644
+--- a/src/naemon/checks.c
++++ b/src/naemon/checks.c
+@@ -207,6 +207,9 @@ int process_check_result_queue(char *dirname)
+ char *temp_buffer = NULL;
+ int result = OK, check_result_files = 0;
+ time_t start;
++#if __GNUC__ >= 7
++ unsigned int writesize;
++#endif
+
+ /* make sure we have what we need */
+ if (dirname == NULL) {
+@@ -240,9 +243,16 @@ int process_check_result_queue(char *dirname)
+ }
+
+ /* create /path/to/file */
++
++#if __GNUC__ >= 7
++ writesize = snprintf(file, sizeof(file), "%s/%s", dirname, dirfile->d_name);
++ if (writesize < (strlen(dirname) + strlen(dirfile->d_name) + 2))
++ nm_log(NSLOG_RUNTIME_WARNING, "Warning: truncated path to file in check result queue directory '%s'", dirfile->d_name);
++#else
+ snprintf(file, sizeof(file), "%s/%s", dirname, dirfile->d_name);
++#endif
+ file[sizeof(file) - 1] = '\x0';
+-
++
+ /* process this if it's a check result file... */
+ x = strlen(dirfile->d_name);
+ if (x == 7 && dirfile->d_name[0] == 'c') {
+diff --git a/src/naemon/configuration.c b/src/naemon/configuration.c
+index a2a8d3ed..c4dc97dd 100644
+--- a/src/naemon/configuration.c
++++ b/src/naemon/configuration.c
+@@ -59,6 +59,9 @@ read_config_file(const char *main_config_file, nagios_macros *mac)
+ char *argptr = NULL;
+ mmapfile *thefile = NULL;
+ DIR *tmpdir = NULL;
++#if __GNUC__ >= 7
++ unsigned int writesize;
++#endif
+
+ /* open the config file for reading */
+ if ((thefile = mmap_fopen(main_config_file)) == NULL) {
+@@ -1021,10 +1024,16 @@ read_config_file(const char *main_config_file, nagios_macros *mac)
+ if (strcmp(dirfile->d_name + strlen(dirfile->d_name) - 4, ".cfg"))
+ continue;
+
+- /* create /path/to/file */
++ /* create /path/to/file */
++#if __GNUC__ >= 7
++ writesize = snprintf(file, sizeof(file), "%s/%s", include_dir, dirfile->d_name);
++ if (writesize < (strlen(include_dir) + strlen(dirfile->d_name) + 2))
++ nm_log(NSLOG_RUNTIME_WARNING, "Warning: truncated path to sub-configuration file '%s'", dirfile->d_name);
++#else
+ snprintf(file, sizeof(file), "%s/%s", include_dir, dirfile->d_name);
++#endif
+ file[sizeof(file) - 1] = '\x0';
+-
++
+ error |= read_config_file(file, mac);
+ }
+ closedir(dirp);
+diff --git a/src/naemon/macros.c b/src/naemon/macros.c
+index 700bc821..13d817cf 100644
+--- a/src/naemon/macros.c
++++ b/src/naemon/macros.c
+@@ -1518,6 +1518,9 @@ static int grab_macrox_value_r(nagios_macros *mac, int macro_type, char *arg1, c
+ /***************/
+ case MACRO_HOSTGROUPNAMES:
+ *free_macro = TRUE;
++#if __GNUC__ >= 7
++ __attribute__((fallthrough));
++#endif
+ case MACRO_HOSTNAME:
+ case MACRO_HOSTALIAS:
+ case MACRO_HOSTADDRESS:
+@@ -1612,6 +1615,9 @@ static int grab_macrox_value_r(nagios_macros *mac, int macro_type, char *arg1, c
+ /********************/
+ case MACRO_HOSTGROUPMEMBERS:
+ *free_macro = TRUE;
++#if __GNUC__ >= 7
++ __attribute__((fallthrough));
++#endif
+ case MACRO_HOSTGROUPNAME:
+ case MACRO_HOSTGROUPALIAS:
+ case MACRO_HOSTGROUPNOTES:
+@@ -1640,6 +1646,9 @@ static int grab_macrox_value_r(nagios_macros *mac, int macro_type, char *arg1, c
+ /******************/
+ case MACRO_SERVICEGROUPNAMES:
+ *free_macro = TRUE;
++#if __GNUC__ >= 7
++ __attribute__((fallthrough));
++#endif
+ case MACRO_SERVICEDESC:
+ case MACRO_SERVICESTATE:
+ case MACRO_SERVICESTATEID:
+@@ -1757,6 +1766,9 @@ static int grab_macrox_value_r(nagios_macros *mac, int macro_type, char *arg1, c
+ case MACRO_SERVICEGROUPNOTESURL:
+ case MACRO_SERVICEGROUPACTIONURL:
+ *free_macro = TRUE;
++#if __GNUC__ >= 7
++ __attribute__((fallthrough));
++#endif
+ case MACRO_SERVICEGROUPNAME:
+ case MACRO_SERVICEGROUPALIAS:
+ /* a standard servicegroup macro */
+@@ -1781,6 +1793,9 @@ static int grab_macrox_value_r(nagios_macros *mac, int macro_type, char *arg1, c
+ /******************/
+ case MACRO_CONTACTGROUPNAMES:
+ *free_macro = TRUE;
++#if __GNUC__ >= 7
++ __attribute__((fallthrough));
++#endif
+ case MACRO_CONTACTNAME:
+ case MACRO_CONTACTALIAS:
+ case MACRO_CONTACTEMAIL:
+@@ -1841,6 +1856,9 @@ static int grab_macrox_value_r(nagios_macros *mac, int macro_type, char *arg1, c
+ /***********************/
+ case MACRO_CONTACTGROUPMEMBERS:
+ *free_macro = TRUE;
++#if __GNUC__ >= 7
++ __attribute__((fallthrough));
++#endif
+ case MACRO_CONTACTGROUPNAME:
+ case MACRO_CONTACTGROUPALIAS:
+ /* a standard contactgroup macro */
+diff --git a/src/naemon/xodtemplate.c b/src/naemon/xodtemplate.c
+index d5fd1cda..225fc40a 100644
+--- a/src/naemon/xodtemplate.c
++++ b/src/naemon/xodtemplate.c
+@@ -8443,7 +8443,10 @@ static int xodtemplate_process_config_dir(char *dir_name)
+ int result = OK;
+ register int x = 0;
+ struct stat stat_buf;
+-
++#if __GNUC__ >= 7
++ unsigned int writesize;
++#endif
++
+ if (verify_config >= 2)
+ printf("Processing object config directory '%s'...\n", dir_name);
+
+@@ -8462,7 +8465,13 @@ static int xodtemplate_process_config_dir(char *dir_name)
+ continue;
+
+ /* create /path/to/file */
++#if __GNUC__ >= 7
++ writesize = snprintf(file, sizeof(file), "%s/%s", dir_name, dirfile->d_name);
++ if (writesize < (strlen(dir_name) + strlen(dirfile->d_name) + 2))
++ nm_log(NSLOG_RUNTIME_WARNING, "Warning: truncated path to file '%s' in config directory '%s'", dirfile->d_name, dir_name);
++#else
+ snprintf(file, sizeof(file), "%s/%s", dir_name, dirfile->d_name);
++#endif
+ file[sizeof(file) - 1] = '\x0';
+
+ /* process this if it's a non-hidden config file... */