Thank you for continuing the discussion.
The reply was delayed to summarize the arguing points.

> I already gave my comment on previous thread, and I prefer de array handling 
> I sent instead of only two entries.
We haven't discussed enough yet and I have some questions.
I still don't understand what's technically problem.

> It will avoid repetitive loops to get entries from cache buffer.
Is that loop the first verification and name extraction?
I don't understand why you can avoid the repetitive loop by using arrays.
I think getting from an array is equivalent to getting it via a function.
   A = obj->array[idx];
   B = get(obj, idx);
For using, what's the difference between A and B?

> I think it is also suitable for function definition and union type  entry 
> structure.
I, too, think the combination is not bad.
However, it has no advantage compared to other methods.
(Can you give me any example?)
Also, as I said in my previous mail, union has the problem of too flexible for 
type.
(Especially file-de and stream-de are easy to confuse)
So I want to avoid to access union directly from the upper function, as 
possible.

> If you send the patches included this change again, I will actively look into 
> your patches.
It will take some time as I haven't come up with a good idea yet.

We have discussed it so far, but there are still some unclear points.
First, I would like to clarify them.

1. About the need for TYPE_NAME-validation in exfat_get_dentry_set().
My opinion is
> It is possible to correctly determine that
> "Immediately follow the Stream Extension directory entry as a consecutive 
> series"
> whether the TYPE_NAME check is implemented exfat_get_uniname_from_ext_entry() 
> or
> exfat_get_dentry_set().
> It's functionally same, so it is also right to validate in either.

Your opinion is
> We have not checked the problem when it is removed because it was implemented
> according to the specification from the beginning.

I understand that you haven't thought about it yet.
What happens if I don't check here?
Please imagine if you can.


2. About TYPE_NAME-validation in exfat_get_uniname_from_ext_entry()
Below are the changes in '[PATCH v4 1/5] exfat: integrates dir-entry getting 
and validation'
> -     for (i = 2; i < es->num_entries; i++) {
> -             struct exfat_dentry *ep = exfat_get_dentry_cached(es, i);
> -
> -             /* end of name entry */
> -             if (exfat_get_entry_type(ep) != TYPE_EXTEND)
> -                     break;
>
> +     i = ES_INDEX_NAME;
> +     while ((ep = exfat_get_validated_dentry(es, i++, TYPE_NAME))) {
>               exfat_extract_uni_name(ep, uniname);
>               uniname += EXFAT_FILE_NAME_LEN;
>       }

Your request for this change is
> Please find the way to access name entries like ep_file, ep_stream
> without calling exfat_get_validated_dentry().

What is the reason(or rationale) for such a request?
Please explain what the problem is with this change, if you can.

As I explained before, the reason for validating TYPE_NAME here is
> name-length and type validation and name-extraction should not be separated.
> These are closely related, so these should be placed physically and 
> temporally close.

Please explain why you shouldn't validate TYPE_NAME here.


3. About using exfat_get_validated_dentry() in 
exfat_update_dir_chksum_with_entry_set()
Below are the changes in '[PATCH v4 1/5] exfat: integrates dir-entry getting 
and validation'
>       for (i = 0; i < es->num_entries; i++) {
> -             ep = exfat_get_dentry_cached(es, i);
> +             ep = exfat_get_validated_dentry(es, i, TYPE_ALL);
>               chksum = exfat_calc_chksum16(ep, DENTRY_SIZE, chksum,
>                                            chksum_type);

Your request for this change is
> Ditto, You do not need to repeatedly call exfat_get_validated_dentry() for 
> the entries
> which got from exfat_get_dentry_set().

Even if the entry was got from exfat_get_dentry_set(), we need to get the ep 
again to calculate the checksum.
exfat_get_validated_dentry() with TYPE_ALL is the same as 
exfat_get_dentry_cached() because it allows all TYPEs.
Please elaborate on what the problem is.


4. About double-checking name entries as TYPE_SECONDARY and TYPE_NAME.
You said in 'RE: [PATCH v3] exfat: integrates dir-entry getting and validation'.
> your v3 patch are
> already checking the name entries as TYPE_SECONDARY. And it check them with
> TYPE_NAME again in exfat_get_uniname_from_ext_entry(). If you check TYPE_NAME
> with stream->name_len, We don't need to perform the loop for extracting
> filename from the name entries if stream->name_len or name entry is invalid.

It is rare case that stream->name_len or name-entry are invalid.
Perform the loop to extract filename when stream->name_len or name-entry is 
invalid has little effect.
What is the probrem with perform the loop for extract filename when 
stream->name_len or name-entry are invalid?


5. About validate flags as argument of exfat_get_dentry_set().
You suggested
> You can add a validate flags as argument of exfat_get_dentry_set(), e.g. 
> none, basic and strict.
> So as I suggested earlier, You can make it with an argument flags so that we 
> skip the validation.

What are the advantages of skipping validation with this flag?
I don't think there's any advantage worth the complexity of the code.


This discussion may take some time, but I hope you continue the discussion.

BR
---
Tetsuhiro Kohada <kohada...@gmail.com>

Reply via email to