Dont need an extra variable

This commit is contained in:
Kovid Goyal
2023-11-09 08:55:54 +05:30
parent 4c267bdc24
commit 75872a1097
2 changed files with 14 additions and 13 deletions

View File

@@ -90,7 +90,7 @@ def cmd_for_report(report_name: str, keymap: KeymapType, type_map: Dict[str, Any
ans = [f'REPORT_VA_COMMAND("K s {{{fmt}}}", self->window_id, "{report_name}", '] ans = [f'REPORT_VA_COMMAND("K s {{{fmt}}}", self->window_id, "{report_name}", ']
ans.append(',\n '.join((flag_attrs, uint_attrs, int_attrs))) ans.append(',\n '.join((flag_attrs, uint_attrs, int_attrs)))
if payload_allowed: if payload_allowed:
ans.append(', "payload_sz", g.payload_sz, payload, g.payload_sz') ans.append(', "payload_sz", g.payload_sz, parser_buf, g.payload_sz')
ans.append(');') ans.append(');')
return '\n'.join(ans) return '\n'.join(ans)
@@ -113,20 +113,21 @@ def generate(
if payload_allowed: if payload_allowed:
payload_after_value = "case ';': state = PAYLOAD; break;" payload_after_value = "case ';': state = PAYLOAD; break;"
payload = ', PAYLOAD' payload = ', PAYLOAD'
parr = 'uint8_t *payload = parser_buf;'
payload_case = f''' payload_case = f'''
case PAYLOAD: {{ case PAYLOAD: {{
sz = parser_buf_pos - pos; sz = parser_buf_pos - pos;
g.payload_sz = MAX(BUF_EXTRA, sz); g.payload_sz = MAX(BUF_EXTRA, sz);
if (!base64_decode8(parser_buf + pos, sz, payload, &g.payload_sz)) {{ if (!base64_decode8(parser_buf + pos, sz, parser_buf, &g.payload_sz)) {{
REPORT_ERROR("Failed to parse {command_class} command payload with error: payload size (%zu) too large", sz); return; }} g.payload_sz = MAX(BUF_EXTRA, sz);
REPORT_ERROR("Failed to parse {command_class} command payload with error: \
invalid base64 data in chunk of size: %zu with output buffer size: %zu", sz, g.payload_sz); return; }}
pos = parser_buf_pos; pos = parser_buf_pos;
}} }}
break; break;
''' '''
callback = f'{callback_name}(self->screen, &g, payload)' callback = f'{callback_name}(self->screen, &g, parser_buf)'
else: else:
payload_after_value = payload = parr = payload_case = '' payload_after_value = payload = payload_case = ''
callback = f'{callback_name}(self->screen, &g)' callback = f'{callback_name}(self->screen, &g)'
return f''' return f'''
@@ -142,7 +143,6 @@ static inline void
bool is_negative; bool is_negative;
memset(&g, 0, sizeof(g)); memset(&g, 0, sizeof(g));
size_t sz; size_t sz;
{parr}
{keys_enum} {keys_enum}
enum KEYS key = '{initial_key}'; enum KEYS key = '{initial_key}';
if (parser_buf[pos] == ';') state = AFTER_VALUE; if (parser_buf[pos] == ';') state = AFTER_VALUE;

View File

@@ -14,7 +14,6 @@ static inline void parse_graphics_code(PS *self, uint8_t *parser_buf,
bool is_negative; bool is_negative;
memset(&g, 0, sizeof(g)); memset(&g, 0, sizeof(g));
size_t sz; size_t sz;
uint8_t *payload = parser_buf;
enum KEYS { enum KEYS {
action = 'a', action = 'a',
@@ -321,10 +320,12 @@ static inline void parse_graphics_code(PS *self, uint8_t *parser_buf,
case PAYLOAD: { case PAYLOAD: {
sz = parser_buf_pos - pos; sz = parser_buf_pos - pos;
g.payload_sz = MAX(BUF_EXTRA, sz); g.payload_sz = MAX(BUF_EXTRA, sz);
if (!base64_decode8(parser_buf + pos, sz, payload, &g.payload_sz)) { if (!base64_decode8(parser_buf + pos, sz, parser_buf, &g.payload_sz)) {
g.payload_sz = MAX(BUF_EXTRA, sz);
REPORT_ERROR("Failed to parse GraphicsCommand command payload with " REPORT_ERROR("Failed to parse GraphicsCommand command payload with "
"error: payload size (%zu) too large", "error: invalid base64 data in chunk of size: %zu with "
sz); "output buffer size: %zu",
sz, g.payload_sz);
return; return;
} }
pos = parser_buf_pos; pos = parser_buf_pos;
@@ -372,7 +373,7 @@ static inline void parse_graphics_code(PS *self, uint8_t *parser_buf,
"parent_placement_id", (unsigned int)g.parent_placement_id, "z_index", "parent_placement_id", (unsigned int)g.parent_placement_id, "z_index",
(int)g.z_index, "offset_from_parent_x", (int)g.offset_from_parent_x, (int)g.z_index, "offset_from_parent_x", (int)g.offset_from_parent_x,
"offset_from_parent_y", (int)g.offset_from_parent_y, "payload_sz", "offset_from_parent_y", (int)g.offset_from_parent_y, "payload_sz",
g.payload_sz, payload, g.payload_sz); g.payload_sz, parser_buf, g.payload_sz);
screen_handle_graphics_command(self->screen, &g, payload); screen_handle_graphics_command(self->screen, &g, parser_buf);
} }