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 }