Avoid global declarion of internal functions that are new in 3.17
authorBernd Schubert <bernd@bsbernd.com>
Sat, 4 Jan 2025 19:29:18 +0000 (20:29 +0100)
committerBernd Schubert <bernd@bsbernd.com>
Mon, 10 Feb 2025 15:56:45 +0000 (16:56 +0100)
_fuse_new() is not supposed to be called by external users
outside of internal functions or static inlined functions.

This also removes several functions from lib/fuse_versionscript
which where added and exported by
commit 58f85bfa9b7d ("Add in the libfuse version a program...)
as these are libfuse internal only.

Signed-off-by: Bernd Schubert <bernd@bsbernd.com>
include/fuse.h
include/fuse_lowlevel.h
lib/fuse.c
lib/fuse_lowlevel.c
lib/fuse_versionscript
lib/helper.c

index dbfa439d98c6628e90aed962b4d26e0c5ee29ab2..c3add843aefad7ecf2d44ff72134c5607c7ccffb 100644 (file)
@@ -76,7 +76,7 @@ enum fuse_fill_dir_flags {
  * stream. It does not need to be the actual physical position. A
  * value of zero is reserved to indicate that seeking in directories
  * is not supported.
- * 
+ *
  * @param buf the buffer passed to the readdir() operation
  * @param name the file name of the directory entry
  * @param stbuf file attributes, can be NULL
@@ -192,7 +192,7 @@ struct fuse_config {
         * have to guarantee uniqueness, however some applications
         * rely on this value being unique for the whole filesystem.
         *
-        * Note that this does *not* affect the inode that libfuse 
+        * Note that this does *not* affect the inode that libfuse
         * and the kernel use internally (also called the "nodeid").
         */
        int32_t use_ino;
@@ -522,9 +522,9 @@ struct fuse_operations {
         *
         * Flush is called on each close() of a file descriptor, as opposed to
         * release which is called on the close of the last file descriptor for
-        * a file.  Under Linux, errors returned by flush() will be passed to 
+        * a file.  Under Linux, errors returned by flush() will be passed to
         * userspace as errors from close(), so flush() is a good place to write
-        * back any cached dirty data. However, many applications ignore errors 
+        * back any cached dirty data. However, many applications ignore errors
         * on close(), and on non-Linux systems, close() may succeed even if flush()
         * returns an error. For these reasons, filesystems should not assume
         * that errors returned by flush will ever be noticed or even
@@ -978,11 +978,6 @@ fuse_main(int argc, char *argv[], const struct fuse_operations *op,
  */
 void fuse_lib_help(struct fuse_args *args);
 
-struct fuse *_fuse_new(struct fuse_args *args,
-                      const struct fuse_operations *op,
-                      size_t op_size, struct libfuse_version *version,
-                      void *user_data);
-
 /**
  * Create a new FUSE filesystem.
  *
@@ -1021,6 +1016,12 @@ fuse_new(struct fuse_args *args,
         const struct fuse_operations *op, size_t op_size,
         void *user_data)
 {
+       /* not declared globally, to restrict usage of this function */
+       struct fuse *_fuse_new(struct fuse_args *args,
+                              const struct fuse_operations *op, size_t op_size,
+                              struct libfuse_version *version,
+                              void *user_data);
+
        struct libfuse_version version = {
                .major = FUSE_MAJOR_VERSION,
                .minor = FUSE_MINOR_VERSION,
@@ -1044,6 +1045,12 @@ fuse_new(struct fuse_args *args,
                .padding = 0
        };
 
+       /* not declared globally, to restrict usage of this function */
+       struct fuse *_fuse_new(struct fuse_args *args,
+                              const struct fuse_operations *op, size_t op_size,
+                              struct libfuse_version *version,
+                              void *user_data);
+
        return _fuse_new(args, op, op_size, &version, user_data);
 }
 #else /* LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS */
index 3d398dec53afae6533a985c4d738406cc2347d01..0fa20390dfeebfb332938ea4f760cbcfff4e3089 100644 (file)
@@ -2045,26 +2045,8 @@ int fuse_parse_cmdline_312(struct fuse_args *args,
 #endif
 #endif
 
-/*
- * This should mostly not be called directly, but instead the fuse_session_new()
- * macro should be used, which fills in the libfuse version compilation
- * is done against automatically.
- */
-struct fuse_session *_fuse_session_new_317(struct fuse_args *args,
-                                         const struct fuse_lowlevel_ops *op,
-                                         size_t op_size,
-                                         struct libfuse_version *version,
-                                         void *userdata);
-
 /* Do not call this directly, but only through fuse_session_new() */
-#if (defined(LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS))
-struct fuse_session *
-_fuse_session_new(struct fuse_args *args,
-                const struct fuse_lowlevel_ops *op,
-                size_t op_size,
-                struct libfuse_version *version,
-                void *userdata);
-#else
+#if (!defined(LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS))
 struct fuse_session *
 _fuse_session_new_317(struct fuse_args *args,
                      const struct fuse_lowlevel_ops *op,
@@ -2116,6 +2098,12 @@ fuse_session_new(struct fuse_args *args,
                .padding = 0
        };
 
+       /* not declared globally, to restrict usage of this function */
+       struct fuse_session *_fuse_session_new(
+               struct fuse_args *args, const struct fuse_lowlevel_ops *op,
+               size_t op_size, struct libfuse_version *version,
+               void *userdata);
+
        return _fuse_session_new(args, op, op_size, &version, userdata);
 }
 
index aa5c61104ed562499faec98ce616ebd478c808b3..8fbc035ba6edd98ca3cdce7133ace75ab4051bfc 100644 (file)
@@ -5009,6 +5009,12 @@ struct fuse *_fuse_new_317(struct fuse_args *args,
        f->conf.readdir_ino = 1;
 #endif
 
+       /* not declared globally, to restrict usage of this function */
+       struct fuse_session *_fuse_session_new(
+               struct fuse_args *args, const struct fuse_lowlevel_ops *op,
+               size_t op_size, struct libfuse_version *version,
+               void *userdata);
+
        f->se = _fuse_session_new(args, &llop, sizeof(llop), version, f);
        if (f->se == NULL)
                goto out_free_fs;
index d84c6781e4d3a5e552f88662bc46d75ac660d4e9..c993860cdf3808f3adeaed2c30db3384a5c2add1 100644 (file)
@@ -3248,10 +3248,15 @@ int fuse_session_receive_buf_internal(struct fuse_session *se,
 
 FUSE_SYMVER("_fuse_session_new_317", "_fuse_session_new@@FUSE_3.17")
 struct fuse_session *_fuse_session_new_317(struct fuse_args *args,
-                                         const struct fuse_lowlevel_ops *op,
-                                         size_t op_size,
-                                         struct libfuse_version *version,
-                                         void *userdata)
+                                          const struct fuse_lowlevel_ops *op,
+                                          size_t op_size,
+                                          struct libfuse_version *version,
+                                          void *userdata);
+struct fuse_session *_fuse_session_new_317(struct fuse_args *args,
+                                          const struct fuse_lowlevel_ops *op,
+                                          size_t op_size,
+                                          struct libfuse_version *version,
+                                          void *userdata)
 {
        int err;
        struct fuse_session *se;
index 14cbca142271f941175b0f1868caccb190ca371f..f20e2b43eb5dd80795fc0ab62166a8a1615b614d 100644 (file)
@@ -189,11 +189,11 @@ FUSE_3.12 {
 
 FUSE_3.17 {
        global:
+#if !defined(LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS)
                _fuse_session_new_317;
-               _fuse_new;
-               _fuse_new_30;
                _fuse_new_317;
                fuse_main_real_317;
+#endif
                fuse_passthrough_open;
                fuse_passthrough_close;
                fuse_session_custom_io_30;
index e84c857cedb5f94f4269146c8b228cca4791eb3f..2794e66bb2c97c0f3f7d702716f81614dee2c914 100644 (file)
@@ -344,6 +344,10 @@ int fuse_main_real_317(int argc, char *argv[], const struct fuse_operations *op,
                goto out1;
        }
 
+       struct fuse *_fuse_new(struct fuse_args *args,
+                              const struct fuse_operations *op, size_t op_size,
+                              struct libfuse_version *version,
+                              void *user_data);
        fuse = _fuse_new(&args, op, op_size, version, user_data);
        if (fuse == NULL) {
                res = 3;