All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] erofs-utils: make liberofs more C++ friendly
@ 2021-12-01 13:53 Gao Xiang
  2021-12-01 17:58 ` Kelvin Zhang via Linux-erofs
  0 siblings, 1 reply; 2+ messages in thread
From: Gao Xiang @ 2021-12-01 13:53 UTC (permalink / raw)
  To: linux-erofs; +Cc: Kelvin Zhang

From: Kelvin Zhang <zhangkelvin@google.com>

1. Add extern "C" wrappers to headers, so that they can be included
   from C++
2. Add const keywords to certain pointer type params

Signed-off-by: Kelvin Zhang <zhangkelvin@google.com>
Signed-off-by: Gao Xiang <xiang@kernel.org>
---
v3: https://lore.kernel.org/r/20211130055604.2876828-2-zhangkelvin@google.com/
Hi Kelvin,

Please help check if this patch meets your requirement.
And I've applied to experimental branch.

Thanks,
Gao Xiang

 include/erofs/blobchunk.h      |  9 +++++++++
 include/erofs/block_list.h     | 10 ++++++++++
 include/erofs/cache.h          |  9 +++++++++
 include/erofs/compress.h       |  9 +++++++++
 include/erofs/compress_hints.h | 10 ++++++++++
 include/erofs/config.h         | 20 +++++++++-----------
 include/erofs/decompress.h     |  9 +++++++++
 include/erofs/defs.h           | 17 ++++++++++++++++-
 include/erofs/err.h            |  9 +++++++++
 include/erofs/exclude.h        | 10 ++++++++++
 include/erofs/flex-array.h     |  9 +++++++++
 include/erofs/hashmap.h        |  9 +++++++++
 include/erofs/hashtable.h      |  9 +++++++++
 include/erofs/inode.h          |  9 +++++++++
 include/erofs/internal.h       |  9 +++++++++
 include/erofs/io.h             | 11 +++++++++++
 include/erofs/list.h           | 10 ++++++++++
 include/erofs/print.h          |  9 +++++++++
 include/erofs/trace.h          |  9 +++++++++
 include/erofs/xattr.h          |  9 +++++++++
 lib/Makefile.am                |  3 ++-
 lib/config.c                   |  1 +
 lib/inode.c                    |  1 +
 lib/liberofs_private.h         | 13 +++++++++++++
 lib/xattr.c                    |  1 +
 25 files changed, 211 insertions(+), 13 deletions(-)
 create mode 100644 lib/liberofs_private.h

diff --git a/include/erofs/blobchunk.h b/include/erofs/blobchunk.h
index 59a47013017f..4e1ae79938d6 100644
--- a/include/erofs/blobchunk.h
+++ b/include/erofs/blobchunk.h
@@ -7,6 +7,11 @@
 #ifndef __EROFS_BLOBCHUNK_H
 #define __EROFS_BLOBCHUNK_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "erofs/internal.h"
 
 int erofs_blob_write_chunk_indexes(struct erofs_inode *inode, erofs_off_t off);
@@ -16,4 +21,8 @@ void erofs_blob_exit(void);
 int erofs_blob_init(const char *blobfile_path);
 int erofs_generate_devtable(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/block_list.h b/include/erofs/block_list.h
index 40df2282bf0c..ca8053ed28b7 100644
--- a/include/erofs/block_list.h
+++ b/include/erofs/block_list.h
@@ -6,6 +6,11 @@
 #ifndef __EROFS_BLOCK_LIST_H
 #define __EROFS_BLOCK_LIST_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "internal.h"
 
 #ifdef WITH_ANDROID
@@ -29,4 +34,9 @@ erofs_droid_blocklist_write_extent(struct erofs_inode *inode,
 				   erofs_blk_t blk_start, erofs_blk_t nblocks,
 				   bool first_extent, bool last_extent) {}
 #endif
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/cache.h b/include/erofs/cache.h
index 87cd51d9473b..7957ee5d0b73 100644
--- a/include/erofs/cache.h
+++ b/include/erofs/cache.h
@@ -8,6 +8,11 @@
 #ifndef __EROFS_CACHE_H
 #define __EROFS_CACHE_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "internal.h"
 
 struct erofs_buffer_head;
@@ -104,4 +109,8 @@ bool erofs_bflush(struct erofs_buffer_block *bb);
 
 void erofs_bdrop(struct erofs_buffer_head *bh, bool tryrevoke);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/compress.h b/include/erofs/compress.h
index 4434aaa75b54..fdbf5ff66558 100644
--- a/include/erofs/compress.h
+++ b/include/erofs/compress.h
@@ -7,6 +7,11 @@
 #ifndef __EROFS_COMPRESS_H
 #define __EROFS_COMPRESS_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "internal.h"
 
 /* workaround for an upstream lz4 compression issue, which can crash us */
@@ -21,4 +26,8 @@ int z_erofs_compress_exit(void);
 
 const char *z_erofs_list_available_compressors(unsigned int i);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/compress_hints.h b/include/erofs/compress_hints.h
index a5772c72b1c4..43f80e117816 100644
--- a/include/erofs/compress_hints.h
+++ b/include/erofs/compress_hints.h
@@ -6,6 +6,11 @@
 #ifndef __EROFS_COMPRESS_HINTS_H
 #define __EROFS_COMPRESS_HINTS_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "erofs/internal.h"
 #include <sys/types.h>
 #include <regex.h>
@@ -20,4 +25,9 @@ struct erofs_compress_hints {
 bool z_erofs_apply_compress_hints(struct erofs_inode *inode);
 void erofs_cleanup_compress_hints(void);
 int erofs_load_compress_hints(void);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/config.h b/include/erofs/config.h
index 2040dc6ff154..cb064b651835 100644
--- a/include/erofs/config.h
+++ b/include/erofs/config.h
@@ -7,20 +7,14 @@
 #ifndef __EROFS_CONFIG_H
 #define __EROFS_CONFIG_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "defs.h"
 #include "err.h"
 
-#ifdef HAVE_LIBSELINUX
-#include <selinux/selinux.h>
-#include <selinux/label.h>
-#endif
-
-#ifdef WITH_ANDROID
-#include <selinux/android.h>
-#include <private/android_filesystem_config.h>
-#include <private/canned_fs_config.h>
-#include <private/fs_config.h>
-#endif
 
 enum {
 	FORCE_INODE_COMPACT = 1,
@@ -96,4 +90,8 @@ static inline int erofs_selabel_open(const char *file_contexts)
 }
 #endif
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/decompress.h b/include/erofs/decompress.h
index 3d0d9633865d..e649c80cf3a7 100644
--- a/include/erofs/decompress.h
+++ b/include/erofs/decompress.h
@@ -6,6 +6,11 @@
 #ifndef __EROFS_DECOMPRESS_H
 #define __EROFS_DECOMPRESS_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "internal.h"
 
 struct z_erofs_decompress_req {
@@ -25,4 +30,8 @@ struct z_erofs_decompress_req {
 
 int z_erofs_decompress(struct z_erofs_decompress_req *rq);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/defs.h b/include/erofs/defs.h
index 6398cbb2aa4d..4db237f4dfb0 100644
--- a/include/erofs/defs.h
+++ b/include/erofs/defs.h
@@ -8,6 +8,11 @@
 #ifndef __EROFS_DEFS_H
 #define __EROFS_DEFS_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include <stddef.h>
 #include <stdint.h>
 #include <assert.h>
@@ -82,7 +87,9 @@ typedef int64_t         s64;
 #endif
 #endif
 
-#ifndef __OPTIMIZE__
+#ifdef __cplusplus
+#define BUILD_BUG_ON(condition) static_assert(!(condition))
+#elif !defined(__OPTIMIZE__)
 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 * !!(condition)]))
 #else
 #define BUILD_BUG_ON(condition) assert(!(condition))
@@ -110,6 +117,8 @@ typedef int64_t         s64;
 }							\
 )
 
+/* Can easily conflict with C++'s std::min */
+#ifndef __cplusplus
 #define min(x, y) ({				\
 	typeof(x) _min1 = (x);			\
 	typeof(y) _min2 = (y);			\
@@ -121,6 +130,7 @@ typedef int64_t         s64;
 	typeof(y) _max2 = (y);			\
 	(void) (&_max1 == &_max2);		\
 	_max1 > _max2 ? _max1 : _max2; })
+#endif
 
 /*
  * ..and if you can't take the strict types, you can specify one yourself.
@@ -308,4 +318,9 @@ unsigned long __roundup_pow_of_two(unsigned long n)
 #define stat64		stat
 #define lstat64		lstat
 #endif
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/err.h b/include/erofs/err.h
index a33bdd137879..18f152aa4608 100644
--- a/include/erofs/err.h
+++ b/include/erofs/err.h
@@ -7,6 +7,11 @@
 #ifndef __EROFS_ERR_H
 #define __EROFS_ERR_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include <errno.h>
 
 #define MAX_ERRNO (4095)
@@ -28,4 +33,8 @@ static inline long PTR_ERR(const void *ptr)
 	return (long) ptr;
 }
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/exclude.h b/include/erofs/exclude.h
index 6930f2b43a47..599f01895807 100644
--- a/include/erofs/exclude.h
+++ b/include/erofs/exclude.h
@@ -5,6 +5,11 @@
 #ifndef __EROFS_EXCLUDE_H
 #define __EROFS_EXCLUDE_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include <sys/types.h>
 #include <regex.h>
 
@@ -21,4 +26,9 @@ void erofs_cleanup_exclude_rules(void);
 int erofs_parse_exclude_path(const char *args, bool is_regex);
 struct erofs_exclude_rule *erofs_is_exclude_path(const char *dir,
 						 const char *name);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/flex-array.h b/include/erofs/flex-array.h
index 59168d05ee5a..9b1642f77740 100644
--- a/include/erofs/flex-array.h
+++ b/include/erofs/flex-array.h
@@ -2,6 +2,11 @@
 #ifndef __EROFS_FLEX_ARRAY_H
 #define __EROFS_FLEX_ARRAY_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <limits.h>
@@ -144,4 +149,8 @@ static inline size_t st_add(size_t a, size_t b)
 #define FLEXPTR_ALLOC_STR(x, ptrname, str) \
 	FLEXPTR_ALLOC_MEM((x), ptrname, (str), strlen(str))
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/hashmap.h b/include/erofs/hashmap.h
index 024a14e497d4..3d3857890077 100644
--- a/include/erofs/hashmap.h
+++ b/include/erofs/hashmap.h
@@ -2,6 +2,11 @@
 #ifndef __EROFS_HASHMAP_H
 #define __EROFS_HASHMAP_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 /* Copied from https://github.com/git/git.git */
 #include <stdio.h>
 #include <stdlib.h>
@@ -100,4 +105,8 @@ static inline const char *strintern(const char *string)
 	return memintern(string, strlen(string));
 }
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/hashtable.h b/include/erofs/hashtable.h
index 90eb84ee8598..3c4dfc128eaa 100644
--- a/include/erofs/hashtable.h
+++ b/include/erofs/hashtable.h
@@ -5,6 +5,11 @@
 #ifndef __EROFS_HASHTABLE_H
 #define __EROFS_HASHTABLE_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 /*
  * Fast hashing routine for ints,  longs and pointers.
  * (C) 2002 Nadia Yvette Chambers, IBM
@@ -380,4 +385,8 @@ static inline void hash_del(struct hlist_node *node)
 #define hash_for_each_possible(name, obj, member, key)			\
 	hlist_for_each_entry(obj, &name[hash_min(key, HASH_BITS(name))], member)
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/inode.h b/include/erofs/inode.h
index d5343c242aee..e23d65f42249 100644
--- a/include/erofs/inode.h
+++ b/include/erofs/inode.h
@@ -8,6 +8,11 @@
 #ifndef __EROFS_INODE_H
 #define __EROFS_INODE_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "erofs/internal.h"
 
 unsigned char erofs_mode_to_ftype(umode_t mode);
@@ -17,4 +22,8 @@ erofs_nid_t erofs_lookupnid(struct erofs_inode *inode);
 struct erofs_inode *erofs_mkfs_build_tree_from_path(struct erofs_inode *parent,
 						    const char *path);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/internal.h b/include/erofs/internal.h
index 666d1f2df466..a68de325da39 100644
--- a/include/erofs/internal.h
+++ b/include/erofs/internal.h
@@ -7,6 +7,11 @@
 #ifndef __EROFS_INTERNAL_H
 #define __EROFS_INTERNAL_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "list.h"
 #include "err.h"
 
@@ -331,4 +336,8 @@ static inline u32 erofs_crc32c(u32 crc, const u8 *in, size_t len)
 	return crc;
 }
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/io.h b/include/erofs/io.h
index 10a3681882e1..6f51e06ee7c2 100644
--- a/include/erofs/io.h
+++ b/include/erofs/io.h
@@ -7,7 +7,14 @@
 #ifndef __EROFS_IO_H
 #define __EROFS_IO_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#ifndef _GNU_SOURCE
 #define _GNU_SOURCE
+#endif
 #include <unistd.h>
 #include "internal.h"
 
@@ -47,4 +54,8 @@ static inline int blk_read(int device_id, void *buf,
 			 blknr_to_addr(nblocks));
 }
 
+#ifdef __cplusplus
+}
 #endif
+
+#endif // EROFS_IO_H_
diff --git a/include/erofs/list.h b/include/erofs/list.h
index d2bc704ae64b..fd5358d6bd19 100644
--- a/include/erofs/list.h
+++ b/include/erofs/list.h
@@ -7,6 +7,11 @@
 #ifndef __EROFS_LIST_HEAD_H
 #define __EROFS_LIST_HEAD_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "defs.h"
 
 struct list_head {
@@ -105,4 +110,9 @@ static inline int list_empty(struct list_head *head)
 	     &pos->member != (head);                                           \
 	     pos = n, n = list_next_entry(n, member))
 
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/print.h b/include/erofs/print.h
index 91f864bacd55..2213d1d58de5 100644
--- a/include/erofs/print.h
+++ b/include/erofs/print.h
@@ -7,6 +7,11 @@
 #ifndef __EROFS_PRINT_H
 #define __EROFS_PRINT_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "config.h"
 #include <stdio.h>
 
@@ -72,4 +77,8 @@ enum {
 
 #define erofs_dump(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/trace.h b/include/erofs/trace.h
index d70d23674c1a..893e16c5d6c1 100644
--- a/include/erofs/trace.h
+++ b/include/erofs/trace.h
@@ -5,7 +5,16 @@
 #ifndef __EROFS_TRACE_H
 #define __EROFS_TRACE_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #define trace_erofs_map_blocks_flatmode_enter(inode, map, flags) ((void)0)
 #define trace_erofs_map_blocks_flatmode_exit(inode, map, flags, ret) ((void)0)
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/include/erofs/xattr.h b/include/erofs/xattr.h
index f0c4c268fecc..8e6881247f42 100644
--- a/include/erofs/xattr.h
+++ b/include/erofs/xattr.h
@@ -7,6 +7,11 @@
 #ifndef __EROFS_XATTR_H
 #define __EROFS_XATTR_H
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
 #include "internal.h"
 
 #define EROFS_INODE_XATTR_ICOUNT(_size)	({\
@@ -44,4 +49,8 @@ int erofs_prepare_xattr_ibody(struct erofs_inode *inode);
 char *erofs_export_xattr_ibody(struct list_head *ixattrs, unsigned int size);
 int erofs_build_shared_xattrs_from_path(const char *path);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 395c712811b8..67ba798672b9 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -21,7 +21,8 @@ noinst_HEADERS = $(top_srcdir)/include/erofs_fs.h \
       $(top_srcdir)/include/erofs/print.h \
       $(top_srcdir)/include/erofs/trace.h \
       $(top_srcdir)/include/erofs/xattr.h \
-      $(top_srcdir)/include/erofs/compress_hints.h
+      $(top_srcdir)/include/erofs/compress_hints.h \
+      $(top_srcdir)/lib/liberofs_private.h
 
 noinst_HEADERS += compressor.h
 liberofs_la_SOURCES = config.c io.c cache.c super.c inode.c xattr.c exclude.c \
diff --git a/lib/config.c b/lib/config.c
index 363dcc5a0525..f1c8edfda2dc 100644
--- a/lib/config.c
+++ b/lib/config.c
@@ -8,6 +8,7 @@
 #include <stdlib.h>
 #include "erofs/print.h"
 #include "erofs/internal.h"
+#include "liberofs_private.h"
 
 struct erofs_configure cfg;
 struct erofs_sb_info sbi;
diff --git a/lib/inode.c b/lib/inode.c
index 2fa74e2686c9..461c7978dbdf 100644
--- a/lib/inode.c
+++ b/lib/inode.c
@@ -25,6 +25,7 @@
 #include "erofs/block_list.h"
 #include "erofs/compress_hints.h"
 #include "erofs/blobchunk.h"
+#include "liberofs_private.h"
 
 #define S_SHIFT                 12
 static unsigned char erofs_ftype_by_mode[S_IFMT >> S_SHIFT] = {
diff --git a/lib/liberofs_private.h b/lib/liberofs_private.h
new file mode 100644
index 000000000000..c2312e8e7a31
--- /dev/null
+++ b/lib/liberofs_private.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0-only OR Apache-2.0 */
+
+#ifdef HAVE_LIBSELINUX
+#include <selinux/selinux.h>
+#include <selinux/label.h>
+#endif
+
+#ifdef WITH_ANDROID
+#include <selinux/android.h>
+#include <private/android_filesystem_config.h>
+#include <private/canned_fs_config.h>
+#include <private/fs_config.h>
+#endif
diff --git a/lib/xattr.c b/lib/xattr.c
index 196133a1a798..00fb963c68ef 100644
--- a/lib/xattr.c
+++ b/lib/xattr.c
@@ -17,6 +17,7 @@
 #include "erofs/xattr.h"
 #include "erofs/cache.h"
 #include "erofs/io.h"
+#include "liberofs_private.h"
 
 #define EA_HASHTABLE_BITS 16
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] erofs-utils: make liberofs more C++ friendly
  2021-12-01 13:53 [PATCH] erofs-utils: make liberofs more C++ friendly Gao Xiang
@ 2021-12-01 17:58 ` Kelvin Zhang via Linux-erofs
  0 siblings, 0 replies; 2+ messages in thread
