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