X-Git-Url: https://git.ao2.it/libam7xxx.git/blobdiff_plain/fc26cf192559400a4dce1341dbb691fc5c987b96..5c988a910c5c32462da462263ea7cb63daecebbc:/src/am7xxx.c diff --git a/src/am7xxx.c b/src/am7xxx.c index 08858cd..47f79ea 100644 --- a/src/am7xxx.c +++ b/src/am7xxx.c @@ -386,16 +386,17 @@ static int read_header(am7xxx_device *dev, struct am7xxx_header *h) unserialize_header(dev->buffer, h); - debug_dump_header(dev->ctx, h); - if (h->direction == AM7XXX_DIRECTION_IN) { ret = 0; } else { error(dev->ctx, - "Received a packet with direction AM7XXX_DIRECTION_OUT, weird!\n"); + "Expected an AM7XXX_DIRECTION_IN packet, got one with direction = %d. Weird!\n", + h->direction); ret = -EINVAL; } + debug_dump_header(dev->ctx, h); + out: return ret; } @@ -406,7 +407,13 @@ static int send_header(am7xxx_device *dev, struct am7xxx_header *h) debug_dump_header(dev->ctx, h); + /* For symmetry with read_header() we should check here for + * h->direction == AM7XXX_DIRECTION_OUT but we just ensure that in all + * the callers and save some cycles here. + */ + serialize_header(h, dev->buffer); + ret = send_data(dev, dev->buffer, AM7XXX_HEADER_WIRE_SIZE); if (ret < 0) error(dev->ctx, "failed to send data\n"); @@ -453,8 +460,6 @@ static am7xxx_device *add_new_device(am7xxx_context *ctx) return NULL; } - devices_list = &(ctx->devices_list); - new_device = malloc(sizeof(*new_device)); if (new_device == NULL) { fatal("cannot allocate a new device (%s)\n", strerror(errno)); @@ -464,6 +469,8 @@ static am7xxx_device *add_new_device(am7xxx_context *ctx) new_device->ctx = ctx; + devices_list = &(ctx->devices_list); + if (*devices_list == NULL) { *devices_list = new_device; } else {