Submitted By: Bruce Dubbs <bdubbs@linuxfromscratch.org>
Date: 2017-07-14
Initial Package Version: 3.1.0
Upstream Status: Committed
Origin: Upstream
Description: Although the comments below concern GCC 4.x, they are 
needed for gcc7 also.

From 503e32d01e4db00e90d7acfd81ab05386559069f Mon Sep 17 00:00:00 2001
From: Nikolaus Rath <Nikolaus@rath.org>
Date: Sat, 8 Jul 2017 13:11:47 +0200
Subject: [PATCH] Fixup symbol versioning for GCC 4.x

GCC 4.8 doesn't like to rename fuse_new_30 to fuse_new, if we
also define an implementation for fuse_new.
---
 lib/fuse.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/lib/fuse.c b/lib/fuse.c
index ce298192..5160eb11 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -4626,10 +4626,8 @@ void fuse_stop_cleanup_thread(struct fuse *f)
 }
 
 
-/* Emulates 3.0-style fuse_new(), which processes
-   --help */
+/* Emulates 3.0-style fuse_new(), which processes --help */
 FUSE_SYMVER(".symver fuse_new_30,fuse_new@FUSE_3.0");
-FUSE_SYMVER(".symver fuse_new,fuse_new@@FUSE_3.1");
 struct fuse *fuse_new_30(struct fuse_args *args,
 			 const struct fuse_operations *op,
 			 size_t op_size, void *user_data)
@@ -4652,7 +4650,12 @@ struct fuse *fuse_new_30(struct fuse_args *args,
 		return fuse_new(args, op, op_size, user_data);
 }
 
-struct fuse *fuse_new(struct fuse_args *args,
+/* Explicit prototype to prevent compiler warnings
+   (fuse.h only defines fuse_new()) */
+struct fuse *fuse_new_31(struct fuse_args *args, const struct fuse_operations *op,
+		      size_t op_size, void *private_data);
+FUSE_SYMVER(".symver fuse_new_31,fuse_new@@FUSE_3.1");
+struct fuse *fuse_new_31(struct fuse_args *args,
 		      const struct fuse_operations *op,
 		      size_t op_size, void *user_data)
 {
