From ea00a0756e4e1fba2fc092d2fdf700effc87b9a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Tue, 6 Sep 2022 22:26:07 +0200 Subject: [PATCH] Fix bug in Named CRC lookup --- main.c | 14 +++++++++++++- named_crcs.c | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index e72c49e..0f03360 100644 --- a/main.c +++ b/main.c @@ -69,6 +69,7 @@ struct command_line_options { static error_t parse_opt(int key, char *arg, struct argp_state *state) { struct command_line_options *args = (struct command_line_options *)state->input; + const struct named_crc *looked_up_crc; char *endptr; switch (key) { @@ -91,7 +92,11 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) /* Polyniomial */ args->crc.polynomial = strtoull(arg, &endptr, 0); if (endptr == arg) { - argp_error(state, "Error parsing polynomial: %s\n", arg); + if ((looked_up_crc = lookup_named_crc(arg))) { + memcpy(&args->crc, &looked_up_crc->settings, sizeof(struct crc_settings)); + } else { + argp_error(state, "Error parsing polynomial: %s\n", arg); + } } break; case 'l': @@ -246,6 +251,13 @@ int main(int argc, char **argv) /* Build the CRC */ crc_init(&crc, &cmd_opts.crc); + + /* Perform the check test */ + crc_push_bytes(&crc, "123456789", 9u); + crc_finish_calc(&crc); + printf("CRC Check value: 0x%08x\n", crc_get_value(&crc)); + + crc_destroy(&crc); free_cmds: free_cmd_args(&cmd_opts); diff --git a/named_crcs.c b/named_crcs.c index 8605c8f..815b98a 100644 --- a/named_crcs.c +++ b/named_crcs.c @@ -97,7 +97,7 @@ const struct named_crc *lookup_named_crc(const char *name) const struct named_crc *found = NULL; for (iter = predefined_crc_table; iter->name; iter++) { - if (strcmp(iter->name, name)) { + if (!strcmp(iter->name, name)) { found = iter; break; }