mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 22:24:11 +08:00
kdb: Replace double memcpy() with memmove() in kdb_read()
At several points in kdb_read() there are variants of the following code pattern (with offsets slightly altered): memcpy(tmpbuffer, cp, lastchar - cp); memcpy(cp-1, tmpbuffer, lastchar - cp); *(--lastchar) = '\0'; There is no need to use tmpbuffer here, since we can use memmove() instead so refactor in the obvious way. Additionally the strings that are being copied are already properly terminated so let's also change the code so that the library calls also move the terminator. Changing how the terminators are managed has no functional effect for now but might allow us to retire lastchar at a later point. lastchar, although stored as a pointer, is functionally equivalent to caching strlen(buffer). Reviewed-by: Douglas Anderson <dianders@chromium.org> Tested-by: Justin Stitt <justinstitt@google.com> Link: https://lore.kernel.org/r/20240424-kgdb_read_refactor-v3-6-f236dbe9828d@linaro.org Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
This commit is contained in:
parent
c9b51ddb66
commit
80bd73c154
@ -269,12 +269,9 @@ poll_again:
|
||||
switch (key) {
|
||||
case 8: /* backspace */
|
||||
if (cp > buffer) {
|
||||
if (cp < lastchar) {
|
||||
memcpy(tmpbuffer, cp, lastchar - cp);
|
||||
memcpy(cp-1, tmpbuffer, lastchar - cp);
|
||||
}
|
||||
*(--lastchar) = '\0';
|
||||
--cp;
|
||||
memmove(cp-1, cp, lastchar - cp + 1);
|
||||
lastchar--;
|
||||
cp--;
|
||||
kdb_printf("\b%s ", cp);
|
||||
kdb_position_cursor(kdb_prompt_str, buffer, cp);
|
||||
}
|
||||
@ -291,9 +288,8 @@ poll_again:
|
||||
return buffer;
|
||||
case 4: /* Del */
|
||||
if (cp < lastchar) {
|
||||
memcpy(tmpbuffer, cp+1, lastchar - cp - 1);
|
||||
memcpy(cp, tmpbuffer, lastchar - cp - 1);
|
||||
*(--lastchar) = '\0';
|
||||
memmove(cp, cp+1, lastchar - cp);
|
||||
lastchar--;
|
||||
kdb_printf("%s ", cp);
|
||||
kdb_position_cursor(kdb_prompt_str, buffer, cp);
|
||||
}
|
||||
@ -398,9 +394,8 @@ poll_again:
|
||||
default:
|
||||
if (key >= 32 && lastchar < bufend) {
|
||||
if (cp < lastchar) {
|
||||
memcpy(tmpbuffer, cp, lastchar - cp);
|
||||
memcpy(cp+1, tmpbuffer, lastchar - cp);
|
||||
*++lastchar = '\0';
|
||||
memmove(cp+1, cp, lastchar - cp + 1);
|
||||
lastchar++;
|
||||
*cp = key;
|
||||
kdb_printf("%s", cp);
|
||||
++cp;
|
||||
|
Loading…
Reference in New Issue
Block a user