# HG changeset patch # User Michael Spacefalcon # Date 1393566601 0 # Node ID 7b4d4e3e610abee87694cd16564c8a1843153af1 # Parent 88eed3327682d0f97eb4f7b427f68f54e1f9caf7 fc-fsio: functions written for file descriptor open/read/close diff -r 88eed3327682 -r 7b4d4e3e610a rvinterf/etmsync/Makefile --- a/rvinterf/etmsync/Makefile Fri Feb 28 04:54:47 2014 +0000 +++ b/rvinterf/etmsync/Makefile Fri Feb 28 05:50:01 2014 +0000 @@ -3,8 +3,8 @@ PROGS= fc-fsio INSTBIN=/usr/local/bin -FSIO_OBJS= connect.o dispatch.o fsbasics.o fscmdtab.o fsiomain.o fsread.o \ - interf.o launchrvif.o +FSIO_OBJS= connect.o dispatch.o fileio.o fsbasics.o fscmdtab.o fsiomain.o \ + fsread.o interf.o launchrvif.o all: ${PROGS} diff -r 88eed3327682 -r 7b4d4e3e610a rvinterf/etmsync/exitcodes.h --- a/rvinterf/etmsync/exitcodes.h Fri Feb 28 04:54:47 2014 +0000 +++ b/rvinterf/etmsync/exitcodes.h Fri Feb 28 05:50:01 2014 +0000 @@ -2,3 +2,4 @@ #define ERROR_TARGET 2 #define ERROR_RVINTERF 3 #define ERROR_UNIX 4 +#define ERROR_BUG 5 diff -r 88eed3327682 -r 7b4d4e3e610a rvinterf/etmsync/fileio.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/etmsync/fileio.c Fri Feb 28 05:50:01 2014 +0000 @@ -0,0 +1,112 @@ +/* + * FFS2 file descriptor I/O operations + */ + +#include +#include +#include +#include +#include +#include "etm.h" +#include "ffs.h" +#include "tmffs2.h" +#include "limits.h" +#include "localtypes.h" +#include "localstruct.h" +#include "exitcodes.h" + +extern u_char rvi_msg[]; +extern int rvi_msg_len; + +fd_open(pathname, flags, fdrtn) + char *pathname; + int flags, *fdrtn; +{ + u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; + int rc, slen; + + slen = strlen(pathname); + if (slen >= TMFFS_STRING_SIZE) { + printf("error: pathname arg exceeds string length limit\n"); + return(ERROR_USAGE); + } + dp = cmdpkt + 1; + *dp++ = ETM_FFS2; + *dp++ = TMFFS_OPEN; + *dp++ = slen + 1; + strcpy(dp, pathname); + dp += slen + 1; + *dp++ = flags; + rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1); + if (rc) + return(rc); + if (rvi_msg[3]) { + printf("open fd: FFS error %d\n", rvi_msg[3]); + return(ERROR_TARGET); + } + if (rvi_msg_len != 6) { + printf("error: open fd response has wrong length\n"); + return(ERROR_TARGET); + } + *fdrtn = rvi_msg[4]; + return(0); +} + +fd_read(fd, databuf, rdsize, rdret) + u_char *databuf; + int fd, rdsize, *rdret; +{ + u_char cmdpkt[6]; + int rc, sz; + + if (rdsize > MAX_READ_DATA) { + fprintf(stderr, + "BUG: attempt to read more than possible per TMFFS2 protocol\n"); + exit(ERROR_BUG); + } + cmdpkt[1] = ETM_FFS2; + cmdpkt[2] = TMFFS_READ; + cmdpkt[3] = fd; + cmdpkt[4] = rdsize; + rc = etm_pkt_exch(cmdpkt, 4); + if (rc) + return(rc); + if (rvi_msg[3]) { + printf("read fd: FFS error %d\n", rvi_msg[3]); + return(ERROR_TARGET); + } + if (rvi_msg_len < 6) { + *rdret = 0; + return(0); + } + sz = rvi_msg[4]; + if (rvi_msg_len != sz + 6 || sz > rdsize) { + printf("error: read fd response has wrong length\n"); + return(ERROR_TARGET); + } + bcopy(rvi_msg + 5, databuf, sz); + *rdret = sz; + return(0); +} + +fd_close(fd) +{ + u_char cmdpkt[5]; + int rc; + + cmdpkt[1] = ETM_FFS2; + cmdpkt[2] = TMFFS_CLOSE; + cmdpkt[3] = fd; + rc = etm_pkt_exch(cmdpkt, 3); + if (rc) + return(rc); + if (rvi_msg[3]) { + printf("close fd: FFS error %d\n", rvi_msg[3]); + return(ERROR_TARGET); + } + if (rvi_msg_len != 5) { + printf("error: close fd response has wrong length\n"); + return(ERROR_TARGET); + } + return(0); +} diff -r 88eed3327682 -r 7b4d4e3e610a rvinterf/etmsync/fsread.c --- a/rvinterf/etmsync/fsread.c Fri Feb 28 04:54:47 2014 +0000 +++ b/rvinterf/etmsync/fsread.c Fri Feb 28 05:50:01 2014 +0000 @@ -90,3 +90,10 @@ } return(0); } + +cmd_hd(argc, argv) + char **argv; +{ + + +} diff -r 88eed3327682 -r 7b4d4e3e610a rvinterf/include/tmffs2.h --- a/rvinterf/include/tmffs2.h Fri Feb 28 04:54:47 2014 +0000 +++ b/rvinterf/include/tmffs2.h Fri Feb 28 05:50:01 2014 +0000 @@ -45,4 +45,5 @@ TMFFS_TFFS = 'z' }; -#define TMFFS_STRING_SIZE 127 /* includes the terminating NUL */ +#define TMFFS_STRING_SIZE 127 /* includes the terminating NUL */ +#define MAX_READ_DATA 254