aboutsummaryrefslogtreecommitdiffstats
path: root/samsung-ipc/devices/xmm6160/xmm6160.c
diff options
context:
space:
mode:
Diffstat (limited to 'samsung-ipc/devices/xmm6160/xmm6160.c')
-rw-r--r--samsung-ipc/devices/xmm6160/xmm6160.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/samsung-ipc/devices/xmm6160/xmm6160.c b/samsung-ipc/devices/xmm6160/xmm6160.c
index 2c4d64b..c0c5c35 100644
--- a/samsung-ipc/devices/xmm6160/xmm6160.c
+++ b/samsung-ipc/devices/xmm6160/xmm6160.c
@@ -1,7 +1,7 @@
/*
* This file is part of libsamsung-ipc.
*
- * Copyright (C) 2011-2013 Paul Kocialkowski <contact@paulk.fr>
+ * Copyright (C) 2011-2014 Paul Kocialkowski <contact@paulk.fr>
*
* libsamsung-ipc is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,7 +30,7 @@
#include "xmm6160.h"
int xmm6160_psi_send(struct ipc_client *client, int serial_fd,
- void *psi_data, unsigned short psi_size)
+ const void *psi_data, unsigned short psi_size)
{
char at[] = XMM6160_AT;
unsigned char version;
@@ -38,17 +38,15 @@ int xmm6160_psi_send(struct ipc_client *client, int serial_fd,
unsigned char psi_magic;
unsigned char psi_crc;
unsigned char psi_ack;
-
struct termios termios;
struct timeval timeout;
fd_set fds;
-
+ size_t length;
unsigned char *p;
- int length;
int rc;
int i;
- if (client == NULL || serial_fd < 0 || psi_data == NULL || psi_size <= 0)
+ if (client == NULL || serial_fd < 0 || psi_data == NULL || psi_size == 0)
return -1;
tcgetattr(serial_fd, &termios);
@@ -62,7 +60,7 @@ int xmm6160_psi_send(struct ipc_client *client, int serial_fd,
length = strlen(at);
for (i = 0; i < XMM6160_AT_COUNT; i++) {
rc = write(serial_fd, at, length);
- if (rc < length) {
+ if (rc < (int) length) {
ipc_client_log(client, "Writing AT in ASCII failed");
goto error;
}
@@ -185,15 +183,14 @@ complete:
}
int xmm6160_firmware_send(struct ipc_client *client, int device_fd,
- void *device_address, void *firmware_data, int firmware_size)
+ void *device_address, const void *firmware_data, size_t firmware_size)
{
- int wc;
-
+ size_t wc;
unsigned char *p;
int rc;
int i;
- if (client == NULL || (device_fd < 0 && device_address == NULL) || firmware_data == NULL || firmware_size <= 0)
+ if (client == NULL || (device_fd < 0 && device_address == NULL) || firmware_data == NULL || firmware_size == 0)
return -1;
p = (unsigned char *) firmware_data;
@@ -204,7 +201,7 @@ int xmm6160_firmware_send(struct ipc_client *client, int device_fd,
wc = 0;
while (wc < firmware_size) {
rc = write(device_fd, (void *) p, firmware_size - wc);
- if (rc < 0) {
+ if (rc <= 0) {
ipc_client_log(client, "Writing firmware failed");
goto error;
}
@@ -229,9 +226,8 @@ int xmm6160_nv_data_send(struct ipc_client *client, int device_fd,
void *device_address)
{
void *nv_data = NULL;
- int nv_size;
- int wc;
-
+ size_t nv_size;
+ size_t wc;
unsigned char *p;
int rc;
@@ -239,6 +235,8 @@ int xmm6160_nv_data_send(struct ipc_client *client, int device_fd,
return -1;
nv_size = ipc_client_nv_data_size(client);
+ if (nv_size == 0)
+ return -1;
nv_data = ipc_nv_data_load(client);
if (nv_data == NULL) {
@@ -255,7 +253,7 @@ int xmm6160_nv_data_send(struct ipc_client *client, int device_fd,
wc = 0;
while (wc < nv_size) {
rc = write(device_fd, p, nv_size - wc);
- if (rc < 0) {
+ if (rc <= 0) {
ipc_client_log(client, "Writing modem image failed");
goto error;
}