PATCH: export XATTR_{NAME,SIZE,LIST}_MAX

Philippe Cerfon <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <CAN+za=MhQdD2mzYxqVAm9ZwBUBKsyPiH+9T5xfGXtgxq1X1LAA@mail.gmail.com>
Hey there.

Linux exports XATTR_{NAME,SIZE,LIST}_MAX in it's linux/limits.h and
e.g. the CPython interpreter uses them for it's XATTRs functions.

I made a corresponding PR at CPython
https://github.com/python/cpython/pull/105075 to get the code built
for Cygwin, but right now this would fail due to the missing
XATTR_*_MAX symbols.

The attached patch below would add them to cygwin/limits.h.

But beware, I'm absolutely no Windows/Cygwin expert ^^ - so whether
the values I've chosen are actually correct, is more guesswork rather
than definite knowledge.

As written in the commit message, I think:
- XATTR_NAME_MAX corresponds to MAX_EA_NAME_LEN
and
- XATTR_SIZE_MAX to MAX_EA_VALUE_LEN

though I have no idea, whether these are just lower boundaries used by
Cygwin, while e.g. Windows itself might set longer names or value
lenghts, and thus - when Cygwin would try to read such - it might get
into troubles (or rather e.g. CPython, as it's buffers wouldn't
suffice to read the EA respectively XATTR.

Neither to i have an idea about XATTR_LIST_MAX. I'm not even 100% sure
what it means (I guess the max number of XATTRs per file). Not to
speak about whether there's such maximum for Windows EAs,
And again - as above - what would happen if Windows itself would set
more than that limit and within Cygwin one would try to read/list all.

Thanks,
Philippe
0001-export-XATTR_-NAME-SIZE-LIST-_MAX.patch (text/x-patch, 1.2 KB)
From 824bcdf053bfb86570c7edda3c018626dc857a8b Mon Sep 17 00:00:00 2001
From: Philippe Cerfon <[email protected]>
Date: Tue, 30 May 2023 13:16:18 +0200
Subject: [PATCH] export XATTR_{NAME,SIZE,LIST}_MAX

These are used for example by CPython. XATTR_NAME_MAX should correspond to
MAX_EA_NAME_LEN and XATTR_SIZE_MAX to MAX_EA_VALUE_LEN.

It's unclear whether Windows imposes a maximum number of EA's per file and which
value should be used for XATTR_LIST_MAX, so for now Linux' value.

Signed-off-by: Philippe Cerfon <[email protected]>
---
 winsup/cygwin/include/cygwin/limits.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/winsup/cygwin/include/cygwin/limits.h b/winsup/cygwin/include/cygwin/limits.h
index aefc7c7bd..939ab4f38 100644
--- a/winsup/cygwin/include/cygwin/limits.h
+++ b/winsup/cygwin/include/cygwin/limits.h
@@ -56,4 +56,11 @@ details. */
 #define __PATH_MAX 4096
 #define __PIPE_BUF 4096
 
+/* Keep in sync with MAX_EA_NAME_LEN respectively MAX_EA_VALUE_LEN in
+ * winsup/cygwin/ntea.cc but don not use values that exceed their Linux
+ * counterparts as defined in linux/limits.h. */
+#define XATTR_NAME_MAX 255
+#define XATTR_SIZE_MAX 65536
+#define XATTR_LIST_MAX 65536
+
 #endif /* _CYGWIN_LIMITS_H__ */
-- 
2.40.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.