1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-20 12:27:09 -05:00

Refactor the key-components mechanism a bit.

Having recently pulled it out into its own file, I think it could also
do with a bit of tidying. In this rework:

 - the substructure for a single component now has a globally visible
   struct tag, so you can make a variable pointing at it, saving
   verbiage in every piece of code looping over a key_components

 - the 'is_mp_int' flag has been replaced with a type enum, so that
   more types can be added without further upheaval

 - the printing loop in cmdgen.c for puttygen --dump has factored out
   the initial 'name=' prefix on each line so that it isn't repeated
   per component type

 - the storage format for text components is now a strbuf rather than
   a plain char *, which I think is generally more useful.
This commit is contained in:
Simon Tatham
2022-04-18 10:10:57 +01:00
parent cf36b9215f
commit 68514ac8a1
5 changed files with 48 additions and 30 deletions

View File

@ -1312,16 +1312,23 @@ int main(int argc, char **argv)
}
for (size_t i = 0; i < kc->ncomponents; i++) {
if (kc->components[i].is_mp_int) {
char *hex = mp_get_hex(kc->components[i].mp);
fprintf(fp, "%s=0x%s\n", kc->components[i].name, hex);
key_component *comp = &kc->components[i];
fprintf(fp, "%s=", comp->name);
switch (comp->type) {
case KCT_MPINT: {
char *hex = mp_get_hex(comp->mp);
fprintf(fp, "0x%s\n", hex);
smemclr(hex, strlen(hex));
sfree(hex);
} else {
fprintf(fp, "%s=\"", kc->components[i].name);
write_c_string_literal(fp, ptrlen_from_asciz(
kc->components[i].text));
break;
}
case KCT_TEXT:
fputs("\"", fp);
write_c_string_literal(fp, ptrlen_from_strbuf(comp->str));
fputs("\"\n", fp);
break;
default:
unreachable("bad key component type");
}
}