Skip to content

Commit ada131d

Browse files
committedMay 13, 2015
vpi: avoid some code duplication between windows and linux
1 parent f6624b3 commit ada131d

File tree

1 file changed

+18
-32
lines changed

1 file changed

+18
-32
lines changed
 

‎vpi/ipc.c

+18-32
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ struct ipc_softc {
3636
#define MAX_LEN 2048
3737

3838
#ifdef _WIN32
39-
#define WIN32_HEADER_LEN 2
40-
#define WIN32_SOCKET_PORT "50007"
39+
#define HEADER_LEN 2
40+
#define SOCKET_PORT "50007"
4141

4242
unsigned char ipc_rxbuffer[2*MAX_LEN];
4343
int ipc_rxlen;
44+
#else
45+
#define HEADER_LEN 0
4446
#endif
4547

4648
struct ipc_softc *ipc_connect(const char *sockaddr,
@@ -75,7 +77,7 @@ struct ipc_softc *ipc_connect(const char *sockaddr,
7577
hints.ai_socktype = SOCK_STREAM;
7678
hints.ai_protocol = IPPROTO_TCP;
7779

78-
if(getaddrinfo(sockaddr, WIN32_SOCKET_PORT, NULL, &my_addrinfo) != 0) {
80+
if(getaddrinfo(sockaddr, SOCKET_PORT, NULL, &my_addrinfo) != 0) {
7981
free(sc);
8082
return NULL;
8183
}
@@ -132,7 +134,7 @@ static int ipc_receive_packet(struct ipc_softc *sc, unsigned char *buffer) {
132134
int len;
133135
int packet_len;
134136
/* ensure we have packet header */
135-
while(ipc_rxlen < WIN32_HEADER_LEN) {
137+
while(ipc_rxlen < HEADER_LEN) {
136138
len = recv(sc->socket, (char *)&ipc_rxbuffer[ipc_rxlen], MAX_LEN, 0);
137139
if(len)
138140
ipc_rxlen += len;
@@ -147,13 +149,13 @@ static int ipc_receive_packet(struct ipc_softc *sc, unsigned char *buffer) {
147149
}
148150

149151
/* copy packet to buffer */
150-
memcpy(buffer, ipc_rxbuffer + WIN32_HEADER_LEN, packet_len - WIN32_HEADER_LEN);
152+
memcpy(buffer, ipc_rxbuffer + HEADER_LEN, packet_len - HEADER_LEN);
151153

152154
/* prepare ipc_rxbuffer for next packet */
153155
ipc_rxlen = ipc_rxlen - packet_len;
154156
memcpy(ipc_rxbuffer, ipc_rxbuffer + packet_len, ipc_rxlen);
155157

156-
return packet_len - WIN32_HEADER_LEN;
158+
return packet_len - HEADER_LEN;
157159
#else
158160
return recv(sc->socket, buffer, MAX_LEN, 0);
159161
#endif
@@ -218,24 +220,16 @@ int ipc_receive(struct ipc_softc *sc)
218220
int ipc_tick(struct ipc_softc *sc)
219221
{
220222
ssize_t l;
223+
char c[HEADER_LEN + 1];
221224

222225
#ifdef _WIN32
223-
char c[3];
224-
225226
c[0] = 3;
226227
c[1] = 0;
227-
c[2] = MESSAGE_TICK;
228-
l = send(sc->socket, c, 3, 0);
229-
if(l != 3)
230-
return 0;
231-
#else
232-
char c;
233-
234-
c = MESSAGE_TICK;
235-
l = send(sc->socket, &c, 1, 0);
236-
if(l != 1)
237-
return 0;
238228
#endif
229+
c[HEADER_LEN + 0] = MESSAGE_TICK;
230+
l = send(sc->socket, c, HEADER_LEN + 1, 0);
231+
if(l != (HEADER_LEN + 1))
232+
return 0;
239233

240234
return 1;
241235
}
@@ -246,25 +240,17 @@ int ipc_read_reply(struct ipc_softc *sc, int nchunks, const unsigned char *chunk
246240
char buffer[MAX_LEN];
247241
ssize_t l;
248242

249-
#ifdef _WIN32
250-
len = nchunks + 4;
243+
len = nchunks + HEADER_LEN + 2;
251244
assert(len < MAX_LEN);
252245
assert(nchunks < 256);
253246

247+
#ifdef _WIN32
254248
buffer[0] = len & 0xFF;
255249
buffer[1] = (0xFF00 & len) >> 8;
256-
buffer[2] = MESSAGE_READ_REPLY;
257-
buffer[3] = nchunks;
258-
memcpy(&buffer[4], chunks, nchunks);
259-
#else
260-
len = nchunks + 2;
261-
assert(len < MAX_LEN);
262-
assert(nchunks < 256);
263-
264-
buffer[0] = MESSAGE_READ_REPLY;
265-
buffer[1] = nchunks;
266-
memcpy(&buffer[2], chunks, nchunks);
267250
#endif
251+
buffer[HEADER_LEN + 0] = MESSAGE_READ_REPLY;
252+
buffer[HEADER_LEN + 1] = nchunks;
253+
memcpy(&buffer[HEADER_LEN + 2], chunks, nchunks);
268254

269255
l = send(sc->socket, buffer, len, 0);
270256
if(l != len)

0 commit comments

Comments
 (0)