diff --git a/lib/c/2014/labcomm2014_renaming_decoder.c b/lib/c/2014/labcomm2014_renaming_decoder.c index 88cdb761242bd7fa6dcdad9a3f5f15ba7cff780a..0a9f193aa814568a98063b35a01f097994480f49 100644 --- a/lib/c/2014/labcomm2014_renaming_decoder.c +++ b/lib/c/2014/labcomm2014_renaming_decoder.c @@ -23,92 +23,63 @@ #include "labcomm2014_renaming_decoder.h" #include "labcomm2014.h" #include "labcomm2014_private.h" +#include "labcomm2014_renaming_private.h" struct decoder { struct labcomm2014_decoder decoder; struct labcomm2014_decoder *next; - char *(*rename)(struct labcomm2014_memory *m, char *name, void *context); + struct labcomm2014_renaming_registry *registry; + char *(*rename_func)(struct labcomm2014_memory *m, char *name, void *context); void *context; - LABCOMM_SIGNATURE_ARRAY_DEF(renamed, struct labcomm2014_signature *); + LABCOMM_SIGNATURE_ARRAY_DEF(renamed, + struct labcomm2014_renaming_rename *); }; -static struct labcomm2014_signature *get_renamed( +static struct labcomm2014_renaming_rename *get_renamed( struct labcomm2014_decoder *d, const struct labcomm2014_signature *signature) { - struct labcomm2014_signature *result; + struct labcomm2014_renaming_rename *result; struct decoder *id = d->context; int index; index = labcomm2014_get_local_index(signature); labcomm2014_scheduler_data_lock(d->scheduler); result = LABCOMM_SIGNATURE_ARRAY_GET(id->renamed, - struct labcomm2014_signature *, + struct labcomm2014_renaming_rename *, index, NULL); labcomm2014_scheduler_data_unlock(d->scheduler); return result; } -static struct labcomm2014_signature *set_renamed( +static struct labcomm2014_renaming_rename *set_renamed( struct labcomm2014_decoder *d, const struct labcomm2014_signature *signature) { - struct labcomm2014_signature *result; + struct labcomm2014_renaming_rename *result = NULL; result = get_renamed(d, signature); if (result == NULL) { - /* create a renamed sample */ struct decoder *id = d->context; + struct labcomm2014_renaming_rename **renamed; + struct labcomm2014_renaming_rename *entry = NULL; int index; - struct labcomm2014_signature **renamed; - + index = labcomm2014_get_local_index(signature); - if (index <= 0) { goto out; /*result already NULL */} + entry = labcomm2014_renaming_rename_new(id->registry, signature, + id->rename_func, id->context); + if (entry == NULL) { goto out; } labcomm2014_scheduler_data_lock(d->scheduler); renamed = LABCOMM_SIGNATURE_ARRAY_REF(d->memory, id->renamed, - struct labcomm2014_signature *, + struct labcomm2014_renaming_rename *, index); - if (renamed == NULL) { - labcomm2014_error_warning(d->error, - LABCOMM2014_ERROR_MEMORY, - "Could not allocate rename slot: %s\n", - signature->name); - goto unlock; - } - if (*renamed != NULL) { - /* Somebody beat as to allocation, this should never happen */ - goto unlock; - } - result = labcomm2014_memory_alloc(d->memory, 0, sizeof(*result)); - if (result == NULL) { - labcomm2014_error_warning(d->error, - LABCOMM2014_ERROR_MEMORY, - "Could not allocate rename signature: %s\n", - signature->name); - goto unlock; - } - result->name = id->rename(d->memory, signature->name, id->context); - if (result->name == NULL) { - labcomm2014_error_warning(d->error, - LABCOMM2014_ERROR_MEMORY, - "Could not allocate rename name: %s\n", - signature->name); - goto unlock_free_result; - } - result->encoded_size = signature->encoded_size; - result->size = signature->size; - result->signature = signature->signature; - result->index = 0; -#ifndef LABCOMM_NO_TYPEDECL - result->tdsize = signature->tdsize; - result->treedata = signature->treedata; -#endif - labcomm2014_set_local_index(result); - *renamed = result; + if (renamed == NULL) { goto free_unlock; } + if (*renamed != NULL) { result = *renamed; goto free_unlock; } + *renamed = entry; + result = entry; goto unlock; - unlock_free_result: - labcomm2014_memory_free(d->memory, 0, result); - result = NULL; + free_unlock: + labcomm2014_renaming_rename_free(id->registry, entry); unlock: labcomm2014_scheduler_data_unlock(d->scheduler); out: @@ -118,33 +89,42 @@ static struct labcomm2014_signature *set_renamed( } static int do_sample_register(struct labcomm2014_decoder *d, - const struct labcomm2014_signature *s, + const struct labcomm2014_signature *signature, labcomm2014_decoder_function decoder, labcomm2014_handler_function handler, void *context) { + const struct labcomm2014_renaming_rename *renamed; struct decoder *id = d->context; - return id->next->sample_register(id->next, set_renamed(d, s), decoder, - handler, context); + renamed = set_renamed(d, signature); + return id->next->sample_register( + id->next, labcomm2014_renaming_rename_signature(renamed), + decoder, handler, context); } static int do_ref_register(struct labcomm2014_decoder *d, const struct labcomm2014_signature *signature) { + const struct labcomm2014_renaming_rename *renamed; struct decoder *id = d->context; - - return id->next->ref_register(id->next, set_renamed(d, signature)); + + renamed = set_renamed(d, signature); + return id->next->ref_register( + id->next, labcomm2014_renaming_rename_signature(renamed)); } static int do_ioctl(struct labcomm2014_decoder *d, const struct labcomm2014_signature *signature, uint32_t ioctl_action, va_list args) { + const struct labcomm2014_renaming_rename *renamed; struct decoder *id = d->context; - return id->next->ioctl(id->next, get_renamed(d, signature), - ioctl_action, args); + renamed = get_renamed(d, signature); + return id->next->ioctl( + id->next, labcomm2014_renaming_rename_signature(renamed), + ioctl_action, args); } static int do_decode_one(struct labcomm2014_decoder *d) @@ -166,14 +146,15 @@ static const struct labcomm2014_sample_ref *do_ref_get( struct labcomm2014_decoder *d, const struct labcomm2014_signature *signature) { - const struct labcomm2014_signature *renamed; + const struct labcomm2014_renaming_rename *renamed; struct decoder *id = d->context; renamed = get_renamed(d, signature); if (renamed == NULL) { return id->next->ref_get(id->next, signature); } else { - return id->next->ref_get(id->next, renamed); + return id->next->ref_get(id->next, + labcomm2014_renaming_rename_signature(renamed)); } } @@ -182,23 +163,25 @@ static void do_free(struct labcomm2014_decoder *d) struct decoder *id = d->context; int i; - LABCOMM_SIGNATURE_ARRAY_FOREACH(id->renamed, struct labcomm2014_signature *, + LABCOMM_SIGNATURE_ARRAY_FOREACH(id->renamed, + struct labcomm2014_renaming_rename *, i) { - struct labcomm2014_signature *s; - s = LABCOMM_SIGNATURE_ARRAY_GET(id->renamed, - struct labcomm2014_signature *, i, NULL); - if (s) { - labcomm2014_memory_free(d->memory, 0, s->name); - labcomm2014_memory_free(d->memory, 0, s); + struct labcomm2014_renaming_rename *r; + r = LABCOMM_SIGNATURE_ARRAY_GET(id->renamed, + struct labcomm2014_renaming_rename *, + i, NULL); + if (r) { + labcomm2014_renaming_rename_free(id->registry, r); } } LABCOMM_SIGNATURE_ARRAY_FREE(d->memory, id->renamed, - struct labcomm2014_signature *); + struct labcomm2014_renaming_rename *); labcomm2014_memory_free(d->memory, 0, id); } struct labcomm2014_decoder *labcomm2014_renaming_decoder_new( struct labcomm2014_decoder *d, + struct labcomm2014_renaming_registry *registry, char *(*rename)(struct labcomm2014_memory *m, char *name, void *context), void *context) { @@ -220,10 +203,11 @@ struct labcomm2014_decoder *labcomm2014_renaming_decoder_new( result->decoder.index_to_sample_ref = do_index_to_sample_ref; result->decoder.ref_get = do_ref_get; result->next = d; - result->rename = rename; + result->registry = registry; + result->rename_func = rename; result->context = context; LABCOMM_SIGNATURE_ARRAY_INIT(result->renamed, - struct labcomm2014_signature *); + struct labcomm2014_renaming_rename *); return &(result->decoder); } } diff --git a/lib/c/2014/labcomm2014_renaming_decoder.h b/lib/c/2014/labcomm2014_renaming_decoder.h index d13e6ea350f8668e986934f6d01f7ede40c349b0..e12474f08d78c4cf86b540670061727760958d6f 100644 --- a/lib/c/2014/labcomm2014_renaming_decoder.h +++ b/lib/c/2014/labcomm2014_renaming_decoder.h @@ -23,9 +23,11 @@ #define __LABCOMM2014_RENAMING_DECODER_H__ #include "labcomm2014.h" +#include "labcomm2014_renaming.h" struct labcomm2014_decoder *labcomm2014_renaming_decoder_new( struct labcomm2014_decoder *d, + struct labcomm2014_renaming_registry *r, char *(*rename)(struct labcomm2014_memory *m, char *name, void *context), void *context); diff --git a/lib/c/2014/labcomm2014_renaming_encoder.c b/lib/c/2014/labcomm2014_renaming_encoder.c index b84eaaf11307d4b74f99a7a1acc3c260b141cff1..1d610327959a2df5d28230698ea046e74df25fdc 100644 --- a/lib/c/2014/labcomm2014_renaming_encoder.c +++ b/lib/c/2014/labcomm2014_renaming_encoder.c @@ -23,104 +23,63 @@ #include "labcomm2014_renaming_encoder.h" #include "labcomm2014.h" #include "labcomm2014_private.h" - -struct renamed { - struct labcomm2014_signature signature; - struct labcomm2014_signature_data s_treedata[2]; -}; +#include "labcomm2014_renaming_private.h" struct encoder { struct labcomm2014_encoder encoder; struct labcomm2014_encoder *next; - char *(*rename)(struct labcomm2014_memory *m, char *name, void *context); + struct labcomm2014_renaming_registry *registry; + char *(*rename_func)(struct labcomm2014_memory *m, char *name, void *context); void *context; - LABCOMM_SIGNATURE_ARRAY_DEF(renamed, struct renamed *); + LABCOMM_SIGNATURE_ARRAY_DEF(renamed, + struct labcomm2014_renaming_rename *); }; -static struct renamed *get_renamed( +static struct labcomm2014_renaming_rename *get_renamed( struct labcomm2014_encoder *e, const struct labcomm2014_signature *signature) { - struct renamed *result; + struct labcomm2014_renaming_rename *result; struct encoder *ie = e->context; int index; index = labcomm2014_get_local_index(signature); labcomm2014_scheduler_writer_lock(e->scheduler); result = LABCOMM_SIGNATURE_ARRAY_GET(ie->renamed, - struct renamed *, + struct labcomm2014_renaming_rename *, index, NULL); labcomm2014_scheduler_writer_unlock(e->scheduler); return result; } -static struct renamed *set_renamed( +static struct labcomm2014_renaming_rename *set_renamed( struct labcomm2014_encoder *e, const struct labcomm2014_signature *signature) { - struct renamed *result; + struct labcomm2014_renaming_rename *result = NULL; result = get_renamed(e, signature); if (result == NULL) { - /* create a renamed sample */ struct encoder *ie = e->context; + struct labcomm2014_renaming_rename **renamed; + struct labcomm2014_renaming_rename *entry = NULL; int index; - struct renamed **renamed; - + index = labcomm2014_get_local_index(signature); - if (index <= 0) { goto out; /*result already NULL */} + entry = labcomm2014_renaming_rename_new(ie->registry, signature, + ie->rename_func, ie->context); + if (entry == NULL) { goto out; } labcomm2014_scheduler_writer_lock(e->scheduler); renamed = LABCOMM_SIGNATURE_ARRAY_REF(e->memory, ie->renamed, - struct renamed *, + struct labcomm2014_renaming_rename *, index); - if (renamed == NULL) { - labcomm2014_error_warning(e->error, - LABCOMM2014_ERROR_MEMORY, - "Could not allocate rename slot: %s\n", - signature->name); - goto unlock; - } - if (*renamed != NULL) { - /* Somebody beat as to allocation, this should never happen */ - goto unlock; - } - result = labcomm2014_memory_alloc(e->memory, 0, sizeof(*result)); - if (result == NULL) { - labcomm2014_error_warning(e->error, - LABCOMM2014_ERROR_MEMORY, - "Could not allocate rename signature: %s\n", - signature->name); - goto unlock; - } - result->signature.name = ie->rename( - e->memory, signature->name, ie->context); - if (result->signature.name == NULL) { - labcomm2014_error_warning(e->error, - LABCOMM2014_ERROR_MEMORY, - "Could not allocate rename name: %s\n", - signature->name); - goto unlock_free_result; - } - result->signature.encoded_size = signature->encoded_size; - result->signature.size = signature->size; - result->signature.signature = signature->signature; - result->signature.index = 0; -#ifndef LABCOMM_NO_TYPEDECL - struct labcomm2014_signature_data s_treedata[2] = { - LABCOMM_SIGDEF_SIGNATURE(*signature), - LABCOMM_SIGDEF_END - }; - 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); - *renamed = result; + if (renamed == NULL) { goto free_unlock; } + if (*renamed != NULL) { result = *renamed; goto free_unlock; } + *renamed = entry; + result = entry; goto unlock; - unlock_free_result: - labcomm2014_memory_free(e->memory, 0, result); - result = NULL; + free_unlock: + labcomm2014_renaming_rename_free(ie->registry, entry); unlock: labcomm2014_scheduler_writer_unlock(e->scheduler); out: @@ -132,14 +91,15 @@ static struct renamed *set_renamed( static int do_type_register(struct labcomm2014_encoder *e, const struct labcomm2014_signature *signature) { - const struct renamed *renamed; + const struct labcomm2014_renaming_rename *renamed; struct encoder *ie = e->context; renamed = get_renamed(e, signature); if (renamed) { /* Register base type and renamed type */ ie->next->type_register(ie->next, signature); - return ie->next->type_register(ie->next, &renamed->signature); + return ie->next->type_register( + ie->next, labcomm2014_renaming_rename_signature(renamed)); } else { return ie->next->type_register(ie->next, signature); } @@ -149,12 +109,13 @@ static int do_type_bind(struct labcomm2014_encoder *e, const struct labcomm2014_signature *signature, char has_deps) { - const struct renamed *renamed; + const struct labcomm2014_renaming_rename *renamed; struct encoder *ie = e->context; renamed = get_renamed(e, signature); if (renamed) { - return ie->next->type_bind(ie->next, &renamed->signature, 1); + return ie->next->type_bind( + ie->next, labcomm2014_renaming_rename_signature(renamed), 1); } else { return ie->next->type_bind(ie->next, signature, has_deps); } @@ -164,21 +125,23 @@ static int do_sample_register(struct labcomm2014_encoder *e, const struct labcomm2014_signature *signature, labcomm2014_encoder_function encode) { - const struct renamed *renamed; + const struct labcomm2014_renaming_rename *renamed; struct encoder *ie = e->context; renamed = set_renamed(e, signature); - return ie->next->sample_register(ie->next, &renamed->signature, encode); + return ie->next->sample_register( + ie->next, labcomm2014_renaming_rename_signature(renamed), encode); } static int do_ref_register(struct labcomm2014_encoder *e, const struct labcomm2014_signature *signature) { - const struct renamed *renamed; + const struct labcomm2014_renaming_rename *renamed; struct encoder *ie = e->context; renamed = set_renamed(e, signature); - return ie->next->ref_register(ie->next, &renamed->signature); + return ie->next->ref_register(ie->next, + labcomm2014_renaming_rename_signature(renamed)); } static int do_encode(struct labcomm2014_encoder *e, @@ -186,14 +149,16 @@ static int do_encode(struct labcomm2014_encoder *e, labcomm2014_encoder_function encode, void *value) { - const struct renamed *renamed; + const struct labcomm2014_renaming_rename *renamed; struct encoder *ie = e->context; renamed = get_renamed(e, signature); if (renamed == NULL) { return -EINVAL; } else { - return ie->next->encode(ie->next, &renamed->signature, encode, value); + return ie->next->encode(ie->next, + labcomm2014_renaming_rename_signature(renamed), + encode, value); } } @@ -201,12 +166,12 @@ static int do_ioctl(struct labcomm2014_encoder *e, const struct labcomm2014_signature *signature, uint32_t ioctl_action, va_list args) { - const struct renamed *renamed; + const struct labcomm2014_renaming_rename *renamed; struct encoder *ie = e->context; renamed = get_renamed(e, signature); if (renamed != NULL) { - signature = &renamed->signature; + signature = labcomm2014_renaming_rename_signature(renamed); } return ie->next->ioctl(ie->next, signature, ioctl_action, args); } @@ -224,14 +189,15 @@ static const struct labcomm2014_sample_ref *do_ref_get( struct labcomm2014_encoder *e, const struct labcomm2014_signature *signature) { - const struct renamed *renamed; + const struct labcomm2014_renaming_rename *renamed; struct encoder *ie = e->context; renamed = get_renamed(e, signature); if (renamed == NULL) { return ie->next->ref_get(ie->next, signature); } else { - return ie->next->ref_get(ie->next, &renamed->signature); + return ie->next->ref_get( + ie->next, labcomm2014_renaming_rename_signature(renamed)); } } @@ -240,20 +206,23 @@ static void do_free(struct labcomm2014_encoder *e) struct encoder *ie = e->context; int i; - LABCOMM_SIGNATURE_ARRAY_FOREACH(ie->renamed, struct renamed *, i) { - struct renamed *r; - r = LABCOMM_SIGNATURE_ARRAY_GET(ie->renamed, struct renamed *, i, NULL); + LABCOMM_SIGNATURE_ARRAY_FOREACH(ie->renamed, + struct labcomm2014_renaming_rename *, i) { + struct labcomm2014_renaming_rename *r; + r = LABCOMM_SIGNATURE_ARRAY_GET(ie->renamed, + struct labcomm2014_renaming_rename *, i, + NULL); if (r) { - labcomm2014_memory_free(e->memory, 0, r->signature.name); - labcomm2014_memory_free(e->memory, 0, r); + labcomm2014_renaming_rename_free(ie->registry, r); } } - LABCOMM_SIGNATURE_ARRAY_FREE(e->memory, ie->renamed, struct renamed *); + LABCOMM_SIGNATURE_ARRAY_FREE(e->memory, ie->renamed, struct labcomm2014_renaming_rename *); labcomm2014_memory_free(e->memory, 0, ie); } struct labcomm2014_encoder *labcomm2014_renaming_encoder_new( struct labcomm2014_encoder *e, + struct labcomm2014_renaming_registry *registry, char *(*rename)(struct labcomm2014_memory *m, char *name, void *context), void *context) { @@ -277,10 +246,11 @@ struct labcomm2014_encoder *labcomm2014_renaming_encoder_new( result->encoder.sample_ref_to_index = do_sample_ref_to_index; result->encoder.ref_get = do_ref_get; result->next = e; - result->rename = rename; + result->registry = registry; + result->rename_func = rename; result->context = context; LABCOMM_SIGNATURE_ARRAY_INIT(result->renamed, - struct renamed *); + struct labcomm2014_renaming_rename *); return &(result->encoder); } } diff --git a/lib/c/2014/labcomm2014_renaming_encoder.h b/lib/c/2014/labcomm2014_renaming_encoder.h index acbcbae0176b4b633849f7df0e4991d0d5b4a4cd..bd7e38cedd82f680667f7b56b5df45aaa7fc3e0a 100644 --- a/lib/c/2014/labcomm2014_renaming_encoder.h +++ b/lib/c/2014/labcomm2014_renaming_encoder.h @@ -23,9 +23,11 @@ #define __LABCOMM2014_RENAMING_ENCODER_H__ #include "labcomm2014.h" +#include "labcomm2014_renaming.h" struct labcomm2014_encoder *labcomm2014_renaming_encoder_new( struct labcomm2014_encoder *e, + struct labcomm2014_renaming_registry *r, char *(*rename)(struct labcomm2014_memory *m, char *name, void *context), void *context); diff --git a/lib/c/2014/labcomm2014_renaming_registry.c b/lib/c/2014/labcomm2014_renaming_registry.c index dd489e0d4ce5ea8add3cf3f760608b73d046efad..03949e0a4500532b4628dbd6947497b3fc1281f4 100644 --- a/lib/c/2014/labcomm2014_renaming_registry.c +++ b/lib/c/2014/labcomm2014_renaming_registry.c @@ -148,18 +148,18 @@ struct labcomm2014_renaming_rename *labcomm2014_renaming_rename_new( if (entry == NULL) { goto out; } entry->signature.name = new_name; new_name = NULL; - entry->signature.encoded_size = signature->encoded_size; - entry->signature.size = signature->size; - entry->signature.signature = signature->signature; + entry->signature.encoded_size = base->signature->encoded_size; + entry->signature.size = base->signature->size; + entry->signature.signature = base->signature->signature; entry->signature.index = 0; #ifndef LABCOMM_NO_TYPEDECL struct labcomm2014_signature_data s_treedata[2] = { - LABCOMM_SIGDEF_SIGNATURE(*signature), + LABCOMM_SIGDEF_SIGNATURE(*base->signature), LABCOMM_SIGDEF_END }; entry->s_treedata[0] = s_treedata[0]; entry->s_treedata[1] = s_treedata[1]; - entry->signature.tdsize = sizeof(result->s_treedata); + entry->signature.tdsize = sizeof(entry->s_treedata); entry->signature.treedata = entry->s_treedata; #endif labcomm2014_set_local_index(&entry->signature); diff --git a/lib/c/2014/test/test_labcomm_renaming_decoder.c b/lib/c/2014/test/test_labcomm_renaming_decoder.c index b0c4bd5aaefd8ee517f162bbb8e56150e9a8bf4d..36631d7148e2ea4e36c32f7ba7edd6d475a815ce 100644 --- a/lib/c/2014/test/test_labcomm_renaming_decoder.c +++ b/lib/c/2014/test/test_labcomm_renaming_decoder.c @@ -28,6 +28,7 @@ static void handle_r(generated_encoding_R *v, void *context) int main(int argc, char **argv) { + struct labcomm2014_renaming_registry *registry; struct labcomm2014_encoder *encoder, *prefix_encoder, *suffix_encoder; struct labcomm2014_decoder *decoder, *prefix_decoder, *suffix_decoder; int fd; @@ -38,15 +39,19 @@ int main(int argc, char **argv) if (fd == -1) { err(1, "open()"); } + registry = labcomm2014_renaming_registry_new( + labcomm2014_default_error_handler, + labcomm2014_default_memory, + labcomm2014_default_scheduler); encoder = labcomm2014_encoder_new( labcomm2014_fd_writer_new(labcomm2014_default_memory, fd, 0), labcomm2014_default_error_handler, labcomm2014_default_memory, labcomm2014_default_scheduler); prefix_encoder = labcomm2014_renaming_encoder_new( - encoder, labcomm2014_renaming_prefix, "p."); + encoder, registry, labcomm2014_renaming_prefix, "p."); suffix_encoder = labcomm2014_renaming_encoder_new( - prefix_encoder, labcomm2014_renaming_suffix, ".s"); + prefix_encoder, registry, labcomm2014_renaming_suffix, ".s"); labcomm2014_encoder_register_generated_encoding_R(encoder); labcomm2014_encoder_register_generated_encoding_R(prefix_encoder); @@ -90,9 +95,9 @@ int main(int argc, char **argv) labcomm2014_default_memory, labcomm2014_default_scheduler); prefix_decoder = labcomm2014_renaming_decoder_new( - decoder, labcomm2014_renaming_prefix, "p."); + decoder, registry, labcomm2014_renaming_prefix, "p."); suffix_decoder = labcomm2014_renaming_decoder_new( - prefix_decoder, labcomm2014_renaming_suffix, ".s"); + prefix_decoder, registry, labcomm2014_renaming_suffix, ".s"); labcomm2014_decoder_register_generated_encoding_R( decoder, handle_r, &cache_r); @@ -172,6 +177,7 @@ int main(int argc, char **argv) labcomm2014_decoder_free(suffix_decoder); labcomm2014_decoder_free(prefix_decoder); labcomm2014_decoder_free(decoder); + labcomm2014_renaming_registry_free(registry); close(fd); unlink(DATA_FILE); diff --git a/lib/c/2014/test/test_labcomm_renaming_encoder.c b/lib/c/2014/test/test_labcomm_renaming_encoder.c index e16d85568fd934874f58597f264fa978f375b6db..ac6c19bb3b09095f5a7d2b5e0248d6796e734055 100644 --- a/lib/c/2014/test/test_labcomm_renaming_encoder.c +++ b/lib/c/2014/test/test_labcomm_renaming_encoder.c @@ -136,6 +136,14 @@ static int buf_writer_ioctl( fprintf(stderr, "Encoder mismatch (%s:%d)\n", __FILE__, line); + for (i = 0 ; i < w->pos ; i++) { + if (32 <= w->data[i] && w->data[i] < 127) { + printf("%2c ", w->data[i]); + } else { + printf("%2.2x ", w->data[i]); + } + } + printf("\n"); for (i = 0 ; i < w->pos ; i++) { printf("%2.2x ", w->data[i]); } @@ -195,6 +203,7 @@ void dump_encoder(struct labcomm2014_encoder *encoder) static int do_test(int argc, char *argv[]) { + struct labcomm2014_renaming_registry *registry; struct labcomm2014_encoder *encoder, *prefix, *suffix; int i; @@ -202,15 +211,21 @@ static int do_test(int argc, char *argv[]) seen_variable[i] = -1; } + registry = labcomm2014_renaming_registry_new( + labcomm2014_default_error_handler, + labcomm2014_default_memory, + labcomm2014_default_scheduler); encoder = labcomm2014_encoder_new( &buffer_writer, labcomm2014_default_error_handler, labcomm2014_default_memory, labcomm2014_default_scheduler); prefix = labcomm2014_renaming_encoder_new(encoder, + registry, labcomm2014_renaming_prefix, "p."); suffix = labcomm2014_renaming_encoder_new(prefix, + registry, labcomm2014_renaming_suffix, ".s"); EXPECT({ 0x01, 0x0c, 0x0b, @@ -236,8 +251,8 @@ static int do_test(int argc, char *argv[]) labcomm2014_encoder_register_generated_encoding_V(suffix); labcomm2014_encoder_register_generated_encoding_V(suffix); 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), + 0x04, 0x07, VARIABLE(6), 0x03, 'V', '.', 's', 0x01, VARIABLE(2), /* BOGUS */ + 0x04, 0x09, VARIABLE(7), 0x05, 'p', '.', 'V', '.', 's', 0x01, VARIABLE(2), 0x05, 0x02, VARIABLE(5), VARIABLE(7) }); @@ -280,6 +295,7 @@ static int do_test(int argc, char *argv[]) labcomm2014_encoder_free(suffix); labcomm2014_encoder_free(prefix); labcomm2014_encoder_free(encoder); + labcomm2014_renaming_registry_free(registry); return 0; } diff --git a/lib/c/2014/test/test_labcomm_renaming_registry.c b/lib/c/2014/test/test_labcomm_renaming_registry.c index 2bc0fd354202c588c2ed23c68f56347b286ac62a..903450c59083e325b757fd894947b0f459aa1d52 100644 --- a/lib/c/2014/test/test_labcomm_renaming_registry.c +++ b/lib/c/2014/test/test_labcomm_renaming_registry.c @@ -13,6 +13,7 @@ #include "labcomm2014_default_memory.h" #include "labcomm2014_default_scheduler.h" #include "labcomm2014_renaming.h" +#include "labcomm2014_renaming_private.h" #include "test/gen/generated_encoding.h" static int do_test(int argc, char **argv) diff --git a/test/Makefile b/test/Makefile index 0714905b12228697016e4fd26ce0f2b3d4be32f4..456cc4e317402ef207456f21c7273457f09aa2dd 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,6 +1,4 @@ -TESTS_RENAME=basic simple nested # sample_ref's does not transfer between - # encoder decoder for now -TESTS=$(TESTS_RENAME) ref +TESTS=basic simple nested ref LABCOMM_JAR=../compiler/labcomm2014_compiler.jar LABCOMM=java -jar $(LABCOMM_JAR) MONO_PATH=$(shell pwd)/../lib/csharp @@ -10,7 +8,7 @@ include ../lib/c/os_compat.mk all: -test: $(TESTS:%=test_%) $(TESTS_RENAME:%=test_renaming_%) compiler_errors +test: $(TESTS:%=test_%) $(TESTS:%=test_renaming_%) compiler_errors # PYTHONPATH=../lib/python \ # ./test_encoder_decoder.py --labcomm="$(LABCOMM)" basic.lc diff --git a/test/relay_gen_c.py b/test/relay_gen_c.py index e13f66ab01f77a57a740ba8957b992c99ae7c7c0..3e4944ad762fdca378767c8fd8ec7d24eebb3ca2 100755 --- a/test/relay_gen_c.py +++ b/test/relay_gen_c.py @@ -35,6 +35,7 @@ if __name__ == '__main__': |#include <sys/stat.h> |#include <fcntl.h> |#include <stdio.h> + |#include <errno.h> |#include <labcomm2014.h> |#include <labcomm2014_default_error_handler.h> |#include <labcomm2014_default_memory.h> @@ -66,6 +67,7 @@ if __name__ == '__main__': """)) if options.renaming: result.extend(split_match('^[^|]*\|(.*)$', """ + | struct labcomm2014_renaming_registry *registry; | struct labcomm2014_encoder *e_p, *e_s; | struct labcomm2014_decoder *d_p, *d_s; """)) @@ -95,17 +97,25 @@ if __name__ == '__main__': """)) else: result.extend(split_match('^[^|]*\|(.*)$', """ + | registry = labcomm2014_renaming_registry_new( + | labcomm2014_default_error_handler, + | labcomm2014_default_memory, + | labcomm2014_default_scheduler); | e_p = labcomm2014_renaming_encoder_new(e_e, + | registry, | labcomm2014_renaming_prefix, | "prefix:"); | e_s = labcomm2014_renaming_encoder_new(e_p, + | registry, | labcomm2014_renaming_suffix, | ":suffix"); | e = e_s; | d_p = labcomm2014_renaming_decoder_new(d_d, + | registry, | labcomm2014_renaming_prefix, | "prefix:"); | d_s = labcomm2014_renaming_decoder_new(d_p, + | registry, | labcomm2014_renaming_suffix, | ":suffix"); | d = d_s; @@ -126,12 +136,15 @@ if __name__ == '__main__': | labcomm2014_decoder_free(d_p); | labcomm2014_encoder_free(e_s); | labcomm2014_encoder_free(e_p); + | labcomm2014_renaming_registry_free(registry); """)) result.extend(split_match('^[^|]*\|(.*)$', """ | labcomm2014_decoder_free(d_d); | labcomm2014_encoder_free(e_e); + | if (result == 0) return 0; + | if (result == -EPIPE) return 0; | fprintf(stderr, "Failed with %d", result); - | return 0; + | return 1; |} """)) print "\n".join(result)