Nullability check for xattr module.
Bugs: b/245972273
Test: adb shell
Change-Id: I0137c86f3fa7e17fb5fe284c7693315b2df1e2db
diff --git a/libc/include/sys/xattr.h b/libc/include/sys/xattr.h
index dc58026..745f50c 100644
--- a/libc/include/sys/xattr.h
+++ b/libc/include/sys/xattr.h
@@ -44,90 +44,114 @@
* sets an extended attribute on the file referred to by the given file
* descriptor.
*
+ * A `size` of 0 can be used to set an empty value, in which case `value` is
+ * ignored and may be null. Setting an xattr to an empty value is not the same
+ * as removing an xattr; see removexattr() for the latter operation.
+ *
* Valid flags are `XATTR_CREATE` and `XATTR_REPLACE`.
*
* Returns 0 on success and returns -1 and sets `errno` on failure.
*/
-int fsetxattr(int __fd, const char* __name, const void* __value, size_t __size, int __flags);
+int fsetxattr(int __fd, const char* _Nonnull __name, const void* _Nullable __value, size_t __size, int __flags);
/**
* [setxattr(2)](http://man7.org/linux/man-pages/man2/setxattr.2.html)
* sets an extended attribute on the file referred to by the given path.
*
+ * A `size` of 0 can be used to set an empty value, in which case `value` is
+ * ignored and may be null. Setting an xattr to an empty value is not the same
+ * as removing an xattr; see removexattr() for the latter operation.
+ *
* Valid flags are `XATTR_CREATE` and `XATTR_REPLACE`.
*
* Returns 0 on success and returns -1 and sets `errno` on failure.
*/
-int setxattr(const char* __path, const char* __name, const void* __value, size_t __size, int __flags);
+int setxattr(const char* _Nonnull __path, const char* _Nonnull __name, const void* _Nullable __value, size_t __size, int __flags);
/**
* [lsetxattr(2)](http://man7.org/linux/man-pages/man2/lsetxattr.2.html)
* sets an extended attribute on the file referred to by the given path, which
* is the link itself rather than its target in the case of a symbolic link.
*
+ * A `size` of 0 can be used to set an empty value, in which case `value` is
+ * ignored and may be null. Setting an xattr to an empty value is not the same
+ * as removing an xattr; see removexattr() for the latter operation.
+ *
* Valid flags are `XATTR_CREATE` and `XATTR_REPLACE`.
*
* Returns 0 on success and returns -1 and sets `errno` on failure.
*/
-int lsetxattr(const char* __path, const char* __name, const void* __value, size_t __size, int __flags);
+int lsetxattr(const char* _Nonnull __path, const char* _Nonnull __name, const void* _Nullable __value, size_t __size, int __flags);
/**
* [fgetxattr(2)](http://man7.org/linux/man-pages/man2/fgetxattr.2.html)
* gets an extended attribute on the file referred to by the given file
* descriptor.
*
+ * A `size` of 0 can be used to query the current length, in which case `value` is ignored and may be null.
+ *
* Returns the non-negative length of the value on success, or
* returns -1 and sets `errno` on failure.
*/
-ssize_t fgetxattr(int __fd, const char* __name, void* __value, size_t __size);
+ssize_t fgetxattr(int __fd, const char* _Nonnull __name, void* _Nullable __value, size_t __size);
/**
* [getxattr(2)](http://man7.org/linux/man-pages/man2/getxattr.2.html)
* gets an extended attribute on the file referred to by the given path.
*
+ * A `size` of 0 can be used to query the current length, in which case `value` is ignored and may be null.
+ *
* Returns the non-negative length of the value on success, or
* returns -1 and sets `errno` on failure.
*/
-ssize_t getxattr(const char* __path, const char* __name, void* __value, size_t __size);
+ssize_t getxattr(const char* _Nonnull __path, const char* _Nonnull __name, void* _Nullable __value, size_t __size);
/**
* [lgetxattr(2)](http://man7.org/linux/man-pages/man2/lgetxattr.2.html)
* gets an extended attribute on the file referred to by the given path, which
* is the link itself rather than its target in the case of a symbolic link.
*
+ * A `size` of 0 can be used to query the current length, in which case `value` is ignored and may be null.
+ *
* Returns the non-negative length of the value on success, or
* returns -1 and sets `errno` on failure.
*/
-ssize_t lgetxattr(const char* __path, const char* __name, void* __value, size_t __size);
+ssize_t lgetxattr(const char* _Nonnull __path, const char* _Nonnull __name, void* _Nullable __value, size_t __size);
/**
* [flistxattr(2)](http://man7.org/linux/man-pages/man2/flistxattr.2.html)
* lists the extended attributes on the file referred to by the given file
* descriptor.
*
+ * A `size` of 0 can be used to query the current length, in which case `list` is ignored and may be null.
+ *
* Returns the non-negative length of the list on success, or
* returns -1 and sets `errno` on failure.
*/
-ssize_t flistxattr(int __fd, char* __list, size_t __size);
+ssize_t flistxattr(int __fd, char* _Nullable __list, size_t __size);
/**
* [listxattr(2)](http://man7.org/linux/man-pages/man2/listxattr.2.html)
* lists the extended attributes on the file referred to by the given path.
*
+ * A `size` of 0 can be used to query the current length, in which case `list` is ignored and may be null.
+ *
* Returns the non-negative length of the list on success, or
* returns -1 and sets `errno` on failure.
*/
-ssize_t listxattr(const char* __path, char* __list, size_t __size);
+ssize_t listxattr(const char* _Nonnull __path, char* _Nullable __list, size_t __size);
/**
* [llistxattr(2)](http://man7.org/linux/man-pages/man2/llistxattr.2.html)
* lists the extended attributes on the file referred to by the given path, which
* is the link itself rather than its target in the case of a symbolic link.
*
+ * A `size` of 0 can be used to query the current length, in which case `list` is ignored and may be null.
+ *
* Returns the non-negative length of the list on success, or
* returns -1 and sets `errno` on failure.
*/
-ssize_t llistxattr(const char* __path, char* __list, size_t __size);
+ssize_t llistxattr(const char* _Nonnull __path, char* _Nullable __list, size_t __size);
/**
* [fremovexattr(2)](http://man7.org/linux/man-pages/man2/fremovexattr.2.html)
@@ -136,7 +160,7 @@
*
* Returns 0 on success and returns -1 and sets `errno` on failure.
*/
-int fremovexattr(int __fd, const char* __name);
+int fremovexattr(int __fd, const char* _Nonnull __name);
/**
* [lremovexattr(2)](http://man7.org/linux/man-pages/man2/lremovexattr.2.html)
@@ -145,7 +169,7 @@
*
* Returns 0 on success and returns -1 and sets `errno` on failure.
*/
-int lremovexattr(const char* __path, const char* __name);
+int lremovexattr(const char* _Nonnull __path, const char* _Nonnull __name);
/**
* [removexattr(2)](http://man7.org/linux/man-pages/man2/removexattr.2.html)
@@ -153,6 +177,6 @@
*
* Returns 0 on success and returns -1 and sets `errno` on failure.
*/
-int removexattr(const char* __path, const char* __name);
+int removexattr(const char* _Nonnull __path, const char* _Nonnull __name);
__END_DECLS