Skip to content
Snippets Groups Projects
Commit 6ac4ee60 authored by Anders Blomdell's avatar Anders Blomdell
Browse files

2006 tests passes

parent df9405e0
Branches
Tags
No related merge requests found
...@@ -1269,7 +1269,7 @@ aspect C_Sizeof { ...@@ -1269,7 +1269,7 @@ aspect C_Sizeof {
"(" + env.prefix + getName() + " *v)"); "(" + env.prefix + getName() + " *v)");
env.println("{"); env.println("{");
env.indent(); env.indent();
env.println("return labcomm_internal_sizeof(" + env.println("return labcomm"+env.verStr+"_internal_sizeof(" +
"&labcomm" + env.verStr+"_signature_" + env.prefix + getName() + "&labcomm" + env.verStr+"_signature_" + env.prefix + getName() +
", v);"); ", v);");
env.unindent(); env.unindent();
...@@ -1353,8 +1353,8 @@ aspect C_Sizeof { ...@@ -1353,8 +1353,8 @@ aspect C_Sizeof {
public void PrimType.C_emitSizeof(C_env env) { public void PrimType.C_emitSizeof(C_env env) {
switch (getToken()) { switch (getToken()) {
case LABCOMM_STRING: { case LABCOMM_STRING: {
env.print("{ int length = strlen(" + env.qualid + "); "); env.print("{ int l = strlen(" + env.qualid + "); ");
env.println("result += labcomm_size_packed32(length) + length; }"); env.println("result += labcomm"+env.verStr+"_size_packed32(l) + l; }");
} break; } break;
default: { default: {
throw new Error(this.getClass().getName() + throw new Error(this.getClass().getName() +
......
...@@ -260,3 +260,11 @@ int labcomm2006_get_local_index(struct labcomm2006_signature *signature) ...@@ -260,3 +260,11 @@ int labcomm2006_get_local_index(struct labcomm2006_signature *signature)
} }
return signature->index; return signature->index;
} }
int labcomm2006_internal_sizeof(struct labcomm2006_signature *signature,
void *v)
{
int length = signature->encoded_size(v);
return (labcomm2006_size_packed32(signature->index) +
length);
}
...@@ -44,9 +44,8 @@ struct labcomm2006_decoder; ...@@ -44,9 +44,8 @@ struct labcomm2006_decoder;
* Signature entry * Signature entry
*/ */
struct labcomm2006_signature { struct labcomm2006_signature {
int type;
char *name; char *name;
int (*encoded_size)(struct labcomm2006_signature *, void *); // void * == encoded_sample * int (*encoded_size)(void *); /* void* refers to sample_data */
int size; int size;
unsigned char *signature; unsigned char *signature;
int index; int index;
......
...@@ -190,7 +190,6 @@ static int decode_typedef_or_sample(struct labcomm2006_decoder *d, int kind) ...@@ -190,7 +190,6 @@ static int decode_typedef_or_sample(struct labcomm2006_decoder *d, int kind)
labcomm2006_writer_start(&writer, writer.action_context, 0, NULL, NULL); labcomm2006_writer_start(&writer, writer.action_context, 0, NULL, NULL);
remote_index = labcomm2006_read_packed32(d->reader); remote_index = labcomm2006_read_packed32(d->reader);
signature.name = labcomm2006_read_string(d->reader); signature.name = labcomm2006_read_string(d->reader);
signature.type = kind;
collect_flat_signature(d, &writer); collect_flat_signature(d, &writer);
labcomm2006_writer_end(&writer, writer.action_context); labcomm2006_writer_end(&writer, writer.action_context);
err = writer_ioctl(&writer, err = writer_ioctl(&writer,
...@@ -221,7 +220,6 @@ static int decode_typedef_or_sample(struct labcomm2006_decoder *d, int kind) ...@@ -221,7 +220,6 @@ static int decode_typedef_or_sample(struct labcomm2006_decoder *d, int kind)
s = LABCOMM_SIGNATURE_ARRAY_REF(d->memory, s = LABCOMM_SIGNATURE_ARRAY_REF(d->memory,
d->local, struct sample_entry, i); d->local, struct sample_entry, i);
if (s->signature && if (s->signature &&
s->signature->type == signature.type &&
s->signature->size == signature.size && s->signature->size == signature.size &&
strcmp(s->signature->name, signature.name) == 0 && strcmp(s->signature->name, signature.name) == 0 &&
memcmp((void*)s->signature->signature, (void*)signature.signature, memcmp((void*)s->signature->signature, (void*)signature.signature,
......
...@@ -77,7 +77,6 @@ int labcomm2006_internal_encoder_register( ...@@ -77,7 +77,6 @@ int labcomm2006_internal_encoder_register(
index = labcomm2006_get_local_index(signature); index = labcomm2006_get_local_index(signature);
labcomm2006_scheduler_writer_lock(e->scheduler); labcomm2006_scheduler_writer_lock(e->scheduler);
if (signature->type != LABCOMM_SAMPLE) { goto out; }
if (index <= 0) { goto out; } if (index <= 0) { goto out; }
done = LABCOMM_SIGNATURE_ARRAY_REF(e->memory, e->registered, int, index); done = LABCOMM_SIGNATURE_ARRAY_REF(e->memory, e->registered, int, index);
if (*done) { goto out; } if (*done) { goto out; }
...@@ -86,7 +85,7 @@ int labcomm2006_internal_encoder_register( ...@@ -86,7 +85,7 @@ int labcomm2006_internal_encoder_register(
index, signature, NULL); index, signature, NULL);
if (err == -EALREADY) { result = 0; goto out; } if (err == -EALREADY) { result = 0; goto out; }
if (err != 0) { result = err; goto out; } if (err != 0) { result = err; goto out; }
labcomm2006_write_packed32(e->writer, signature->type); labcomm2006_write_packed32(e->writer, LABCOMM_SAMPLE);
labcomm2006_write_packed32(e->writer, index); labcomm2006_write_packed32(e->writer, index);
labcomm2006_write_string(e->writer, signature->name); labcomm2006_write_string(e->writer, signature->name);
for (i = 0 ; i < signature->size ; i++) { for (i = 0 ; i < signature->size ; i++) {
......
...@@ -377,6 +377,9 @@ int labcomm2006_internal_encoder_ioctl(struct labcomm2006_encoder *encoder, ...@@ -377,6 +377,9 @@ int labcomm2006_internal_encoder_ioctl(struct labcomm2006_encoder *encoder,
struct labcomm2006_signature *signature, struct labcomm2006_signature *signature,
uint32_t ioctl_action, va_list args); uint32_t ioctl_action, va_list args);
int labcomm2006_internal_sizeof(struct labcomm2006_signature *signature,
void *v);
#if __BYTE_ORDER == __LITTLE_ENDIAN #if __BYTE_ORDER == __LITTLE_ENDIAN
#define LABCOMM_ENCODE(name, type) \ #define LABCOMM_ENCODE(name, type) \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment