mirror of https://github.com/joan2937/pigpio
Fix network communication on arm64
Base messages consist of four uint32 integers. Wrongly, integers are declared as a four-element uintptr_t array. The 16 bytes are written directly by recv(). This works great for arm32, but on arm64 uintptr_t is 64 bit (8 bytes). This patch reads four 32-bit integers and writes them into the uintptr_t array.
This commit is contained in:
parent
5847d5c099
commit
55d8b880fc
17
pigpio.c
17
pigpio.c
|
@ -6953,6 +6953,7 @@ static void *pthSocketThreadHandler(void *fdC)
|
||||||
{
|
{
|
||||||
int sock = *(int*)fdC;
|
int sock = *(int*)fdC;
|
||||||
uintptr_t p[10];
|
uintptr_t p[10];
|
||||||
|
uint32_t tmp;
|
||||||
int opt;
|
int opt;
|
||||||
char buf[CMD_MAX_EXTENSION];
|
char buf[CMD_MAX_EXTENSION];
|
||||||
|
|
||||||
|
@ -6964,7 +6965,21 @@ static void *pthSocketThreadHandler(void *fdC)
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (recv(sock, p, 16, MSG_WAITALL) != 16) break;
|
if (sizeof(uintptr_t) == 8)
|
||||||
|
{
|
||||||
|
if (recv(sock, &tmp, 4, MSG_WAITALL) != 4) break;
|
||||||
|
p[0] = (uintptr_t)tmp;
|
||||||
|
if (recv(sock, &tmp, 4, MSG_WAITALL) != 4) break;
|
||||||
|
p[1] = (uintptr_t)tmp;
|
||||||
|
if (recv(sock, &tmp, 4, MSG_WAITALL) != 4) break;
|
||||||
|
p[2] = (uintptr_t)tmp;
|
||||||
|
if (recv(sock, &tmp, 4, MSG_WAITALL) != 4) break;
|
||||||
|
p[3] = (uintptr_t)tmp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (recv(sock, p, 16, MSG_WAITALL) != 16) break;
|
||||||
|
}
|
||||||
|
|
||||||
if (p[3])
|
if (p[3])
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue