[PATCH] include/cygwin/limits.h: add XATTR_{NAME,SIZE,LIST}_MAX
Corinna Vinschen
corinna-cygwin@cygwin.com
Fri Jun 16 15:04:06 GMT 2023
Hi Philippe,
On Jun 16 16:09, Philippe Cerfon wrote:
> Hey Corinna.
>
> On Wed, Jun 7, 2023 at 12:06 PM Corinna Vinschen
> <corinna-cygwin@cygwin.com> wrote:
> > Hmm, the comparisons would have to check for XATTR_NAME_MAX anyway,
> > so maybe inlining is cleaner in this case.
>
> Please have a look at the updated and attached patches.
>
> Thanks,
> Philippe.
Oh well. Now that I see it in real life, my idea to use the entire
expression inline wasn't that great, it seems...
I didn't want to keep MAX_EA_NAME_LEN because now that we have an
official name for the value, having an unofficial name using a different
naming convention is a bit weird.
On the other hand, having a macro for the expression certainly looks
much cleaner. Also, only one place to change (should a change ever be
necessary).
Sorry about that.
What do you think about something like _XATTR_NAME_MAX_ONDISK_?
I can also just push the patches and we discuss this further afterwards,
your call.
Thanks,
Corinna
> @@ -55,7 +54,7 @@ read_ea (HANDLE hdl, path_conv &pc, const char *name, char *value, size_t size)
> returns the last EA entry of the file infinitely. Even utilizing the
> optional EaIndex only helps marginally. If you use that, the last
> EA in the file is returned twice. */
> - char lastname[MAX_EA_NAME_LEN];
> + char lastname[(XATTR_NAME_MAX + 1 - strlen("user."))];
>
> __try
> {
> @@ -95,7 +94,7 @@ read_ea (HANDLE hdl, path_conv &pc, const char *name, char *value, size_t size)
> __leave;
> }
>
> - if ((nlen = strlen (name)) >= MAX_EA_NAME_LEN)
> + if ((nlen = strlen (name)) >= (XATTR_NAME_MAX + 1 - strlen("user.")))
> {
> set_errno (EINVAL);
> __leave;
> @@ -197,7 +196,7 @@ read_ea (HANDLE hdl, path_conv &pc, const char *name, char *value, size_t size)
> /* For compatibility with Linux, we always prepend "user." to
> the attribute name, so effectively we only support user
> attributes from a application point of view. */
> - char tmpbuf[MAX_EA_NAME_LEN * 2];
> + char tmpbuf[(XATTR_NAME_MAX + 1 - strlen("user.")) * 2];
> char *tp = stpcpy (tmpbuf, "user.");
> stpcpy (tp, fea->EaName);
> /* NTFS stores all EA names in uppercase unfortunately. To
> @@ -297,7 +296,7 @@ write_ea (HANDLE hdl, path_conv &pc, const char *name, const char *value,
> /* Skip "user." prefix. */
> name += 5;
>
> - if ((nlen = strlen (name)) >= MAX_EA_NAME_LEN)
> + if ((nlen = strlen (name)) >= (XATTR_NAME_MAX + 1 - strlen("user.")))
> {
> set_errno (EINVAL);
> __leave;
> --
> 2.40.1
>
More information about the Cygwin-patches
mailing list