summaryrefslogtreecommitdiffstats
path: root/usr.sbin/smbmsg
diff options
context:
space:
mode:
authoravg <avg@FreeBSD.org>2016-12-27 10:26:58 +0000
committeravg <avg@FreeBSD.org>2016-12-27 10:26:58 +0000
commitdb1c44409ba139ae10f91797789f5bf44033d759 (patch)
treeaebce03d2f4a9e9ae8f358229a4c66ab64bf9f41 /usr.sbin/smbmsg
parent029ce4c469ba3060caf99688b13837c414666aeb (diff)
downloadFreeBSD-src-db1c44409ba139ae10f91797789f5bf44033d759.zip
FreeBSD-src-db1c44409ba139ae10f91797789f5bf44033d759.tar.gz
MFC r308528: smbmsg: use a more convenient way of accessing data read
from a slave
Diffstat (limited to 'usr.sbin/smbmsg')
-rw-r--r--usr.sbin/smbmsg/smbmsg.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/usr.sbin/smbmsg/smbmsg.c b/usr.sbin/smbmsg/smbmsg.c
index 4e7e609..1472651 100644
--- a/usr.sbin/smbmsg/smbmsg.c
+++ b/usr.sbin/smbmsg/smbmsg.c
@@ -61,7 +61,7 @@ static int wflag; /* word IO */
static unsigned char ibuf[SMB_MAXBLOCKSIZE];
static unsigned char obuf[SMB_MAXBLOCKSIZE];
-static unsigned short oword, iword;
+static unsigned short oword;
/*
* The I2C specs say that all addresses below 16 and above or equal
@@ -135,6 +135,8 @@ do_io(void)
c.slave = slave;
c.cmd = cflag;
+ c.rcount = 0;
+ c.wcount = 0;
if (fmt == NULL && iflag > 0)
fmt = wflag? wordfmt: bytefmt;
@@ -163,11 +165,9 @@ do_io(void)
}
if (iflag == 1 && oflag == -1) {
/* command + 1 byte input: read byte op. */
- c.rbuf = ibuf;
- c.rcount = iflag;
if (ioctl(fd, SMB_READB, &c) == -1)
return (-1);
- printf(fmt, (int)(unsigned char)ibuf[0]);
+ printf(fmt, (unsigned char)c.rdata.byte);
putchar('\n');
return (0);
} else if (iflag == -1 && oflag == 1) {
@@ -176,11 +176,9 @@ do_io(void)
return (ioctl(fd, SMB_WRITEB, &c));
} else if (wflag && iflag == 2 && oflag == -1) {
/* command + 2 bytes input: read word op. */
- c.rbuf = (char*) &iword;
- c.rcount = iflag;
if (ioctl(fd, SMB_READW, &c) == -1)
return (-1);
- printf(fmt, (int)(unsigned short)iword);
+ printf(fmt, (unsigned short)c.rdata.word);
putchar('\n');
return (0);
} else if (wflag && iflag == -1 && oflag == 2) {
@@ -193,11 +191,9 @@ do_io(void)
* "process call" op.
*/
c.wdata.word = oword;
- c.rbuf = (char*) &iword;
- c.rcount = iflag;
if (ioctl(fd, SMB_PCALL, &c) == -1)
return (-1);
- printf(fmt, (int)(unsigned short)iword);
+ printf(fmt, (unsigned short)c.rdata.word);
putchar('\n');
return (0);
} else if (iflag > 1 && oflag == -1) {
@@ -206,7 +202,7 @@ do_io(void)
c.rcount = iflag;
if (ioctl(fd, SMB_BREAD, &c) == -1)
return (-1);
- for (i = 0; i < iflag; i++) {
+ for (i = 0; i < c.rcount; i++) {
if (i != 0)
putchar(' ');
printf(fmt, ibuf[i]);
OpenPOWER on IntegriCloud