FreeCalypso > hg > freecalypso-sw
comparison rvinterf/etmsync/fileio.c @ 291:69e8ae2b5ba2
fc-fsio: fwrite implementation started
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sat, 01 Mar 2014 02:36:25 +0000 |
parents | 244f08f58e51 |
children | ffeea2f9d149 |
comparison
equal
deleted
inserted
replaced
290:76228aecf0d9 | 291:69e8ae2b5ba2 |
---|---|
154 } | 154 } |
155 bcopy(rvi_msg + 5, databuf, sz); | 155 bcopy(rvi_msg + 5, databuf, sz); |
156 *rdret = sz; | 156 *rdret = sz; |
157 return(0); | 157 return(0); |
158 } | 158 } |
159 | |
160 max_short_file_write(pathname) | |
161 char *pathname; | |
162 { | |
163 return MAX_PKT_TO_TARGET - 3 - (strlen(pathname) + 2) - 3; | |
164 } | |
165 | |
166 do_short_fwrite(pathname, data, datalen) | |
167 char *pathname; | |
168 u_char *data; | |
169 { | |
170 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | |
171 int rc, slen; | |
172 | |
173 slen = strlen(pathname); | |
174 if (slen >= TMFFS_STRING_SIZE) { | |
175 printf("error: pathname arg exceeds string length limit\n"); | |
176 return(ERROR_USAGE); | |
177 } | |
178 if (datalen > max_short_file_write(pathname)) { | |
179 printf("error: short write data fails to fit in the packet\n"); | |
180 return(ERROR_USAGE); | |
181 } | |
182 dp = cmdpkt + 1; | |
183 *dp++ = ETM_FFS2; | |
184 *dp++ = TMFFS_FILE_WRITE; | |
185 *dp++ = slen + 1; | |
186 strcpy(dp, pathname); | |
187 dp += slen + 1; | |
188 *dp++ = datalen; | |
189 bcopy(data, dp, datalen); | |
190 dp += datalen; | |
191 *dp++ = FFS_O_CREATE | FFS_O_TRUNC; | |
192 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1); | |
193 if (rc) | |
194 return(rc); | |
195 if (rvi_msg_len != 5) { | |
196 printf("error: TMFFS_FILE_WRITE response has wrong length\n"); | |
197 return(ERROR_TARGET); | |
198 } | |
199 if (rvi_msg[3]) { | |
200 report_ffs_err("short file write", rvi_msg[3]); | |
201 return(ERROR_TARGET); | |
202 } | |
203 return(0); | |
204 } |