1: This is not char copy, but memory copy. 2: The reason memcpy today doesn’t support this feature is because it only work with DF=0 (REP MOVSB). We can easily extend to support
DF=1.
[Cao, Minggui] sorry, I mixed the copy and move; it shall be like memmove. Just checked the memory.c code in HV.
Is it OK as follows? memcpy_erms --> memmove_erms (void *d, const void *s, size_t slen, bool df_flag) as a public API?
The caller side clearly know the copy to be from head to tail address or from tail to head address. How about to define another API like memcpy_tail_to_head or memcpy_rev ?
The caller side can choose normal memcpy or tail_to_head copy API.
[Cao, Minggui] normally memcpy (also in HV), it will not handle the src and dst overlap case, but memmove can handle that. I shall change copy_chars to move_chars (or move_bytes) to use in shell input to delete/insert locally in my 2nd patch. [acrn-dev] [PATCH 2/2 v2] hv: shell: improve console to modify input easier
Then I thought no other will use it, I just did a simple one. If need to add new API, it is better to add new: memmove / memmove_from_tail two APIs to memory.c Is it OK?
I am not sure if this is MOVE or not. MOVE means using a temporary buffer to hold the source bytes?