>From a1ecefa1ca416790ef5965cd40b5eafe306e8986 Mon Sep 17 00:00:00 2001 From: Yury Usishchev Date: Thu, 11 Feb 2016 17:26:25 +0300 Subject: [PATCH] Rework visibility of symbols. Add visibility("default") for api functions. Rename hidden define to ACL_HIDDEN. --- include/misc.h | 14 ++++++++------ libacl/acl_add_perm.c | 2 +- libacl/acl_calc_mask.c | 2 +- libacl/acl_check.c | 2 +- libacl/acl_clear_perms.c | 2 +- libacl/acl_cmp.c | 2 +- libacl/acl_copy_entry.c | 2 +- libacl/acl_copy_ext.c | 2 +- libacl/acl_copy_int.c | 2 +- libacl/acl_create_entry.c | 2 +- libacl/acl_delete_def_file.c | 2 +- libacl/acl_delete_entry.c | 2 +- libacl/acl_delete_perm.c | 2 +- libacl/acl_dup.c | 2 +- libacl/acl_entries.c | 2 +- libacl/acl_equiv_mode.c | 2 +- libacl/acl_error.c | 2 +- libacl/acl_extended_fd.c | 2 +- libacl/acl_extended_file.c | 2 +- libacl/acl_extended_file_nofollow.c | 2 +- libacl/acl_free.c | 2 +- libacl/acl_from_mode.c | 2 +- libacl/acl_from_text.c | 2 +- libacl/acl_get_entry.c | 2 +- libacl/acl_get_fd.c | 2 +- libacl/acl_get_file.c | 2 +- libacl/acl_get_perm.c | 2 +- libacl/acl_get_permset.c | 2 +- libacl/acl_get_qualifier.c | 2 +- libacl/acl_get_tag_type.c | 2 +- libacl/acl_init.c | 2 +- libacl/acl_set_fd.c | 2 +- libacl/acl_set_file.c | 2 +- libacl/acl_set_permset.c | 2 +- libacl/acl_set_qualifier.c | 2 +- libacl/acl_set_tag_type.c | 2 +- libacl/acl_size.c | 2 +- libacl/acl_to_any_text.c | 2 +- libacl/acl_to_text.c | 2 +- libacl/acl_valid.c | 2 +- libacl/libacl.h | 16 ++++++++-------- libacl/libobj.h | 14 +++++++------- libacl/perm_copy_fd.c | 2 +- libacl/perm_copy_file.c | 2 +- 44 files changed, 64 insertions(+), 62 deletions(-) diff --git a/include/misc.h b/include/misc.h index 24b65d2..82899b5 100644 --- a/include/misc.h +++ b/include/misc.h @@ -24,17 +24,19 @@ /* Mark library internal functions as hidden */ #if defined(HAVE_VISIBILITY_ATTRIBUTE) -# define hidden __attribute__((visibility("hidden"))) +# define ACL_HIDDEN __attribute__((visibility("hidden"))) +# define ACL_API_EXPORT __attribute__ ((visibility ("default"))) #else -# define hidden /* hidden */ +# define ACL_HIDDEN /* hidden */ +# define ACL_API_EXPORT #endif -hidden int __acl_high_water_alloc(void **buf, size_t *bufsize, size_t newsize); +ACL_HIDDEN int __acl_high_water_alloc(void **buf, size_t *bufsize, size_t newsize); -hidden const char *__acl_quote(const char *str, const char *quote_chars); -hidden char *__acl_unquote(char *str); +ACL_HIDDEN const char *__acl_quote(const char *str, const char *quote_chars); +ACL_HIDDEN char *__acl_unquote(char *str); -hidden char *__acl_next_line(FILE *file); +ACL_HIDDEN char *__acl_next_line(FILE *file); #ifdef ENABLE_NLS # include diff --git a/libacl/acl_add_perm.c b/libacl/acl_add_perm.c index 58ce7f5..d245794 100644 --- a/libacl/acl_add_perm.c +++ b/libacl/acl_add_perm.c @@ -23,7 +23,7 @@ /* 23.4.1 */ -int +ACL_API_EXPORT int acl_add_perm(acl_permset_t permset_d, acl_perm_t perm) { acl_permset_obj *acl_permset_obj_p = ext2int(acl_permset, permset_d); diff --git a/libacl/acl_calc_mask.c b/libacl/acl_calc_mask.c index b2ec91a..02ae95e 100644 --- a/libacl/acl_calc_mask.c +++ b/libacl/acl_calc_mask.c @@ -23,7 +23,7 @@ /* 23.4.2 */ -int +ACL_API_EXPORT int acl_calc_mask(acl_t *acl_p) { acl_obj *acl_obj_p; diff --git a/libacl/acl_check.c b/libacl/acl_check.c index ebbc050..7c80898 100644 --- a/libacl/acl_check.c +++ b/libacl/acl_check.c @@ -40,7 +40,7 @@ 0 on success, -1 on error, or an ACL_*_ERROR value for invalid ACLs. */ -int +ACL_API_EXPORT int acl_check(acl_t acl, int *last) { acl_obj *acl_obj_p = ext2int(acl, acl); diff --git a/libacl/acl_clear_perms.c b/libacl/acl_clear_perms.c index 106e2d1..1fe4030 100644 --- a/libacl/acl_clear_perms.c +++ b/libacl/acl_clear_perms.c @@ -23,7 +23,7 @@ /* 23.4.3 */ -int +ACL_API_EXPORT int acl_clear_perms(acl_permset_t permset_d) { acl_permset_obj *acl_permset_obj_p = ext2int(acl_permset, permset_d); diff --git a/libacl/acl_cmp.c b/libacl/acl_cmp.c index ae42284..59fe6bd 100644 --- a/libacl/acl_cmp.c +++ b/libacl/acl_cmp.c @@ -22,7 +22,7 @@ #include "libacl.h" -int +ACL_API_EXPORT int acl_cmp(acl_t acl1, acl_t acl2) { acl_obj *acl1_obj_p = ext2int(acl, acl1), diff --git a/libacl/acl_copy_entry.c b/libacl/acl_copy_entry.c index 85cebc8..5757ee7 100644 --- a/libacl/acl_copy_entry.c +++ b/libacl/acl_copy_entry.c @@ -23,7 +23,7 @@ /* 23.4.4 */ -int +ACL_API_EXPORT int acl_copy_entry(acl_entry_t dest_d, acl_entry_t src_d) { acl_entry_obj *dest_p = ext2int(acl_entry, dest_d), diff --git a/libacl/acl_copy_ext.c b/libacl/acl_copy_ext.c index 7f51185..4ae7c91 100644 --- a/libacl/acl_copy_ext.c +++ b/libacl/acl_copy_ext.c @@ -23,7 +23,7 @@ /* 23.4.5 */ -ssize_t +ACL_API_EXPORT ssize_t acl_copy_ext(void *buf_p, acl_t acl, ssize_t size) { struct __acl *acl_ext = (struct __acl *)buf_p; diff --git a/libacl/acl_copy_int.c b/libacl/acl_copy_int.c index 7bcb0c9..6891fd7 100644 --- a/libacl/acl_copy_int.c +++ b/libacl/acl_copy_int.c @@ -23,7 +23,7 @@ /* 23.4.6 */ -acl_t +ACL_API_EXPORT acl_t acl_copy_int(const void *buf_p) { const struct __acl *ext_acl = (struct __acl *)buf_p; diff --git a/libacl/acl_create_entry.c b/libacl/acl_create_entry.c index a1c4908..d965faa 100644 --- a/libacl/acl_create_entry.c +++ b/libacl/acl_create_entry.c @@ -50,7 +50,7 @@ __acl_create_entry_obj(acl_obj *acl_obj_p) } /* 23.4.7 */ -int +ACL_API_EXPORT int acl_create_entry(acl_t *acl_p, acl_entry_t *entry_p) { acl_obj *acl_obj_p; diff --git a/libacl/acl_delete_def_file.c b/libacl/acl_delete_def_file.c index 845940c..11a7ff3 100644 --- a/libacl/acl_delete_def_file.c +++ b/libacl/acl_delete_def_file.c @@ -27,7 +27,7 @@ #include "libacl.h" /* 23.4.8 */ -int +ACL_API_EXPORT int acl_delete_def_file(const char *path_p) { int error; diff --git a/libacl/acl_delete_entry.c b/libacl/acl_delete_entry.c index a1ae6db..6bd5eee 100644 --- a/libacl/acl_delete_entry.c +++ b/libacl/acl_delete_entry.c @@ -23,7 +23,7 @@ /* 23.4.9 */ -int +ACL_API_EXPORT int acl_delete_entry(acl_t acl, acl_entry_t entry_d) { acl_obj *acl_obj_p = ext2int(acl, acl); diff --git a/libacl/acl_delete_perm.c b/libacl/acl_delete_perm.c index 0dcb36e..ebb0cad 100644 --- a/libacl/acl_delete_perm.c +++ b/libacl/acl_delete_perm.c @@ -23,7 +23,7 @@ /* 23.4.10 */ -int +ACL_API_EXPORT int acl_delete_perm(acl_permset_t permset_d, acl_perm_t perm) { acl_permset_obj *acl_permset_obj_p = ext2int(acl_permset, permset_d); diff --git a/libacl/acl_dup.c b/libacl/acl_dup.c index cb73cee..c93e3ac 100644 --- a/libacl/acl_dup.c +++ b/libacl/acl_dup.c @@ -23,7 +23,7 @@ /* 23.4.11 */ -acl_t +ACL_API_EXPORT acl_t acl_dup(acl_t acl) { acl_entry_obj *entry_obj_p, *dup_entry_obj_p; diff --git a/libacl/acl_entries.c b/libacl/acl_entries.c index fc4dcbf..6f62421 100644 --- a/libacl/acl_entries.c +++ b/libacl/acl_entries.c @@ -22,7 +22,7 @@ #include "libacl.h" -int +ACL_API_EXPORT int acl_entries(acl_t acl) { acl_obj *acl_obj_p = ext2int(acl, acl); diff --git a/libacl/acl_equiv_mode.c b/libacl/acl_equiv_mode.c index b4c6de3..2ad03bf 100644 --- a/libacl/acl_equiv_mode.c +++ b/libacl/acl_equiv_mode.c @@ -26,7 +26,7 @@ #include "libacl.h" -int +ACL_API_EXPORT int acl_equiv_mode(acl_t acl, mode_t *mode_p) { acl_obj *acl_obj_p = ext2int(acl, acl); diff --git a/libacl/acl_error.c b/libacl/acl_error.c index 8a361b0..0e1d928 100644 --- a/libacl/acl_error.c +++ b/libacl/acl_error.c @@ -26,7 +26,7 @@ #include "config.h" -const char * +ACL_API_EXPORT const char * acl_error(int code) { switch(code) { diff --git a/libacl/acl_extended_fd.c b/libacl/acl_extended_fd.c index bbf9055..43bb0a6 100644 --- a/libacl/acl_extended_fd.c +++ b/libacl/acl_extended_fd.c @@ -26,7 +26,7 @@ #include "byteorder.h" #include "acl_ea.h" -int +ACL_API_EXPORT int acl_extended_fd(int fd) { int base_size = sizeof(acl_ea_header) + 3 * sizeof(acl_ea_entry); diff --git a/libacl/acl_extended_file.c b/libacl/acl_extended_file.c index 87f8e6e..30f921a 100644 --- a/libacl/acl_extended_file.c +++ b/libacl/acl_extended_file.c @@ -26,7 +26,7 @@ #include "__acl_extended_file.h" -int +ACL_API_EXPORT int acl_extended_file(const char *path_p) { return __acl_extended_file(path_p, getxattr); diff --git a/libacl/acl_extended_file_nofollow.c b/libacl/acl_extended_file_nofollow.c index a15b076..c25f3b0 100644 --- a/libacl/acl_extended_file_nofollow.c +++ b/libacl/acl_extended_file_nofollow.c @@ -26,7 +26,7 @@ #include "__acl_extended_file.h" -int +ACL_API_EXPORT int acl_extended_file_nofollow(const char *path_p) { return __acl_extended_file(path_p, lgetxattr); diff --git a/libacl/acl_free.c b/libacl/acl_free.c index 8510bbf..3e68fb0 100644 --- a/libacl/acl_free.c +++ b/libacl/acl_free.c @@ -37,7 +37,7 @@ __acl_free_acl_obj(acl_obj *acl_obj_p) /* 23.4.12 */ -int +ACL_API_EXPORT int acl_free(void *obj_p) { obj_prefix *int_p = ((obj_prefix *)obj_p)-1; diff --git a/libacl/acl_from_mode.c b/libacl/acl_from_mode.c index 93dc689..680dc30 100644 --- a/libacl/acl_from_mode.c +++ b/libacl/acl_from_mode.c @@ -34,7 +34,7 @@ the new ACL. */ -acl_t +ACL_API_EXPORT acl_t acl_from_mode(mode_t mode) { acl_obj *acl_obj_p; diff --git a/libacl/acl_from_text.c b/libacl/acl_from_text.c index 83a4d21..f7f196d 100644 --- a/libacl/acl_from_text.c +++ b/libacl/acl_from_text.c @@ -40,7 +40,7 @@ static int parse_acl_entry(const char **text_p, acl_t *acl_p); /* 23.4.13 */ -acl_t +ACL_API_EXPORT acl_t acl_from_text(const char *buf_p) { acl_t acl; diff --git a/libacl/acl_get_entry.c b/libacl/acl_get_entry.c index 2a0de66..805758a 100644 --- a/libacl/acl_get_entry.c +++ b/libacl/acl_get_entry.c @@ -23,7 +23,7 @@ /* 23.4.14 */ -int +ACL_API_EXPORT int acl_get_entry(acl_t acl, int entry_id, acl_entry_t *entry_p) { acl_obj *acl_obj_p = ext2int(acl, acl); diff --git a/libacl/acl_get_fd.c b/libacl/acl_get_fd.c index 15e3880..4de5d1b 100644 --- a/libacl/acl_get_fd.c +++ b/libacl/acl_get_fd.c @@ -32,7 +32,7 @@ #include "acl_ea.h" /* 23.4.15 */ -acl_t +ACL_API_EXPORT acl_t acl_get_fd(int fd) { const size_t size_guess = acl_ea_size(16); diff --git a/libacl/acl_get_file.c b/libacl/acl_get_file.c index d3131bc..e5052f0 100644 --- a/libacl/acl_get_file.c +++ b/libacl/acl_get_file.c @@ -32,7 +32,7 @@ #include "acl_ea.h" /* 23.4.16 */ -acl_t +ACL_API_EXPORT acl_t acl_get_file(const char *path_p, acl_type_t type) { const size_t size_guess = acl_ea_size(16); diff --git a/libacl/acl_get_perm.c b/libacl/acl_get_perm.c index 31357b2..a56f6ef 100644 --- a/libacl/acl_get_perm.c +++ b/libacl/acl_get_perm.c @@ -22,7 +22,7 @@ #include "libacl.h" -int +ACL_API_EXPORT int acl_get_perm(acl_permset_t permset_d, acl_perm_t perm) { acl_permset_obj *acl_permset_obj_p = ext2int(acl_permset, permset_d); diff --git a/libacl/acl_get_permset.c b/libacl/acl_get_permset.c index 85749f2..81145b7 100644 --- a/libacl/acl_get_permset.c +++ b/libacl/acl_get_permset.c @@ -23,7 +23,7 @@ /* 23.4.17 */ -int +ACL_API_EXPORT int acl_get_permset(acl_entry_t entry_d, acl_permset_t *permset_p) { acl_entry_obj *entry_obj_p = ext2int(acl_entry, entry_d); diff --git a/libacl/acl_get_qualifier.c b/libacl/acl_get_qualifier.c index 0961acf..87ff473 100644 --- a/libacl/acl_get_qualifier.c +++ b/libacl/acl_get_qualifier.c @@ -23,7 +23,7 @@ /* 23.4.18 */ -void * +ACL_API_EXPORT void * acl_get_qualifier(acl_entry_t entry_d) { acl_entry_obj *entry_obj_p = ext2int(acl_entry, entry_d); diff --git a/libacl/acl_get_tag_type.c b/libacl/acl_get_tag_type.c index 3075178..8d144ec 100644 --- a/libacl/acl_get_tag_type.c +++ b/libacl/acl_get_tag_type.c @@ -23,7 +23,7 @@ /* 23.4.19 */ -int +ACL_API_EXPORT int acl_get_tag_type(acl_entry_t entry_d, acl_tag_t *tag_type_p) { acl_entry_obj *entry_obj_p = ext2int(acl_entry, entry_d); diff --git a/libacl/acl_init.c b/libacl/acl_init.c index 5880c10..4f408b9 100644 --- a/libacl/acl_init.c +++ b/libacl/acl_init.c @@ -55,7 +55,7 @@ __acl_init_obj(int count) /* 23.4.20 */ -acl_t +ACL_API_EXPORT acl_t acl_init(int count) { acl_obj *obj; diff --git a/libacl/acl_set_fd.c b/libacl/acl_set_fd.c index 38dcd4a..cdebe11 100644 --- a/libacl/acl_set_fd.c +++ b/libacl/acl_set_fd.c @@ -29,7 +29,7 @@ /* 23.4.21 */ -int +ACL_API_EXPORT int acl_set_fd(int fd, acl_t acl) { acl_obj *acl_obj_p = ext2int(acl, acl); diff --git a/libacl/acl_set_file.c b/libacl/acl_set_file.c index c234b4a..74714eb 100644 --- a/libacl/acl_set_file.c +++ b/libacl/acl_set_file.c @@ -31,7 +31,7 @@ /* 23.4.22 */ -int +ACL_API_EXPORT int acl_set_file(const char *path_p, acl_type_t type, acl_t acl) { acl_obj *acl_obj_p = ext2int(acl, acl); diff --git a/libacl/acl_set_permset.c b/libacl/acl_set_permset.c index 67bb520..0593796 100644 --- a/libacl/acl_set_permset.c +++ b/libacl/acl_set_permset.c @@ -23,7 +23,7 @@ /* 23.4.23 */ -int +ACL_API_EXPORT int acl_set_permset(acl_entry_t entry_d, acl_permset_t permset_d) { acl_entry_obj *entry_obj_p = ext2int(acl_entry, entry_d); diff --git a/libacl/acl_set_qualifier.c b/libacl/acl_set_qualifier.c index 59e86ff..71497f0 100644 --- a/libacl/acl_set_qualifier.c +++ b/libacl/acl_set_qualifier.c @@ -23,7 +23,7 @@ /* 23.4.24 */ -int +ACL_API_EXPORT int acl_set_qualifier(acl_entry_t entry_d, const void *tag_qualifier_p) { acl_entry_obj *entry_obj_p = ext2int(acl_entry, entry_d); diff --git a/libacl/acl_set_tag_type.c b/libacl/acl_set_tag_type.c index d2f2d67..2595b88 100644 --- a/libacl/acl_set_tag_type.c +++ b/libacl/acl_set_tag_type.c @@ -23,7 +23,7 @@ /* 23.4.25 */ -int +ACL_API_EXPORT int acl_set_tag_type(acl_entry_t entry_d, acl_tag_t tag_type) { acl_entry_obj *entry_obj_p = ext2int(acl_entry, entry_d); diff --git a/libacl/acl_size.c b/libacl/acl_size.c index 20aa692..afd5742 100644 --- a/libacl/acl_size.c +++ b/libacl/acl_size.c @@ -23,7 +23,7 @@ /* 23.4.26 */ -ssize_t +ACL_API_EXPORT ssize_t acl_size(acl_t acl) { acl_obj *acl_obj_p = ext2int(acl, acl); diff --git a/libacl/acl_to_any_text.c b/libacl/acl_to_any_text.c index 0d12539..bb67eda 100644 --- a/libacl/acl_to_any_text.c +++ b/libacl/acl_to_any_text.c @@ -27,7 +27,7 @@ #include #include "libacl.h" -char * +ACL_API_EXPORT char * acl_to_any_text(acl_t acl, const char *prefix, char separator, int options) { return __acl_to_any_text(acl, NULL, prefix, separator, NULL, options); diff --git a/libacl/acl_to_text.c b/libacl/acl_to_text.c index 1285b55..cddb71c 100644 --- a/libacl/acl_to_text.c +++ b/libacl/acl_to_text.c @@ -24,7 +24,7 @@ #include #include "libacl.h" -char * +ACL_API_EXPORT char * acl_to_text(acl_t acl, ssize_t *len_p) { return __acl_to_any_text(acl, len_p, NULL, '\n', "\n", diff --git a/libacl/acl_valid.c b/libacl/acl_valid.c index 2dda372..efefaba 100644 --- a/libacl/acl_valid.c +++ b/libacl/acl_valid.c @@ -25,7 +25,7 @@ /* 23.4.28 */ -int +ACL_API_EXPORT int acl_valid(acl_t acl) { int result; diff --git a/libacl/libacl.h b/libacl/libacl.h index 08ba905..eee3024 100644 --- a/libacl/libacl.h +++ b/libacl/libacl.h @@ -127,17 +127,17 @@ struct __acl { struct __acl_entry x_entries[0]; }; -extern int __acl_reorder_entry_obj_p(acl_entry_obj *acl_entry_obj_p) hidden; -extern int __acl_reorder_obj_p(acl_obj *acl_obj_p) hidden; +ACL_HIDDEN extern int __acl_reorder_entry_obj_p(acl_entry_obj *acl_entry_obj_p); +ACL_HIDDEN extern int __acl_reorder_obj_p(acl_obj *acl_obj_p); -extern acl_obj *__acl_init_obj(int count) hidden; -extern acl_entry_obj *__acl_create_entry_obj(acl_obj *acl_obj_p) hidden; -extern void __acl_free_acl_obj(acl_obj *acl_obj_p) hidden; +ACL_HIDDEN extern acl_obj *__acl_init_obj(int count); +ACL_HIDDEN extern acl_entry_obj *__acl_create_entry_obj(acl_obj *acl_obj_p); +ACL_HIDDEN extern void __acl_free_acl_obj(acl_obj *acl_obj_p); -extern char *__acl_to_any_text(acl_t acl, ssize_t *len_p, +ACL_HIDDEN extern char *__acl_to_any_text(acl_t acl, ssize_t *len_p, const char *prefix, char separator, - const char *suffix, int options) hidden; -extern int __apply_mask_to_mode(mode_t *mode, acl_t acl) hidden; + const char *suffix, int options); +ACL_HIDDEN extern int __apply_mask_to_mode(mode_t *mode, acl_t acl); #define FOREACH_ACL_ENTRY(entry_obj_p, acl_obj_p) \ for( (entry_obj_p) = (acl_obj_p)->anext; \ diff --git a/libacl/libobj.h b/libacl/libobj.h index c41d5f9..e900ab6 100644 --- a/libacl/libobj.h +++ b/libacl/libobj.h @@ -87,15 +87,15 @@ struct string_obj_tag { #define sstr i.s_str /* object creation, destruction, conversion and validation */ -void *__new_var_obj_p(int magic, size_t size) hidden; -void __new_obj_p_here(int magic, void *here) hidden; -void __free_obj_p(obj_prefix *obj_p) hidden; -obj_prefix *__check_obj_p(obj_prefix *obj_p, int magic) hidden; +ACL_HIDDEN void *__new_var_obj_p(int magic, size_t size); +ACL_HIDDEN void __new_obj_p_here(int magic, void *here); +ACL_HIDDEN void __free_obj_p(obj_prefix *obj_p); +ACL_HIDDEN obj_prefix *__check_obj_p(obj_prefix *obj_p, int magic); #ifdef LIBACL_DEBUG -obj_prefix *__ext2int_and_check(void *ext_p, int magic, - const char *typename) hidden; +ACL_HIDDEN obj_prefix *__ext2int_and_check(void *ext_p, int magic, + const char *typename); #else -obj_prefix *__ext2int_and_check(void *ext_p, int magic) hidden; +ACL_HIDDEN obj_prefix *__ext2int_and_check(void *ext_p, int magic); #endif #endif /* __LIBOBJ_H */ diff --git a/libacl/perm_copy_fd.c b/libacl/perm_copy_fd.c index f9ae690..5516dc4 100644 --- a/libacl/perm_copy_fd.c +++ b/libacl/perm_copy_fd.c @@ -142,7 +142,7 @@ chmod_only: /* Copy the permissions of src_path to dst_path. This includes the file mode permission bits and ACLs. File ownership is not copied. */ -int +ACL_API_EXPORT int perm_copy_fd (const char *src_path, int src_fd, const char *dst_path, int dst_fd, struct error_context *ctx) diff --git a/libacl/perm_copy_file.c b/libacl/perm_copy_file.c index 023294d..4103ab9 100644 --- a/libacl/perm_copy_file.c +++ b/libacl/perm_copy_file.c @@ -156,7 +156,7 @@ chmod_only: /* Copy the permissions of src_path to dst_path. This includes the file mode permission bits and ACLs. File ownership is not copied. */ -int +ACL_API_EXPORT int perm_copy_file (const char *src_path, const char *dst_path, struct error_context *ctx) { -- 2.7.1