aboutsummaryrefslogtreecommitdiff
path: root/contrib/ntp/libntp/icom.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ntp/libntp/icom.c')
-rw-r--r--contrib/ntp/libntp/icom.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/contrib/ntp/libntp/icom.c b/contrib/ntp/libntp/icom.c
index 80700114255e..2e95db5eb3f4 100644
--- a/contrib/ntp/libntp/icom.c
+++ b/contrib/ntp/libntp/icom.c
@@ -6,14 +6,16 @@
* frequency. All other parameters must be manually set before use.
*/
#include <config.h>
-#include "icom.h"
+#include <ntp_stdlib.h>
+#include <ntp_tty.h>
+#include <l_stdlib.h>
+#include <icom.h>
+
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
-#include "ntp_tty.h"
-#include "l_stdlib.h"
#ifdef SYS_WINNT
#undef write /* ports/winnt/include/config.h: #define write _write */
@@ -60,9 +62,14 @@ static void doublefreq (double, u_char *, int);
/*
* icom_freq(fd, ident, freq) - load radio frequency
+ *
+ * returns:
+ * 0 (ok)
+ * -1 (error)
+ * 1 (short write to device)
*/
int
-icom_freq( /* returns 0 (ok), EIO (error) */
+icom_freq(
int fd, /* file descriptor */
int ident, /* ICOM radio identifier */
double freq /* frequency (MHz) */
@@ -71,6 +78,7 @@ icom_freq( /* returns 0 (ok), EIO (error) */
u_char cmd[] = {PAD, PR, PR, 0, TX, V_SFREQ, 0, 0, 0, 0, FI,
FI};
int temp;
+ int rc;
cmd[3] = (char)ident;
if (ident == IC735)
@@ -78,9 +86,17 @@ icom_freq( /* returns 0 (ok), EIO (error) */
else
temp = 5;
doublefreq(freq * 1e6, &cmd[6], temp);
- temp = write(fd, cmd, temp + 7);
+ rc = write(fd, cmd, temp + 7);
+ if (rc == -1) {
+ msyslog(LOG_ERR, "icom_freq: write() failed: %m");
+ return -1;
+ } else if (rc != temp + 7) {
+ msyslog(LOG_ERR, "icom_freq: only wrote %d of %d bytes.",
+ rc, temp+7);
+ return 1;
+ }
- return (0);
+ return 0;
}