diff --git a/lib/c/2014/labcomm2014_renaming_encoder.c b/lib/c/2014/labcomm2014_renaming_encoder.c index 5867179ed97ede5b40ff145238185d8d75a6ac3a..feaa330147bb2777c188c85f3d5129daf4f7c2ac 100644 --- a/lib/c/2014/labcomm2014_renaming_encoder.c +++ b/lib/c/2014/labcomm2014_renaming_encoder.c @@ -26,8 +26,7 @@ struct renamed { struct labcomm2014_signature signature; - struct labcomm2014_signature renamed; - struct labcomm2014_signature_data treedata[2]; + struct labcomm2014_signature_data s_treedata[2]; }; struct encoder { @@ -107,24 +106,16 @@ static struct renamed *set_renamed( result->signature.signature = signature->signature; result->signature.index = 0; #ifndef LABCOMM_NO_TYPEDECL - result->renamed.name = result->signature.name; - result->renamed.encoded_size = NULL; - result->renamed.size = 0; - result->renamed.signature = NULL; - result->renamed.index = 0; - result->renamed.tdsize = signature->tdsize; - result->renamed.treedata = signature->treedata; - struct labcomm2014_signature_data treedata[2] = { - LABCOMM_SIGDEF_SIGNATURE(result->renamed), + struct labcomm2014_signature_data s_treedata[2] = { + LABCOMM_SIGDEF_SIGNATURE(*signature), LABCOMM_SIGDEF_END }; - result->treedata[0] = treedata[0]; - result->treedata[1] = treedata[1]; - result->signature.tdsize = sizeof(result->treedata); - result->signature.treedata = result->treedata; + result->s_treedata[0] = s_treedata[0]; + result->s_treedata[1] = s_treedata[1]; + result->signature.tdsize = sizeof(result->s_treedata); + result->signature.treedata = result->s_treedata; #endif labcomm2014_set_local_index(&result->signature); - labcomm2014_set_local_index(&result->renamed); *renamed = result; goto unlock; unlock_free_result: @@ -146,10 +137,12 @@ static int do_type_register(struct labcomm2014_encoder *e, renamed = get_renamed(e, signature); if (renamed) { - /* Register renaming type */ - ie->next->type_register(ie->next, &renamed->renamed); + /* Register base type and renamed type */ + ie->next->type_register(ie->next, signature); + return ie->next->type_register(ie->next, &renamed->signature); + } else { + return ie->next->type_register(ie->next, signature); } - return ie->next->type_register(ie->next, signature); } static int do_type_bind(struct labcomm2014_encoder *e, diff --git a/lib/c/2014/test/test_labcomm_renaming_encoder.c b/lib/c/2014/test/test_labcomm_renaming_encoder.c index 7959ad452490e9c3fe6722136320f3df43b41822..227574be861e9ef940b0254174e3af25fe8fbab6 100644 --- a/lib/c/2014/test/test_labcomm_renaming_encoder.c +++ b/lib/c/2014/test/test_labcomm_renaming_encoder.c @@ -123,7 +123,7 @@ static int buf_writer_ioctl( seen_variable[VARIABLE(expected[i])] = buffer[i]; } if (seen_variable[VARIABLE(expected[i])] != buffer[i]) { - fprintf(stderr, "Unexpected variable v%d (%d: != %d)\n", + fprintf(stderr, "Unexpected variable v%d (%02x: != %02x)\n", VARIABLE(expected[i]), seen_variable[VARIABLE(expected[i])], buffer[i]); mismatch = 1; @@ -132,7 +132,7 @@ static int buf_writer_ioctl( mismatch = 1; } } - if (mismatch) { + if (1 || mismatch) { fprintf(stderr, "Encoder mismatch (%s:%d)\n", __FILE__, line); @@ -148,7 +148,7 @@ static int buf_writer_ioctl( } } printf("\n"); - exit(1); + if (mismatch) { exit(1); } } result = 0; } break; @@ -229,16 +229,16 @@ int main(void) labcomm2014_encoder_register_generated_encoding_V(prefix); labcomm2014_encoder_register_generated_encoding_V(prefix); EXPECT({ 0x02, 0x08, VARIABLE(3), 0x03, 'p', '.', 'V', 0x02, 0x11, 0x00, - 0x04, 0x07, VARIABLE(4), 0x03, 'p', '.', 'V', 0x01, VARIABLE(1), + 0x04, 0x07, VARIABLE(4), 0x03, 'p', '.', 'V', 0x01, VARIABLE(2), 0x05, 0x02, VARIABLE(3), VARIABLE(4) }); labcomm2014_encoder_ioctl(suffix, IOCTL_WRITER_RESET); labcomm2014_encoder_register_generated_encoding_V(suffix); labcomm2014_encoder_register_generated_encoding_V(suffix); - EXPECT({ 0x02, 0x0a, VARIABLE(6), 0x05, 'p', '.', 'V', '.', 's', 0x02, 0x11, 0x00, - 0x04, 0x0c, VARIABLE(7), 0x07, 'p', '.', 'v', '_', 't', '.', 's', 0x02, 0x11, 0x00, - 0x04, 0x09, VARIABLE(8), 0x05, 'p', '.', 'V', '.', 's', 0x01, VARIABLE(1) /* WEIRD */, - 0x05, 0x02, VARIABLE(6), VARIABLE(22) }); + EXPECT({ 0x02, 0x0a, VARIABLE(5), 0x05, 'p', '.', 'V', '.', 's', 0x02, 0x11, 0x00, + 0x04, 0x07, VARIABLE(6), 0x03, 'V', '.', 's', 0x01, VARIABLE(2), + 0x04, 0x09, VARIABLE(7), 0x05, 'p', '.', 'V', '.', 's', 0x01, VARIABLE(6), + 0x05, 0x02, VARIABLE(5), VARIABLE(7) }); labcomm2014_encoder_ioctl(encoder, IOCTL_WRITER_RESET); @@ -247,7 +247,7 @@ int main(void) labcomm2014_signature_generated_encoding_V); labcomm2014_encoder_sample_ref_register(encoder, labcomm2014_signature_generated_encoding_V); - EXPECT({0x03, 0x06, VARIABLE(9), 0x01, 'V', 0x02, 0x11, 0x00}); + EXPECT({0x03, 0x06, VARIABLE(8), 0x01, 'V', 0x02, 0x11, 0x00}); labcomm2014_encoder_ioctl(prefix, IOCTL_WRITER_RESET); /* Register twice to make sure that only one registration gets encoded */ @@ -255,15 +255,14 @@ int main(void) labcomm2014_signature_generated_encoding_V); labcomm2014_encoder_sample_ref_register(prefix, labcomm2014_signature_generated_encoding_V); - EXPECT({0x03, 0x08, VARIABLE(10), 0x03, 'p', '.', 'V', 0x02, 0x11, 0x00}); - + EXPECT({0x03, 0x08, VARIABLE(9), 0x03, 'p', '.', 'V', 0x02, 0x11, 0x00}); labcomm2014_encoder_ioctl(suffix, IOCTL_WRITER_RESET); /* Register twice to make sure that only one registration gets encoded */ labcomm2014_encoder_sample_ref_register(suffix, labcomm2014_signature_generated_encoding_V); labcomm2014_encoder_sample_ref_register(suffix, labcomm2014_signature_generated_encoding_V); - EXPECT({0x03, 0x0a, VARIABLE(11), 0x05, 'p', '.', 'V', '.', 's', 0x02, 0x11, 0x00}); + EXPECT({0x03, 0x0a, VARIABLE(10), 0x05, 'p', '.', 'V', '.', 's', 0x02, 0x11, 0x00}); labcomm2014_encoder_ioctl(encoder, IOCTL_WRITER_RESET); @@ -276,7 +275,7 @@ int main(void) labcomm2014_encoder_ioctl(suffix, IOCTL_WRITER_RESET); labcomm2014_encode_generated_encoding_V(suffix); - EXPECT({VARIABLE(6), 0x00 }); + EXPECT({VARIABLE(5), 0x00 }); return 0; }