xattr.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /*
  2. * Copyright (C) 2004 <solar@gentoo.org>
  3. * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
  4. *
  5. * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
  6. */
  7. /* This file provides the following Extended Attribute system calls to uClibc.
  8. *
  9. * setxattr(), lsetxattr(), fsetxattr(),
  10. * getxattr(), lgetxattr(), fgetxattr(),
  11. * listxattr(), llistxattr(), flistxattr(),
  12. * removexattr(), lremovexattr(), fremovexattr()
  13. *
  14. * Dec 2004 - <solar@gentoo.org>
  15. */
  16. /* Taken from the manpage.
  17. * On success, a positive number is returned indicating the size of the
  18. * extended attribute name list. On failure, -1 is returned and errno
  19. * is set appropriately. If extended attributes are not supported by the
  20. * filesystem, or are disabled, errno is set to ENOSYS.
  21. */
  22. #include "syscalls.h"
  23. #include <unistd.h>
  24. /* sets */
  25. #ifdef __NR_setxattr
  26. _syscall5(int, setxattr, const char *, path, const char *, name,
  27. const void *, value, size_t, size, int, flags);
  28. #else
  29. int setxattr(__const char *__path, __const char *__name,
  30. __const void *__value, size_t __size, int __flags)
  31. {
  32. __set_errno(ENOSYS);
  33. return -1;
  34. }
  35. #endif
  36. #ifdef __NR_lsetxattr
  37. _syscall5(int, lsetxattr, const char *, path, const char *, name,
  38. const void *, value, size_t, size, int, flags);
  39. #else
  40. int lsetxattr(__const char *__path, __const char *__name,
  41. __const void *__value, size_t __size, int __flags)
  42. {
  43. __set_errno(ENOSYS);
  44. return -1;
  45. }
  46. #endif
  47. #ifdef __NR_fsetxattr
  48. _syscall5(int, fsetxattr, int, filedes, const char *, name, const void *,
  49. value, size_t, size, int, flags);
  50. #else
  51. int fsetxattr(int __fd, __const char *__name, __const void *__value,
  52. size_t __size, int __flags)
  53. {
  54. __set_errno(ENOSYS);
  55. return -1;
  56. }
  57. #endif
  58. /* gets */
  59. #ifdef __NR_getxattr
  60. _syscall4(ssize_t, getxattr, const char *, path, const char *, name,
  61. void *, value, size_t, size);
  62. #else
  63. ssize_t getxattr(__const char *__path, __const char *__name, void *__value,
  64. size_t __size)
  65. {
  66. __set_errno(ENOSYS);
  67. return -1;
  68. }
  69. #endif
  70. #ifdef __NR_lgetxattr
  71. _syscall4(ssize_t, lgetxattr, const char *, path, const char *, name,
  72. void *, value, size_t, size);
  73. #else
  74. ssize_t lgetxattr(__const char *__path, __const char *__name,
  75. void *__value, size_t __size)
  76. {
  77. __set_errno(ENOSYS);
  78. return -1;
  79. }
  80. #endif
  81. #ifdef __NR_fgetxattr
  82. _syscall4(ssize_t, fgetxattr, int, filedes, const char *, name, void *,
  83. value, size_t, size);
  84. #else
  85. ssize_t fgetxattr(int __fd, __const char *__name, void *__value,
  86. size_t __size)
  87. {
  88. __set_errno(ENOSYS);
  89. return -1;
  90. }
  91. #endif
  92. /* list */
  93. #ifdef __NR_listxattr
  94. _syscall3(ssize_t, listxattr, const char *, path, char *, list, size_t,
  95. size);
  96. #else
  97. ssize_t listxattr(__const char *__path, char *__list, size_t __size)
  98. {
  99. __set_errno(ENOSYS);
  100. return -1;
  101. }
  102. #endif
  103. #ifdef __NR_llistxattr
  104. _syscall3(ssize_t, llistxattr, const char *, path, char *, list, size_t,
  105. size);
  106. #else
  107. ssize_t llistxattr(__const char *__path, char *__list, size_t __size)
  108. {
  109. __set_errno(ENOSYS);
  110. return -1;
  111. }
  112. #endif
  113. #ifdef __NR_flistxattr
  114. _syscall3(size_t, flistxattr, int, filedes, char *, list, size_t, size);
  115. #else
  116. ssize_t flistxattr(int __fd, char *__list, size_t __size)
  117. {
  118. __set_errno(ENOSYS);
  119. return -1;
  120. }
  121. #endif
  122. /* remove */
  123. #ifdef __NR_removexattr
  124. _syscall2(int, removexattr, const char *, path, const char *, name);
  125. #else
  126. int removexattr(__const char *__path, __const char *__name)
  127. {
  128. __set_errno(ENOSYS);
  129. return -1;
  130. }
  131. #endif
  132. #ifdef __NR_lremovexattr
  133. _syscall2(int, lremovexattr, const char *, path, const char *, name);
  134. #else
  135. int lremovexattr(__const char *__path, __const char *__name)
  136. {
  137. __set_errno(ENOSYS);
  138. return -1;
  139. }
  140. #endif
  141. #ifdef __NR_fremovexattr
  142. _syscall2(int, fremovexattr, int, filedes, const char *, name);
  143. #else
  144. int fremovexattr(int __fd, __const char *__name)
  145. {
  146. __set_errno(ENOSYS);
  147. return -1;
  148. }
  149. #endif