memset(&mio, 0, sizeof(struct modem_io));
mio.size = request->length + sizeof(struct ipc_header);
mio.data = malloc(mio.size);
+
memcpy(mio.data, &header, sizeof(struct ipc_header));
if (request->data != NULL && request->length > 0)
memcpy((void *) ((unsigned char *) mio.data + sizeof(struct ipc_header)), request->data, request->length);
ipc_client_log_send(client, request, __func__);
rc = client->handlers->write(client->handlers->transport_data, (void *) &mio, sizeof(struct modem_io));
+ if (rc < 0) {
+ ipc_client_log(client, "Writing FMT data to the modem failed");
+ goto error;
+ }
+
+ rc = 0;
+ goto complete;
+
+error:
+ rc = -1;
- free(mio.data);
+complete:
+ if (mio.data != NULL)
+ free(mio.data);
return rc;
}
}
header = (struct ipc_header *) mio.data;
+
ipc_message_info_fill(header, response);
if (mio.size > sizeof(struct ipc_header)) {
response->length = mio.size - sizeof(struct ipc_header);
response->data = malloc(response->length);
+
memcpy(response->data, (void *) ((unsigned char *) mio.data + sizeof(struct ipc_header)), response->length);
}
ipc_client_log_recv(client, response, __func__);
+ rc = 0;
goto complete;
error:
mio.id = request->mseq;
mio.cmd = request->index;
mio.size = request->length;
+
if (request->data != NULL && request->length > 0) {
mio.data = malloc(mio.size);
+
memcpy(mio.data, request->data, request->length);
}
ipc_client_log_send(client, request, __func__);
rc = client->handlers->write(client->handlers->transport_data, (void *) &mio, sizeof(struct modem_io));
+ if (rc < 0) {
+ ipc_client_log(client, "Writing RFS data to the modem failed");
+ goto error;
+ }
+
+ rc = 0;
+ goto complete;
+error:
+ rc = -1;
+
+complete:
if (mio.data != NULL)
free(mio.data);
if (mio.size > 0) {
response->length = mio.size;
response->data = malloc(response->length);
+
memcpy(response->data, mio.data, response->length);
}
ipc_client_log_recv(client, response, __func__);
+ rc = 0;
goto complete;
error:
transport_data = (struct crespo_ipc_transport_data *) data;
- switch(type)
- {
+ switch (type) {
case IPC_CLIENT_TYPE_FMT:
fd = open(CRESPO_MODEM_FMT_DEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
break;
return -1;
}
- if(fd < 0)
+ if (fd < 0)
return -1;
transport_data->fd = fd;
return -1;
rc = ioctl(fd, IOCTL_MODEM_RECV, buffer);
- if(rc < 0)
+ if (rc < 0)
return -1;
return 0;
FD_ZERO(&fds);
FD_SET(fd, &fds);
- rc = select(FD_SETSIZE, &fds, NULL, NULL, timeout);
+ rc = select(fd + 1, &fds, NULL, NULL, timeout);
return rc;
}