comparison rvinterf/etmsync/fileio.c @ 285:bb28ba9e82c5

fc-fsio: file read primitive and hd command implemented
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Fri, 28 Feb 2014 06:16:02 +0000
parents 7b4d4e3e610a
children 146e7bf3fa4e
comparison
equal deleted inserted replaced
284:7b4d4e3e610a 285:bb28ba9e82c5
108 printf("error: close fd response has wrong length\n"); 108 printf("error: close fd response has wrong length\n");
109 return(ERROR_TARGET); 109 return(ERROR_TARGET);
110 } 110 }
111 return(0); 111 return(0);
112 } 112 }
113
114 do_file_read(pathname, databuf, rdsize, rdret)
115 char *pathname;
116 u_char *databuf;
117 int rdsize, *rdret;
118 {
119 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp;
120 int rc, slen, sz;
121
122 slen = strlen(pathname);
123 if (slen >= TMFFS_STRING_SIZE) {
124 printf("error: pathname arg exceeds string length limit\n");
125 return(ERROR_USAGE);
126 }
127 if (rdsize > MAX_READ_DATA) {
128 fprintf(stderr,
129 "BUG: attempt to read more than possible per TMFFS2 protocol\n");
130 exit(ERROR_BUG);
131 }
132 dp = cmdpkt + 1;
133 *dp++ = ETM_FFS2;
134 *dp++ = TMFFS_FILE_READ;
135 *dp++ = slen + 1;
136 strcpy(dp, pathname);
137 dp += slen + 1;
138 *dp++ = rdsize;
139 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1);
140 if (rc)
141 return(rc);
142 if (rvi_msg[3]) {
143 printf("read file: FFS error %d\n", rvi_msg[3]);
144 return(ERROR_TARGET);
145 }
146 if (rvi_msg_len < 6) {
147 *rdret = 0;
148 return(0);
149 }
150 sz = rvi_msg[4];
151 if (rvi_msg_len != sz + 6 || sz > rdsize) {
152 printf("error: read file response has wrong length\n");
153 return(ERROR_TARGET);
154 }
155 bcopy(rvi_msg + 5, databuf, sz);
156 *rdret = sz;
157 return(0);
158 }