FreeCalypso > hg > freecalypso-sw
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 } |