gdb-server/cmdbuf.c

47 lines
1.2 KiB
C
Raw Permalink Normal View History

2024-10-06 22:47:44 +00:00
#include <cmdbuf.h>
2024-10-07 04:55:44 +00:00
#include <hex.h>
2024-10-06 22:47:44 +00:00
#include <string.h>
2024-10-10 22:38:40 +00:00
bool cmdMatchStr(CommandBuf *cmd, const char *str) {
2024-10-06 22:47:44 +00:00
size_t len = strlen(str);
if (cmd->len < len) return false;
if (!strncmp(cmd->buf, str, len)) {
cmd->buf += len;
cmd->len -= len;
return true;
}
return false;
}
2024-10-10 22:38:40 +00:00
bool cmdMatchHexNumber(CommandBuf *cmd, uint32_t *value) {
2024-10-06 22:47:44 +00:00
size_t read = 0;
size_t max_len = cmd->len;
if (max_len > 8) max_len = 8;
*value = 0;
for (; read < max_len; ++read) {
char digit;
2024-10-10 22:38:40 +00:00
if (!parseHexDigit(cmd->buf[read], &digit)) break;
2024-10-06 22:47:44 +00:00
*value = (*value << 4) | digit;
}
if (!read) return false;
cmd->buf += read;
cmd->len -= read;
return true;
}
2024-10-10 22:38:40 +00:00
bool cmdMatchHexBytes(CommandBuf *cmd, const uint32_t count, uint8_t *value) {
2024-10-08 02:42:28 +00:00
size_t i;
2024-10-06 22:47:44 +00:00
if (cmd->len < (count * 2)) return false;
2024-10-08 02:42:28 +00:00
for (i = 0; i < count; ++i) {
2024-10-06 22:47:44 +00:00
char hi, lo;
2024-10-10 22:38:40 +00:00
if (!parseHexDigit(cmd->buf[i * 2], &hi)) return false;
if (!parseHexDigit(cmd->buf[(i * 2) + 1], &lo)) return false;
2024-10-06 22:47:44 +00:00
value[i] = (hi << 4) | lo;
}
cmd->buf += (count * 2);
cmd->len -= (count * 2);
return true;
}