summaryrefslogtreecommitdiffstats
path: root/firmware/common
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/common')
-rw-r--r--firmware/common/structec.c47
1 files changed, 23 insertions, 24 deletions
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);
}
-