[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