diff --git a/firmware/common/structec.c b/firmware/common/structec.c index 5ee4f05c1f..3f220b0762 100644 --- a/firmware/common/structec.c +++ b/firmware/common/structec.c @@ -30,32 +30,32 @@ /** * Convert the struct endianess with the instructions provided. - * + * * For example: * struct test { * long par1; * short par2; * short par3; * }; - * + * * structec_convert(instance_of_test, "lss", sizeof(struct test), true); - * + * * Structures to be converted must be properly padded. - * + * * @param structure Pointer to the struct being converted. * @param ecinst Instructions how to do the endianess conversion. * @param count Number of structures to write * @param enable Conversion is not made unless this is true. */ -void structec_convert(void *structure, const char *ecinst, +void structec_convert(void *structure, const char *ecinst, long count, bool enable) { const char *ecinst_ring = ecinst; char *buf = (char *)structure; - + if (!enable) return; - + while (count > 0) { switch (*ecinst_ring) @@ -66,7 +66,7 @@ void structec_convert(void *structure, const char *ecinst, buf++; break; } - + /* Swap 2 bytes. */ case 's': { @@ -84,7 +84,7 @@ void structec_convert(void *structure, const char *ecinst, buf += 4; break; } - + /* Skip N bytes, idea taken from metadata.c */ default: { @@ -94,7 +94,7 @@ void structec_convert(void *structure, const char *ecinst, break; } } - + ecinst_ring++; if (*ecinst_ring == '\0') { @@ -107,14 +107,14 @@ void structec_convert(void *structure, const char *ecinst, /** * Determines the size of a struct in bytes by using endianess correction * string format. - * + * * @param ecinst endianess correction string. * @return length of the struct in bytes. */ static size_t structec_size(const char *ecinst) { size_t size = 0; - + do { switch (*ecinst) @@ -122,18 +122,18 @@ static size_t structec_size(const char *ecinst) case 'c': size += 1; break; case 's': size += 2; break; case 'l': size += 4; break; - default: + default: if (isdigit(*ecinst)) size += (*ecinst - '0'); } } while (*(++ecinst) != '\0'); - + return size; } /** * Reads endianess corrected structure members from the given file. - * + * * @param fd file descriptor of the file being read. * @param buf endianess corrected data is placed here. * @param scount the number of struct members to read. @@ -144,23 +144,23 @@ ssize_t ecread(int fd, void *buf, size_t scount, const char *ecinst, bool ec) { ssize_t ret; size_t member_size = structec_size(ecinst); - + ret = read(fd, buf, scount * member_size); structec_convert(buf, ecinst, scount, ec); - + return ret; } /** * Writes endianess corrected structure members to the given file. - * + * * @param fd file descriptor of the file being written to. * @param buf endianess corrected data is read here. * @param scount the number of struct members to write. * @param ecinst endianess correction string. * @param ec if true, endianess correction is enabled. */ -ssize_t ecwrite(int fd, const void *buf, size_t scount, +ssize_t ecwrite(int fd, const void *buf, size_t scount, const char *ecinst, bool ec) { char tmp[MAX_STRUCT_SIZE]; @@ -171,20 +171,19 @@ ssize_t ecwrite(int fd, const void *buf, size_t scount, const char *p = (const char *)buf; int maxamount = (int)(MAX_STRUCT_SIZE / member_size); int i; - + for (i = 0; i < (long)scount; i += maxamount) { long amount = MIN((int)scount-i, maxamount); - + memcpy(tmp, p, member_size * amount); structec_convert(tmp, ecinst, amount, true); write(fd, tmp, amount * member_size); p += member_size * amount; } - + return scount * member_size; } - + return write(fd, buf, scount * member_size); } -