From: Kelvin Zhang via Linux-erofs @ 2021-12-01 17:58 UTC (permalink / raw)
  To: Gao Xiang; +Cc: linux-erofs

[-- Attachment #1: Type: text/plain, Size: 17328 bytes --]

This patch works for me, thanks!

On Wed, Dec 1, 2021 at 5:53 AM Gao Xiang <xiang@kernel.org> wrote:

> From: Kelvin Zhang <zhangkelvin@google.com>
>
> 1. Add extern "C" wrappers to headers, so that they can be included
>    from C++
> 2. Add const keywords to certain pointer type params
>
> Signed-off-by: Kelvin Zhang <zhangkelvin@google.com>
> Signed-off-by: Gao Xiang <xiang@kernel.org>
> ---
> v3:
> https://lore.kernel.org/r/20211130055604.2876828-2-zhangkelvin@google.com/
> Hi Kelvin,
>
> Please help check if this patch meets your requirement.
> And I've applied to experimental branch.
>
> Thanks,
> Gao Xiang
>
>  include/erofs/blobchunk.h      |  9 +++++++++
>  include/erofs/block_list.h     | 10 ++++++++++
>  include/erofs/cache.h          |  9 +++++++++
>  include/erofs/compress.h       |  9 +++++++++
>  include/erofs/compress_hints.h | 10 ++++++++++
>  include/erofs/config.h         | 20 +++++++++-----------
>  include/erofs/decompress.h     |  9 +++++++++
>  include/erofs/defs.h           | 17 ++++++++++++++++-
>  include/erofs/err.h            |  9 +++++++++
>  include/erofs/exclude.h        | 10 ++++++++++
>  include/erofs/flex-array.h     |  9 +++++++++
>  include/erofs/hashmap.h        |  9 +++++++++
>  include/erofs/hashtable.h      |  9 +++++++++
>  include/erofs/inode.h          |  9 +++++++++
>  include/erofs/internal.h       |  9 +++++++++
>  include/erofs/io.h             | 11 +++++++++++
>  include/erofs/list.h           | 10 ++++++++++
>  include/erofs/print.h          |  9 +++++++++
>  include/erofs/trace.h          |  9 +++++++++
>  include/erofs/xattr.h          |  9 +++++++++
>  lib/Makefile.am                |  3 ++-
>  lib/config.c                   |  1 +
>  lib/inode.c                    |  1 +
>  lib/liberofs_private.h         | 13 +++++++++++++
>  lib/xattr.c                    |  1 +
>  25 files changed, 211 insertions(+), 13 deletions(-)
>  create mode 100644 lib/liberofs_private.h
>
> diff --git a/include/erofs/blobchunk.h b/include/erofs/blobchunk.h
> index 59a47013017f..4e1ae79938d6 100644
> --- a/include/erofs/blobchunk.h
> +++ b/include/erofs/blobchunk.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_BLOBCHUNK_H
>  #define __EROFS_BLOBCHUNK_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "erofs/internal.h"
>
>  int erofs_blob_write_chunk_indexes(struct erofs_inode *inode, erofs_off_t
> off);
> @@ -16,4 +21,8 @@ void erofs_blob_exit(void);
>  int erofs_blob_init(const char *blobfile_path);
>  int erofs_generate_devtable(void);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/block_list.h b/include/erofs/block_list.h
> index 40df2282bf0c..ca8053ed28b7 100644
> --- a/include/erofs/block_list.h
> +++ b/include/erofs/block_list.h
> @@ -6,6 +6,11 @@
>  #ifndef __EROFS_BLOCK_LIST_H
>  #define __EROFS_BLOCK_LIST_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  #ifdef WITH_ANDROID
> @@ -29,4 +34,9 @@ erofs_droid_blocklist_write_extent(struct erofs_inode
> *inode,
>                                    erofs_blk_t blk_start, erofs_blk_t
> nblocks,
>                                    bool first_extent, bool last_extent) {}
>  #endif
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/cache.h b/include/erofs/cache.h
> index 87cd51d9473b..7957ee5d0b73 100644
> --- a/include/erofs/cache.h
> +++ b/include/erofs/cache.h
> @@ -8,6 +8,11 @@
>  #ifndef __EROFS_CACHE_H
>  #define __EROFS_CACHE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  struct erofs_buffer_head;
> @@ -104,4 +109,8 @@ bool erofs_bflush(struct erofs_buffer_block *bb);
>
>  void erofs_bdrop(struct erofs_buffer_head *bh, bool tryrevoke);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/compress.h b/include/erofs/compress.h
> index 4434aaa75b54..fdbf5ff66558 100644
> --- a/include/erofs/compress.h
> +++ b/include/erofs/compress.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_COMPRESS_H
>  #define __EROFS_COMPRESS_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  /* workaround for an upstream lz4 compression issue, which can crash us */
> @@ -21,4 +26,8 @@ int z_erofs_compress_exit(void);
>
>  const char *z_erofs_list_available_compressors(unsigned int i);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/compress_hints.h
> b/include/erofs/compress_hints.h
> index a5772c72b1c4..43f80e117816 100644
> --- a/include/erofs/compress_hints.h
> +++ b/include/erofs/compress_hints.h
> @@ -6,6 +6,11 @@
>  #ifndef __EROFS_COMPRESS_HINTS_H
>  #define __EROFS_COMPRESS_HINTS_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "erofs/internal.h"
>  #include <sys/types.h>
>  #include <regex.h>
> @@ -20,4 +25,9 @@ struct erofs_compress_hints {
>  bool z_erofs_apply_compress_hints(struct erofs_inode *inode);
>  void erofs_cleanup_compress_hints(void);
>  int erofs_load_compress_hints(void);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/config.h b/include/erofs/config.h
> index 2040dc6ff154..cb064b651835 100644
> --- a/include/erofs/config.h
> +++ b/include/erofs/config.h
> @@ -7,20 +7,14 @@
>  #ifndef __EROFS_CONFIG_H
>  #define __EROFS_CONFIG_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "defs.h"
>  #include "err.h"
>
> -#ifdef HAVE_LIBSELINUX
> -#include <selinux/selinux.h>
> -#include <selinux/label.h>
> -#endif
> -
> -#ifdef WITH_ANDROID
> -#include <selinux/android.h>
> -#include <private/android_filesystem_config.h>
> -#include <private/canned_fs_config.h>
> -#include <private/fs_config.h>
> -#endif
>
>  enum {
>         FORCE_INODE_COMPACT = 1,
> @@ -96,4 +90,8 @@ static inline int erofs_selabel_open(const char
> *file_contexts)
>  }
>  #endif
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/decompress.h b/include/erofs/decompress.h
> index 3d0d9633865d..e649c80cf3a7 100644
> --- a/include/erofs/decompress.h
> +++ b/include/erofs/decompress.h
> @@ -6,6 +6,11 @@
>  #ifndef __EROFS_DECOMPRESS_H
>  #define __EROFS_DECOMPRESS_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  struct z_erofs_decompress_req {
> @@ -25,4 +30,8 @@ struct z_erofs_decompress_req {
>
>  int z_erofs_decompress(struct z_erofs_decompress_req *rq);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/defs.h b/include/erofs/defs.h
> index 6398cbb2aa4d..4db237f4dfb0 100644
> --- a/include/erofs/defs.h
> +++ b/include/erofs/defs.h
> @@ -8,6 +8,11 @@
>  #ifndef __EROFS_DEFS_H
>  #define __EROFS_DEFS_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include <stddef.h>
>  #include <stdint.h>
>  #include <assert.h>
> @@ -82,7 +87,9 @@ typedef int64_t         s64;
>  #endif
>  #endif
>
> -#ifndef __OPTIMIZE__
> +#ifdef __cplusplus
> +#define BUILD_BUG_ON(condition) static_assert(!(condition))
> +#elif !defined(__OPTIMIZE__)
>  #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 *
> !!(condition)]))
>  #else
>  #define BUILD_BUG_ON(condition) assert(!(condition))
> @@ -110,6 +117,8 @@ typedef int64_t         s64;
>  }                                                      \
>  )
>
> +/* Can easily conflict with C++'s std::min */
> +#ifndef __cplusplus
>  #define min(x, y) ({                           \
>         typeof(x) _min1 = (x);                  \
>         typeof(y) _min2 = (y);                  \
> @@ -121,6 +130,7 @@ typedef int64_t         s64;
>         typeof(y) _max2 = (y);                  \
>         (void) (&_max1 == &_max2);              \
>         _max1 > _max2 ? _max1 : _max2; })
> +#endif
>
>  /*
>   * ..and if you can't take the strict types, you can specify one yourself.
> @@ -308,4 +318,9 @@ unsigned long __roundup_pow_of_two(unsigned long n)
>  #define stat64         stat
>  #define lstat64                lstat
>  #endif
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/err.h b/include/erofs/err.h
> index a33bdd137879..18f152aa4608 100644
> --- a/include/erofs/err.h
> +++ b/include/erofs/err.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_ERR_H
>  #define __EROFS_ERR_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include <errno.h>
>
>  #define MAX_ERRNO (4095)
> @@ -28,4 +33,8 @@ static inline long PTR_ERR(const void *ptr)
>         return (long) ptr;
>  }
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/exclude.h b/include/erofs/exclude.h
> index 6930f2b43a47..599f01895807 100644
> --- a/include/erofs/exclude.h
> +++ b/include/erofs/exclude.h
> @@ -5,6 +5,11 @@
>  #ifndef __EROFS_EXCLUDE_H
>  #define __EROFS_EXCLUDE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include <sys/types.h>
>  #include <regex.h>
>
> @@ -21,4 +26,9 @@ void erofs_cleanup_exclude_rules(void);
>  int erofs_parse_exclude_path(const char *args, bool is_regex);
>  struct erofs_exclude_rule *erofs_is_exclude_path(const char *dir,
>                                                  const char *name);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/flex-array.h b/include/erofs/flex-array.h
> index 59168d05ee5a..9b1642f77740 100644
> --- a/include/erofs/flex-array.h
> +++ b/include/erofs/flex-array.h
> @@ -2,6 +2,11 @@
>  #ifndef __EROFS_FLEX_ARRAY_H
>  #define __EROFS_FLEX_ARRAY_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <limits.h>
> @@ -144,4 +149,8 @@ static inline size_t st_add(size_t a, size_t b)
>  #define FLEXPTR_ALLOC_STR(x, ptrname, str) \
>         FLEXPTR_ALLOC_MEM((x), ptrname, (str), strlen(str))
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/hashmap.h b/include/erofs/hashmap.h
> index 024a14e497d4..3d3857890077 100644
> --- a/include/erofs/hashmap.h
> +++ b/include/erofs/hashmap.h
> @@ -2,6 +2,11 @@
>  #ifndef __EROFS_HASHMAP_H
>  #define __EROFS_HASHMAP_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  /* Copied from https://github.com/git/git.git */
>  #include <stdio.h>
>  #include <stdlib.h>
> @@ -100,4 +105,8 @@ static inline const char *strintern(const char *string)
>         return memintern(string, strlen(string));
>  }
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/hashtable.h b/include/erofs/hashtable.h
> index 90eb84ee8598..3c4dfc128eaa 100644
> --- a/include/erofs/hashtable.h
> +++ b/include/erofs/hashtable.h
> @@ -5,6 +5,11 @@
>  #ifndef __EROFS_HASHTABLE_H
>  #define __EROFS_HASHTABLE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  /*
>   * Fast hashing routine for ints,  longs and pointers.
>   * (C) 2002 Nadia Yvette Chambers, IBM
> @@ -380,4 +385,8 @@ static inline void hash_del(struct hlist_node *node)
>  #define hash_for_each_possible(name, obj, member, key)                 \
>         hlist_for_each_entry(obj, &name[hash_min(key, HASH_BITS(name))],
> member)
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/inode.h b/include/erofs/inode.h
> index d5343c242aee..e23d65f42249 100644
> --- a/include/erofs/inode.h
> +++ b/include/erofs/inode.h
> @@ -8,6 +8,11 @@
>  #ifndef __EROFS_INODE_H
>  #define __EROFS_INODE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "erofs/internal.h"
>
>  unsigned char erofs_mode_to_ftype(umode_t mode);
> @@ -17,4 +22,8 @@ erofs_nid_t erofs_lookupnid(struct erofs_inode *inode);
>  struct erofs_inode *erofs_mkfs_build_tree_from_path(struct erofs_inode
> *parent,
>                                                     const char *path);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/internal.h b/include/erofs/internal.h
> index 666d1f2df466..a68de325da39 100644
> --- a/include/erofs/internal.h
> +++ b/include/erofs/internal.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_INTERNAL_H
>  #define __EROFS_INTERNAL_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "list.h"
>  #include "err.h"
>
> @@ -331,4 +336,8 @@ static inline u32 erofs_crc32c(u32 crc, const u8 *in,
> size_t len)
>         return crc;
>  }
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/io.h b/include/erofs/io.h
> index 10a3681882e1..6f51e06ee7c2 100644
> --- a/include/erofs/io.h
> +++ b/include/erofs/io.h
> @@ -7,7 +7,14 @@
>  #ifndef __EROFS_IO_H
>  #define __EROFS_IO_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
> +#ifndef _GNU_SOURCE
>  #define _GNU_SOURCE
> +#endif
>  #include <unistd.h>
>  #include "internal.h"
>
> @@ -47,4 +54,8 @@ static inline int blk_read(int device_id, void *buf,
>                          blknr_to_addr(nblocks));
>  }
>
> +#ifdef __cplusplus
> +}
>  #endif
> +
> +#endif // EROFS_IO_H_
> diff --git a/include/erofs/list.h b/include/erofs/list.h
> index d2bc704ae64b..fd5358d6bd19 100644
> --- a/include/erofs/list.h
> +++ b/include/erofs/list.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_LIST_HEAD_H
>  #define __EROFS_LIST_HEAD_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "defs.h"
>
>  struct list_head {
> @@ -105,4 +110,9 @@ static inline int list_empty(struct list_head *head)
>              &pos->member != (head);
>      \
>              pos = n, n = list_next_entry(n, member))
>
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/print.h b/include/erofs/print.h
> index 91f864bacd55..2213d1d58de5 100644
> --- a/include/erofs/print.h
> +++ b/include/erofs/print.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_PRINT_H
>  #define __EROFS_PRINT_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "config.h"
>  #include <stdio.h>
>
> @@ -72,4 +77,8 @@ enum {
>
>  #define erofs_dump(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/trace.h b/include/erofs/trace.h
> index d70d23674c1a..893e16c5d6c1 100644
> --- a/include/erofs/trace.h
> +++ b/include/erofs/trace.h
> @@ -5,7 +5,16 @@
>  #ifndef __EROFS_TRACE_H
>  #define __EROFS_TRACE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #define trace_erofs_map_blocks_flatmode_enter(inode, map, flags) ((void)0)
>  #define trace_erofs_map_blocks_flatmode_exit(inode, map, flags, ret)
> ((void)0)
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/xattr.h b/include/erofs/xattr.h
> index f0c4c268fecc..8e6881247f42 100644
> --- a/include/erofs/xattr.h
> +++ b/include/erofs/xattr.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_XATTR_H
>  #define __EROFS_XATTR_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  #define EROFS_INODE_XATTR_ICOUNT(_size)        ({\
> @@ -44,4 +49,8 @@ int erofs_prepare_xattr_ibody(struct erofs_inode *inode);
>  char *erofs_export_xattr_ibody(struct list_head *ixattrs, unsigned int
> size);
>  int erofs_build_shared_xattrs_from_path(const char *path);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/lib/Makefile.am b/lib/Makefile.am
> index 395c712811b8..67ba798672b9 100644
> --- a/lib/Makefile.am
> +++ b/lib/Makefile.am
> @@ -21,7 +21,8 @@ noinst_HEADERS = $(top_srcdir)/include/erofs_fs.h \
>        $(top_srcdir)/include/erofs/print.h \
>        $(top_srcdir)/include/erofs/trace.h \
>        $(top_srcdir)/include/erofs/xattr.h \
> -      $(top_srcdir)/include/erofs/compress_hints.h
> +      $(top_srcdir)/include/erofs/compress_hints.h \
> +      $(top_srcdir)/lib/liberofs_private.h
>
>  noinst_HEADERS += compressor.h
>  liberofs_la_SOURCES = config.c io.c cache.c super.c inode.c xattr.c
> exclude.c \
> diff --git a/lib/config.c b/lib/config.c
> index 363dcc5a0525..f1c8edfda2dc 100644
> --- a/lib/config.c
> +++ b/lib/config.c
> @@ -8,6 +8,7 @@
>  #include <stdlib.h>
>  #include "erofs/print.h"
>  #include "erofs/internal.h"
> +#include "liberofs_private.h"
>
>  struct erofs_configure cfg;
>  struct erofs_sb_info sbi;
> diff --git a/lib/inode.c b/lib/inode.c
> index 2fa74e2686c9..461c7978dbdf 100644
> --- a/lib/inode.c
> +++ b/lib/inode.c
> @@ -25,6 +25,7 @@
>  #include "erofs/block_list.h"
>  #include "erofs/compress_hints.h"
>  #include "erofs/blobchunk.h"
> +#include "liberofs_private.h"
>
>  #define S_SHIFT                 12
>  static unsigned char erofs_ftype_by_mode[S_IFMT >> S_SHIFT] = {
> diff --git a/lib/liberofs_private.h b/lib/liberofs_private.h
> new file mode 100644
> index 000000000000..c2312e8e7a31
> --- /dev/null
> +++ b/lib/liberofs_private.h
> @@ -0,0 +1,13 @@
> +/* SPDX-License-Identifier: GPL-2.0-only OR Apache-2.0 */
> +
> +#ifdef HAVE_LIBSELINUX
> +#include <selinux/selinux.h>
> +#include <selinux/label.h>
> +#endif
> +
> +#ifdef WITH_ANDROID
> +#include <selinux/android.h>
> +#include <private/android_filesystem_config.h>
> +#include <private/canned_fs_config.h>
> +#include <private/fs_config.h>
> +#endif
> diff --git a/lib/xattr.c b/lib/xattr.c
> index 196133a1a798..00fb963c68ef 100644
> --- a/lib/xattr.c
> +++ b/lib/xattr.c
> @@ -17,6 +17,7 @@
>  #include "erofs/xattr.h"
>  #include "erofs/cache.h"
>  #include "erofs/io.h"
> +#include "liberofs_private.h"
>
>  #define EA_HASHTABLE_BITS 16
>
> --
> 2.20.1
>
>

-- 
Sincerely,

Kelvin Zhang

[-- Attachment #2: Type: text/html, Size: 21527 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-12-01 17:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-01 13:53 [PATCH] erofs-utils: make liberofs more C++ friendly Gao Xiang
2021-12-01 17:58 ` Kelvin Zhang via Linux-erofs

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.