needed since https://github.com/bminor/musl/commit/25e6fee27f4a293728dd15b659170e7b9c7db9bc
--
From 8367bdd1eda71c10ab0a49c694846a622e543807 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Fri, 30 Dec 2022 04:04:56 -0800
Subject: [PATCH] Fix build with musl and add Alpine buildnode to CI (#174)

* configure: Add AC_SYS_LARGEFILE autoconf macro

This will define _FILE_OFFSET_BITS to be 64 if off_t is 64bit
and we do not need to define lfs64 functions

Signed-off-by: Khem Raj <raj.khem@gmail.com>

* Fix build for out-of-tree builds

When build tree is outside source-tree its not able to find
fanotify-dfid-name.h, add needed include paths on compiler commandline

Signed-off-by: Khem Raj <raj.khem@gmail.com>

* libinotifytools: Bridge differences between musl/glibc/kernel fnotify.h

System detects to use sys/fnotify.h and then assumes glibc's definitions
but musl has definitions of its own. perhaps portable thing would be to
use linux/fnotify.h interface directly on linux irrespective of libc

See the differences discussion here [1]

[1] https://inbox.vuxu.org/musl/20191112220151.GC27331@x230/T/#ma8700992467200c8792e0fa8508eae656b81aeba

Signed-off-by: Khem Raj <raj.khem@gmail.com>

* replace stat64/lstat64 with stat/lstat

lfs64 functions are not needed when off_t is 64-bit
Additionally this fixes build with musl which does not
export these functions without defining _LARGEFILE64_SOURCE

Signed-off-by: Khem Raj <raj.khem@gmail.com>

* Apply changes from clang-format

Signed-off-by: Khem Raj <raj.khem@gmail.com>

* Fix errors found by clang-format

Fixes
-Wno-gnu-variable-sized-type-not-at-end for musl clang-format

Signed-off-by: Khem Raj <raj.khem@gmail.com>

* ci: Enable musl in CI using alpine

Signed-off-by: Khem Raj <raj.khem@gmail.com>

* Tell clang-tidy to ignore warning about variable sized type

Signed-off-by: Eric Curtin <ecurtin@redhat.com>

* Add gcompat for code coverage tool

Signed-off-by: Eric Curtin <ecurtin@redhat.com>

* Skip sonarcloud on alpine

Signed-off-by: Eric Curtin <ecurtin@redhat.com>

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Eric Curtin <ecurtin@redhat.com>
Co-authored-by: Eric Curtin <ecurtin@redhat.com>
---
 build_and_test.sh                             | 10 ++++++++-
 build_and_test_multi.sh                       |  2 +-
 configure.ac                                  |  3 +++
 libinotifytools/src/Makefile.am               |  1 +
 libinotifytools/src/inotifytools.c            | 21 ++++++++++++-------
 .../src/inotifytools/fanotify-dfid-name.h     |  2 +-
 .../src/inotifytools/inotify-nosys.h          |  5 -----
 .../src/inotifytools/inotifytools.h           |  5 -----
 src/common.c                                  | 17 ++++++++-------
 src/common.h                                  |  6 +-----
 10 files changed, 38 insertions(+), 34 deletions(-)

diff --git a/configure.ac b/configure.ac
index bddf14d1..b89a266f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,6 +17,9 @@ AC_PROG_CC
 AM_INIT_AUTOMAKE
 LT_INIT
 
+# Add option for largefile support
+AC_SYS_LARGEFILE
+
 AC_PATH_PROG(DOXYGEN, doxygen, NO_DOXYGEN)
 
 AC_ARG_ENABLE(doxygen,
diff --git a/libinotifytools/src/Makefile.am b/libinotifytools/src/Makefile.am
index 9a551d5a..cfa1859a 100644
--- a/libinotifytools/src/Makefile.am
+++ b/libinotifytools/src/Makefile.am
@@ -2,6 +2,7 @@ SUBDIRS = inotifytools
 
 lib_LTLIBRARIES = libinotifytools.la
 libinotifytools_la_SOURCES = inotifytools.c inotifytools_p.h redblack.c redblack.h stats.c stats.h
+libinotifytools_la_CFLAGS = -I$(srcdir)/inotifytools
 libinotifytools_la_LDFLAGS = -version-info 4:1:4
 
 check_PROGRAMS = test
diff --git a/libinotifytools/src/inotifytools.c b/libinotifytools/src/inotifytools.c
index 873de650..7a366132 100644
--- a/libinotifytools/src/inotifytools.c
+++ b/libinotifytools/src/inotifytools.c
@@ -51,10 +51,16 @@ struct fanotify_event_fid;
 #include <sys/vfs.h>
 #include "inotifytools/fanotify.h"
 
+#ifndef __GLIBC__
+#define val __val
+#define __kernel_fsid_t fsid_t
+#endif
+
 struct fanotify_event_fid {
 	struct fanotify_event_info_fid info;
 	struct file_handle handle;
 };
+
 #endif
 
 /**
@@ -1746,14 +1752,14 @@ int inotifytools_watch_recursively_with_exclude(char const* path,
 
 	static struct dirent * ent;
 	char * next_file;
-	static struct stat64 my_stat;
+	static struct stat my_stat;
 	ent = readdir( dir );
 	// Watch each directory within this directory
 	while ( ent ) {
 		if ( (0 != strcmp( ent->d_name, "." )) &&
 		     (0 != strcmp( ent->d_name, ".." )) ) {
 			nasprintf(&next_file,"%s%s", my_path, ent->d_name);
-			if ( -1 == lstat64( next_file, &my_stat ) ) {
+			if (-1 == lstat(next_file, &my_stat)) {
 				error = errno;
 				free( next_file );
 				if ( errno != EACCES ) {
@@ -1762,9 +1768,8 @@ int inotifytools_watch_recursively_with_exclude(char const* path,
 					closedir( dir );
 					return 0;
 				}
-			}
-			else if ( S_ISDIR( my_stat.st_mode ) &&
-			          !S_ISLNK( my_stat.st_mode )) {
+			} else if (S_ISDIR(my_stat.st_mode) &&
+				   !S_ISLNK(my_stat.st_mode)) {
 				free( next_file );
 				nasprintf(&next_file,"%s%s/", my_path, ent->d_name);
 				static unsigned int no_watch;
@@ -1802,7 +1807,7 @@ int inotifytools_watch_recursively_with_exclude(char const* path,
 					}
 				} // if !no_watch
 				free( next_file );
-			} // if isdir and not islnk
+			}  // if isdir and not islnk
 			else {
 				free( next_file );
 			}
@@ -1836,9 +1841,9 @@ int inotifytools_error() {
  * @internal
  */
 static int isdir( char const * path ) {
-	static struct stat64 my_stat;
+	static struct stat my_stat;
 
-	if ( -1 == lstat64( path, &my_stat ) ) {
+	if (-1 == lstat(path, &my_stat)) {
 		if (errno == ENOENT) return 0;
 		fprintf(stderr, "Stat failed on %s: %s\n", path, strerror(errno));
 		return 0;
diff --git a/libinotifytools/src/inotifytools/fanotify-dfid-name.h b/libinotifytools/src/inotifytools/fanotify-dfid-name.h
index ce00406b..88a259ae 100644
--- a/libinotifytools/src/inotifytools/fanotify-dfid-name.h
+++ b/libinotifytools/src/inotifytools/fanotify-dfid-name.h
@@ -129,7 +129,7 @@ struct fanotify_event_info_fid {
 	 * Following is an opaque struct file_handle that can be passed as
 	 * an argument to open_by_handle_at(2).
 	 */
-	unsigned char handle[0];
+	unsigned char handle[];
 };
 
 struct fanotify_response {
diff --git a/libinotifytools/src/inotifytools/inotify-nosys.h b/libinotifytools/src/inotifytools/inotify-nosys.h
index 01aa45e7..97166d46 100644
--- a/libinotifytools/src/inotifytools/inotify-nosys.h
+++ b/libinotifytools/src/inotifytools/inotify-nosys.h
@@ -13,11 +13,6 @@
 #include <sys/syscall.h>
 #include <unistd.h>
 
-#ifdef __FreeBSD__
-#define stat64 stat
-#define lstat64 lstat
-#endif
-
 /*
  * struct inotify_event - structure read from the inotify device for each event
  *
diff --git a/libinotifytools/src/inotifytools/inotifytools.h b/libinotifytools/src/inotifytools/inotifytools.h
index 49936ae0..2ec4358e 100644
--- a/libinotifytools/src/inotifytools/inotifytools.h
+++ b/libinotifytools/src/inotifytools/inotifytools.h
@@ -1,11 +1,6 @@
 #ifndef _inotifytools_H
 #define _inotifytools_H
 
-#ifdef __FreeBSD__
-#define stat64 stat
-#define lstat64 lstat
-#endif
-
 #ifdef __cplusplus
 extern "C"
 {
diff --git a/src/common.c b/src/common.c
index 5a6fda15..53bf5d2a 100644
--- a/src/common.c
+++ b/src/common.c
@@ -45,14 +45,15 @@ void print_event_descriptions() {
 }
 
 int isdir(char const *path) {
-    static struct stat64 my_stat;
-
-    if (-1 == lstat64(path, &my_stat)) {
-        if (errno == ENOENT)
-            return 0;
-        fprintf(stderr, "Stat failed on %s: %s\n", path, strerror(errno));
-        return 0;
-    }
+	static struct stat my_stat;
+
+	if (-1 == lstat(path, &my_stat)) {
+		if (errno == ENOENT)
+			return 0;
+		fprintf(stderr, "Stat failed on %s: %s\n", path,
+			strerror(errno));
+		return 0;
+	}
 
     return S_ISDIR(my_stat.st_mode) && !S_ISLNK(my_stat.st_mode);
 }
diff --git a/src/common.h b/src/common.h
index 12d3ddea..7f1e34a4 100644
--- a/src/common.h
+++ b/src/common.h
@@ -1,13 +1,9 @@
 #ifndef COMMON_H
 #define COMMON_H
 
-#ifdef __FreeBSD__
-#define stat64 stat
-#define lstat64 lstat
-#ifdef ENABLE_FANOTIFY
+#if defined(__FreeBSD__) && defined(ENABLE_FANOTIFY)
 #error "FreeBSD does not support fanotify"
 #endif
-#endif
 
 #include <stdbool.h>
 
