Lines 26-31
Link Here
|
26 |
#include <sys/syscall.h> |
26 |
#include <sys/syscall.h> |
27 |
#include <sys/xattr.h> |
27 |
#include <sys/xattr.h> |
28 |
|
28 |
|
|
|
29 |
/* |
30 |
* Versioning of compat symbols: |
31 |
* prefer symver attribute if available (since gcc 10), |
32 |
* fall back to traditional .symver asm directive otherwise. |
33 |
*/ |
34 |
#ifdef __has_attribute |
35 |
# if __has_attribute(symver) |
36 |
# define SYMVER(cn, vn) __typeof(cn) cn __attribute__((symver(vn))) |
37 |
# elif __has_attribute(no_reorder) |
38 |
/* |
39 |
* Avoid wrong partitioning with older gcc and LTO. May not work reliably |
40 |
* with all versions; use -flto-partition=none if you encounter problems. |
41 |
*/ |
42 |
# define SYMVER(cn, vn) __typeof(cn) cn __attribute__((noreorder)); \ |
43 |
__asm__(".symver " #cn "," vn) |
44 |
# endif |
45 |
#endif |
46 |
#ifndef SYMVER |
47 |
# define SYMVER(cn, vn) __asm__(".symver " #cn "," vn) |
48 |
#endif |
49 |
|
29 |
#ifdef HAVE_VISIBILITY_ATTRIBUTE |
50 |
#ifdef HAVE_VISIBILITY_ATTRIBUTE |
30 |
# pragma GCC visibility push(default) |
51 |
# pragma GCC visibility push(default) |
31 |
#endif |
52 |
#endif |
Lines 35-100
int libattr_setxattr(const char *path, const char *name,
Link Here
|
35 |
{ |
56 |
{ |
36 |
return syscall(__NR_setxattr, path, name, value, size, flags); |
57 |
return syscall(__NR_setxattr, path, name, value, size, flags); |
37 |
} |
58 |
} |
|
|
59 |
SYMVER(libattr_setxattr, "setxattr@ATTR_1.0"); |
38 |
|
60 |
|
39 |
int libattr_lsetxattr(const char *path, const char *name, |
61 |
int libattr_lsetxattr(const char *path, const char *name, |
40 |
void *value, size_t size, int flags) |
62 |
void *value, size_t size, int flags) |
41 |
{ |
63 |
{ |
42 |
return syscall(__NR_lsetxattr, path, name, value, size, flags); |
64 |
return syscall(__NR_lsetxattr, path, name, value, size, flags); |
43 |
} |
65 |
} |
|
|
66 |
SYMVER(libattr_lsetxattr, "lsetxattr@ATTR_1.0"); |
44 |
|
67 |
|
45 |
int libattr_fsetxattr(int filedes, const char *name, |
68 |
int libattr_fsetxattr(int filedes, const char *name, |
46 |
void *value, size_t size, int flags) |
69 |
void *value, size_t size, int flags) |
47 |
{ |
70 |
{ |
48 |
return syscall(__NR_fsetxattr, filedes, name, value, size, flags); |
71 |
return syscall(__NR_fsetxattr, filedes, name, value, size, flags); |
49 |
} |
72 |
} |
|
|
73 |
SYMVER(libattr_fsetxattr, "fsetxattr@ATTR_1.0"); |
50 |
|
74 |
|
51 |
ssize_t libattr_getxattr(const char *path, const char *name, |
75 |
ssize_t libattr_getxattr(const char *path, const char *name, |
52 |
void *value, size_t size) |
76 |
void *value, size_t size) |
53 |
{ |
77 |
{ |
54 |
return syscall(__NR_getxattr, path, name, value, size); |
78 |
return syscall(__NR_getxattr, path, name, value, size); |
55 |
} |
79 |
} |
|
|
80 |
SYMVER(libattr_getxattr, "getxattr@ATTR_1.0"); |
56 |
|
81 |
|
57 |
ssize_t libattr_lgetxattr(const char *path, const char *name, |
82 |
ssize_t libattr_lgetxattr(const char *path, const char *name, |
58 |
void *value, size_t size) |
83 |
void *value, size_t size) |
59 |
{ |
84 |
{ |
60 |
return syscall(__NR_lgetxattr, path, name, value, size); |
85 |
return syscall(__NR_lgetxattr, path, name, value, size); |
61 |
} |
86 |
} |
|
|
87 |
SYMVER(libattr_lgetxattr, "lgetxattr@ATTR_1.0"); |
62 |
|
88 |
|
63 |
ssize_t libattr_fgetxattr(int filedes, const char *name, |
89 |
ssize_t libattr_fgetxattr(int filedes, const char *name, |
64 |
void *value, size_t size) |
90 |
void *value, size_t size) |
65 |
{ |
91 |
{ |
66 |
return syscall(__NR_fgetxattr, filedes, name, value, size); |
92 |
return syscall(__NR_fgetxattr, filedes, name, value, size); |
67 |
} |
93 |
} |
|
|
94 |
SYMVER(libattr_fgetxattr, "fgetxattr@ATTR_1.0"); |
68 |
|
95 |
|
69 |
ssize_t libattr_listxattr(const char *path, char *list, size_t size) |
96 |
ssize_t libattr_listxattr(const char *path, char *list, size_t size) |
70 |
{ |
97 |
{ |
71 |
return syscall(__NR_listxattr, path, list, size); |
98 |
return syscall(__NR_listxattr, path, list, size); |
72 |
} |
99 |
} |
|
|
100 |
SYMVER(libattr_listxattr, "listxattr@ATTR_1.0"); |
73 |
|
101 |
|
74 |
ssize_t libattr_llistxattr(const char *path, char *list, size_t size) |
102 |
ssize_t libattr_llistxattr(const char *path, char *list, size_t size) |
75 |
{ |
103 |
{ |
76 |
return syscall(__NR_llistxattr, path, list, size); |
104 |
return syscall(__NR_llistxattr, path, list, size); |
77 |
} |
105 |
} |
|
|
106 |
SYMVER(libattr_llistxattr, "llistxattr@ATTR_1.0"); |
78 |
|
107 |
|
79 |
ssize_t libattr_flistxattr(int filedes, char *list, size_t size) |
108 |
ssize_t libattr_flistxattr(int filedes, char *list, size_t size) |
80 |
{ |
109 |
{ |
81 |
return syscall(__NR_flistxattr, filedes, list, size); |
110 |
return syscall(__NR_flistxattr, filedes, list, size); |
82 |
} |
111 |
} |
|
|
112 |
SYMVER(libattr_flistxattr, "flistxattr@ATTR_1.0"); |
83 |
|
113 |
|
84 |
int libattr_removexattr(const char *path, const char *name) |
114 |
int libattr_removexattr(const char *path, const char *name) |
85 |
{ |
115 |
{ |
86 |
return syscall(__NR_removexattr, path, name); |
116 |
return syscall(__NR_removexattr, path, name); |
87 |
} |
117 |
} |
|
|
118 |
SYMVER(libattr_removexattr, "removexattr@ATTR_1.0"); |
88 |
|
119 |
|
89 |
int libattr_lremovexattr(const char *path, const char *name) |
120 |
int libattr_lremovexattr(const char *path, const char *name) |
90 |
{ |
121 |
{ |
91 |
return syscall(__NR_lremovexattr, path, name); |
122 |
return syscall(__NR_lremovexattr, path, name); |
92 |
} |
123 |
} |
|
|
124 |
SYMVER(libattr_lremovexattr, "lremovexattr@ATTR_1.0"); |
93 |
|
125 |
|
94 |
int libattr_fremovexattr(int filedes, const char *name) |
126 |
int libattr_fremovexattr(int filedes, const char *name) |
95 |
{ |
127 |
{ |
96 |
return syscall(__NR_fremovexattr, filedes, name); |
128 |
return syscall(__NR_fremovexattr, filedes, name); |
97 |
} |
129 |
} |
|
|
130 |
SYMVER(libattr_fremovexattr, "fremovexattr@ATTR_1.0"); |
98 |
|
131 |
|
99 |
#ifdef HAVE_VISIBILITY_ATTRIBUTE |
132 |
#ifdef HAVE_VISIBILITY_ATTRIBUTE |
100 |
# pragma GCC visibility pop |
133 |
# pragma GCC visibility pop |
101 |
- |
|
|