>From cfc1b241b1471ea02f21840ee94839af5dbe2fef Mon Sep 17 00:00:00 2001 From: Yury Usishchev Date: Thu, 11 Feb 2016 17:26:25 +0300 Subject: [PATCH] Add visibility("default") attribute for api functions --- include/acl.h | 61 ++++++++++++++++++++++++++----------------------- include/libacl.h | 31 ++++++++++++++----------- m4/visibility_hidden.m4 | 2 ++ 3 files changed, 53 insertions(+), 41 deletions(-) diff --git a/include/acl.h b/include/acl.h index e3347e1..63c9bea 100644 --- a/include/acl.h +++ b/include/acl.h @@ -27,6 +27,11 @@ extern "C" { #endif +/*=== Api export ===*/ +#ifndef ACL_API_EXPORT +# define ACL_API_EXPORT extern +#endif + /*=== Data types ===*/ struct __acl_ext; @@ -77,50 +82,50 @@ typedef struct __acl_permset_ext *acl_permset_t; /*=== ACL manipulation ===*/ -extern acl_t acl_init(int count); -extern acl_t acl_dup(acl_t acl); -extern int acl_free(void *obj_p); -extern int acl_valid(acl_t acl); +ACL_API_EXPORT acl_t acl_init(int count); +ACL_API_EXPORT acl_t acl_dup(acl_t acl); +ACL_API_EXPORT int acl_free(void *obj_p); +ACL_API_EXPORT int acl_valid(acl_t acl); /*=== Entry manipulation ===*/ -extern int +ACL_API_EXPORT int acl_copy_entry(acl_entry_t dest_d, acl_entry_t src_d); -extern int acl_create_entry(acl_t *acl_p, acl_entry_t *entry_p); -extern int acl_delete_entry(acl_t acl, acl_entry_t entry_d); -extern int acl_get_entry(acl_t acl, int entry_id, acl_entry_t *entry_p); +ACL_API_EXPORT int acl_create_entry(acl_t *acl_p, acl_entry_t *entry_p); +ACL_API_EXPORT int acl_delete_entry(acl_t acl, acl_entry_t entry_d); +ACL_API_EXPORT int acl_get_entry(acl_t acl, int entry_id, acl_entry_t *entry_p); /* Manipulate ACL entry permissions */ -extern int acl_add_perm(acl_permset_t permset_d, acl_perm_t perm); -extern int acl_calc_mask(acl_t *acl_p); -extern int acl_clear_perms(acl_permset_t permset_d); -extern int acl_delete_perm(acl_permset_t permset_d, acl_perm_t perm); -extern int acl_get_permset(acl_entry_t entry_d, acl_permset_t *permset_p); -extern int acl_set_permset(acl_entry_t entry_d, acl_permset_t permset_d); +ACL_API_EXPORT int acl_add_perm(acl_permset_t permset_d, acl_perm_t perm); +ACL_API_EXPORT int acl_calc_mask(acl_t *acl_p); +ACL_API_EXPORT int acl_clear_perms(acl_permset_t permset_d); +ACL_API_EXPORT int acl_delete_perm(acl_permset_t permset_d, acl_perm_t perm); +ACL_API_EXPORT int acl_get_permset(acl_entry_t entry_d, acl_permset_t *permset_p); +ACL_API_EXPORT int acl_set_permset(acl_entry_t entry_d, acl_permset_t permset_d); /* Manipulate ACL entry tag type and qualifier */ -extern void * acl_get_qualifier(acl_entry_t entry_d); -extern int acl_get_tag_type(acl_entry_t entry_d, acl_tag_t *tag_type_p); -extern int acl_set_qualifier(acl_entry_t entry_d, const void *tag_qualifier_p); -extern int acl_set_tag_type(acl_entry_t entry_d, acl_tag_t tag_type); +ACL_API_EXPORT void * acl_get_qualifier(acl_entry_t entry_d); +ACL_API_EXPORT int acl_get_tag_type(acl_entry_t entry_d, acl_tag_t *tag_type_p); +ACL_API_EXPORT int acl_set_qualifier(acl_entry_t entry_d, const void *tag_qualifier_p); +ACL_API_EXPORT int acl_set_tag_type(acl_entry_t entry_d, acl_tag_t tag_type); /*=== Format translation ===*/ -extern ssize_t acl_copy_ext(void *buf_p, acl_t acl, ssize_t size); -extern acl_t acl_copy_int(const void *buf_p); -extern acl_t acl_from_text(const char *buf_p); -extern ssize_t acl_size(acl_t acl); -extern char *acl_to_text(acl_t acl, ssize_t *len_p); +ACL_API_EXPORT ssize_t acl_copy_ext(void *buf_p, acl_t acl, ssize_t size); +ACL_API_EXPORT acl_t acl_copy_int(const void *buf_p); +ACL_API_EXPORT acl_t acl_from_text(const char *buf_p); +ACL_API_EXPORT ssize_t acl_size(acl_t acl); +ACL_API_EXPORT char *acl_to_text(acl_t acl, ssize_t *len_p); /*=== Object manipulation ===*/ -extern int acl_delete_def_file(const char *path_p); -extern acl_t acl_get_fd(int fd); -extern acl_t acl_get_file(const char *path_p, acl_type_t type); -extern int acl_set_fd(int fd, acl_t acl); -extern int acl_set_file(const char *path_p, acl_type_t type, acl_t acl); +ACL_API_EXPORT int acl_delete_def_file(const char *path_p); +ACL_API_EXPORT acl_t acl_get_fd(int fd); +ACL_API_EXPORT acl_t acl_get_file(const char *path_p, acl_type_t type); +ACL_API_EXPORT int acl_set_fd(int fd, acl_t acl); +ACL_API_EXPORT int acl_set_file(const char *path_p, acl_type_t type, acl_t acl); #ifdef __cplusplus } diff --git a/include/libacl.h b/include/libacl.h index d6a6650..237885f 100644 --- a/include/libacl.h +++ b/include/libacl.h @@ -26,6 +26,11 @@ extern "C" { #endif +/*=== Api export ===*/ +#ifndef ACL_API_EXPORT +# define ACL_API_EXPORT extern +#endif + /* Flags for acl_to_any_text() */ /* Print NO, SOME or ALL effective permissions comments. SOME prints @@ -52,24 +57,24 @@ extern "C" { #define ACL_MISS_ERROR (0x3000) /* missing required entry */ #define ACL_ENTRY_ERROR (0x4000) /* wrong entry type */ -extern char *acl_to_any_text(acl_t acl, const char *prefix, +ACL_API_EXPORT char *acl_to_any_text(acl_t acl, const char *prefix, char separator, int options); -extern int acl_cmp(acl_t acl1, acl_t acl2); -extern int acl_check(acl_t acl, int *last); -extern acl_t acl_from_mode(mode_t mode); -extern int acl_equiv_mode(acl_t acl, mode_t *mode_p); -int acl_extended_file(const char *path_p); -int acl_extended_file_nofollow(const char *path_p); -int acl_extended_fd(int fd); -extern int acl_entries(acl_t acl); -extern const char *acl_error(int code); -extern int acl_get_perm(acl_permset_t permset_d, acl_perm_t perm); +ACL_API_EXPORT int acl_cmp(acl_t acl1, acl_t acl2); +ACL_API_EXPORT int acl_check(acl_t acl, int *last); +ACL_API_EXPORT acl_t acl_from_mode(mode_t mode); +ACL_API_EXPORT int acl_equiv_mode(acl_t acl, mode_t *mode_p); +ACL_API_EXPORT int acl_extended_file(const char *path_p); +ACL_API_EXPORT int acl_extended_file_nofollow(const char *path_p); +ACL_API_EXPORT int acl_extended_fd(int fd); +ACL_API_EXPORT int acl_entries(acl_t acl); +ACL_API_EXPORT const char *acl_error(int code); +ACL_API_EXPORT int acl_get_perm(acl_permset_t permset_d, acl_perm_t perm); /* Copying permissions between files */ struct error_context; -extern int perm_copy_file (const char *, const char *, +ACL_API_EXPORT int perm_copy_file (const char *, const char *, struct error_context *); -extern int perm_copy_fd (const char *, int, const char *, int, +ACL_API_EXPORT int perm_copy_fd (const char *, int, const char *, int, struct error_context *); #ifdef __cplusplus diff --git a/m4/visibility_hidden.m4 b/m4/visibility_hidden.m4 index 808a8e3..53223cc 100644 --- a/m4/visibility_hidden.m4 +++ b/m4/visibility_hidden.m4 @@ -32,5 +32,7 @@ EOF ]) if test $libc_cv_visibility_attribute = yes; then AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE, [], [GCC supports visibility attributes]) + AC_DEFINE(ACL_API_EXPORT, [__attribute__ ((visibility ("default"))) extern], [Visibility attribute for API symbols]) + CFLAGS+=" -fvisibility=hidden" fi ]) -- 2.7.1