FreeCalypso > hg > freecalypso-sw
annotate rvinterf/etmsync/fileio.c @ 992:a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
The new implementation should work with both the familiar Calypso C035
boot ROM version found in our regular targets as well as the older
Calypso F741979B version found on the vintage D-Sample board.
| author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
|---|---|
| date | Wed, 30 Dec 2015 21:28:41 +0000 |
| parents | d1333db6385f |
| children |
| rev | line source |
|---|---|
|
284
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * FFS2 file descriptor I/O operations |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 */ |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 #include <sys/types.h> |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 #include <stdio.h> |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include <stdlib.h> |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 #include <string.h> |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 #include <strings.h> |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 #include "etm.h" |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 #include "ffs.h" |
|
910
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
12 #include "ffserr.h" |
|
284
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 #include "tmffs2.h" |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 #include "limits.h" |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 #include "localtypes.h" |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 #include "localstruct.h" |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 #include "exitcodes.h" |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 extern u_char rvi_msg[]; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 extern int rvi_msg_len; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 fd_open(pathname, flags, fdrtn) |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 char *pathname; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 int flags, *fdrtn; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 { |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 int rc, slen; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 slen = strlen(pathname); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 if (slen >= TMFFS_STRING_SIZE) { |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 printf("error: pathname arg exceeds string length limit\n"); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 return(ERROR_USAGE); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 dp = cmdpkt + 1; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 *dp++ = ETM_FFS2; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 *dp++ = TMFFS_OPEN; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 *dp++ = slen + 1; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 strcpy(dp, pathname); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 dp += slen + 1; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 *dp++ = flags; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 if (rc) |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 return(rc); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 if (rvi_msg[3]) { |
|
289
244f08f58e51
fc-fsio: error decoding implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
286
diff
changeset
|
45 report_ffs_err("open fd", rvi_msg[3]); |
|
284
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 return(ERROR_TARGET); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 if (rvi_msg_len != 6) { |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 printf("error: open fd response has wrong length\n"); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 return(ERROR_TARGET); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 *fdrtn = rvi_msg[4]; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 return(0); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 fd_read(fd, databuf, rdsize, rdret) |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 u_char *databuf; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 int fd, rdsize, *rdret; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 { |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 u_char cmdpkt[6]; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 int rc, sz; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 if (rdsize > MAX_READ_DATA) { |
|
286
146e7bf3fa4e
fc-fsio: fd debug commands implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
285
diff
changeset
|
64 printf("error: # of bytes to read may not exceed %d\n", |
|
146e7bf3fa4e
fc-fsio: fd debug commands implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
285
diff
changeset
|
65 MAX_READ_DATA); |
|
146e7bf3fa4e
fc-fsio: fd debug commands implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
285
diff
changeset
|
66 return(ERROR_USAGE); |
|
284
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 cmdpkt[1] = ETM_FFS2; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
69 cmdpkt[2] = TMFFS_READ; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
70 cmdpkt[3] = fd; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
71 cmdpkt[4] = rdsize; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
72 rc = etm_pkt_exch(cmdpkt, 4); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
73 if (rc) |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
74 return(rc); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
75 if (rvi_msg[3]) { |
|
289
244f08f58e51
fc-fsio: error decoding implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
286
diff
changeset
|
76 report_ffs_err("read fd", rvi_msg[3]); |
|
284
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
77 return(ERROR_TARGET); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
78 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 if (rvi_msg_len < 6) { |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 *rdret = 0; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
81 return(0); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
82 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
83 sz = rvi_msg[4]; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
84 if (rvi_msg_len != sz + 6 || sz > rdsize) { |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
85 printf("error: read fd response has wrong length\n"); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
86 return(ERROR_TARGET); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
87 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
88 bcopy(rvi_msg + 5, databuf, sz); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
89 *rdret = sz; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
90 return(0); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
91 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
92 |
|
293
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
93 fd_write(fd, data, wrsize) |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
94 u_char *data; |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
95 { |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
96 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
97 int rc; |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
98 |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
99 if (wrsize > MAX_PKT_TO_TARGET - 6) { |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
100 printf("error: fd write data fails to fit in the packet\n"); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
101 return(ERROR_USAGE); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
102 } |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
103 dp = cmdpkt + 1; |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
104 *dp++ = ETM_FFS2; |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
105 *dp++ = TMFFS_WRITE; |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
106 *dp++ = fd; |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
107 *dp++ = wrsize; |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
108 bcopy(data, dp, wrsize); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
109 dp += wrsize; |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
110 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
111 if (rc) |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
112 return(rc); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
113 if (rvi_msg[3]) { |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
114 report_ffs_err("fd write", rvi_msg[3]); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
115 return(ERROR_TARGET); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
116 } |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
117 if (rvi_msg_len != 6) { |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
118 printf("error: TMFFS_WRITE response has wrong length\n"); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
119 return(ERROR_TARGET); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
120 } |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
121 if (rvi_msg[4] != wrsize) { |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
122 printf("fd write error: # of bytes written != requested\n"); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
123 return(ERROR_TARGET); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
124 } |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
125 return(0); |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
126 } |
|
ffeea2f9d149
fc-fsio: fwrite from file implemented, but no 0 length file handling yet
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
291
diff
changeset
|
127 |
|
284
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
128 fd_close(fd) |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
129 { |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
130 u_char cmdpkt[5]; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
131 int rc; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
132 |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
133 cmdpkt[1] = ETM_FFS2; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
134 cmdpkt[2] = TMFFS_CLOSE; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
135 cmdpkt[3] = fd; |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
136 rc = etm_pkt_exch(cmdpkt, 3); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
137 if (rc) |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
138 return(rc); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
139 if (rvi_msg[3]) { |
|
289
244f08f58e51
fc-fsio: error decoding implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
286
diff
changeset
|
140 report_ffs_err("close fd", rvi_msg[3]); |
|
284
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
141 return(ERROR_TARGET); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
142 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
143 if (rvi_msg_len != 5) { |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
144 printf("error: close fd response has wrong length\n"); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
145 return(ERROR_TARGET); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
146 } |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
147 return(0); |
|
7b4d4e3e610a
fc-fsio: functions written for file descriptor open/read/close
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
148 } |
|
285
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
149 |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
150 do_file_read(pathname, databuf, rdsize, rdret) |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
151 char *pathname; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
152 u_char *databuf; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
153 int rdsize, *rdret; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
154 { |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
155 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
156 int rc, slen, sz; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
157 |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
158 slen = strlen(pathname); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
159 if (slen >= TMFFS_STRING_SIZE) { |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
160 printf("error: pathname arg exceeds string length limit\n"); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
161 return(ERROR_USAGE); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
162 } |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
163 if (rdsize > MAX_READ_DATA) { |
|
286
146e7bf3fa4e
fc-fsio: fd debug commands implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
285
diff
changeset
|
164 printf("error: # of bytes to read may not exceed %d\n", |
|
146e7bf3fa4e
fc-fsio: fd debug commands implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
285
diff
changeset
|
165 MAX_READ_DATA); |
|
146e7bf3fa4e
fc-fsio: fd debug commands implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
285
diff
changeset
|
166 return(ERROR_USAGE); |
|
285
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
167 } |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
168 dp = cmdpkt + 1; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
169 *dp++ = ETM_FFS2; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
170 *dp++ = TMFFS_FILE_READ; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
171 *dp++ = slen + 1; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
172 strcpy(dp, pathname); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
173 dp += slen + 1; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
174 *dp++ = rdsize; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
175 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
176 if (rc) |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
177 return(rc); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
178 if (rvi_msg[3]) { |
|
289
244f08f58e51
fc-fsio: error decoding implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
286
diff
changeset
|
179 report_ffs_err("read file", rvi_msg[3]); |
|
285
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
180 return(ERROR_TARGET); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
181 } |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
182 if (rvi_msg_len < 6) { |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
183 *rdret = 0; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
184 return(0); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
185 } |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
186 sz = rvi_msg[4]; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
187 if (rvi_msg_len != sz + 6 || sz > rdsize) { |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
188 printf("error: read file response has wrong length\n"); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
189 return(ERROR_TARGET); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
190 } |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
191 bcopy(rvi_msg + 5, databuf, sz); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
192 *rdret = sz; |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
193 return(0); |
|
bb28ba9e82c5
fc-fsio: file read primitive and hd command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
284
diff
changeset
|
194 } |
|
291
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
195 |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
196 max_short_file_write(pathname) |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
197 char *pathname; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
198 { |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
199 return MAX_PKT_TO_TARGET - 3 - (strlen(pathname) + 2) - 3; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
200 } |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
201 |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
202 do_short_fwrite(pathname, data, datalen) |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
203 char *pathname; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
204 u_char *data; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
205 { |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
206 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
207 int rc, slen; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
208 |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
209 slen = strlen(pathname); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
210 if (slen >= TMFFS_STRING_SIZE) { |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
211 printf("error: pathname arg exceeds string length limit\n"); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
212 return(ERROR_USAGE); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
213 } |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
214 if (datalen > max_short_file_write(pathname)) { |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
215 printf("error: short write data fails to fit in the packet\n"); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
216 return(ERROR_USAGE); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
217 } |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
218 dp = cmdpkt + 1; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
219 *dp++ = ETM_FFS2; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
220 *dp++ = TMFFS_FILE_WRITE; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
221 *dp++ = slen + 1; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
222 strcpy(dp, pathname); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
223 dp += slen + 1; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
224 *dp++ = datalen; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
225 bcopy(data, dp, datalen); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
226 dp += datalen; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
227 *dp++ = FFS_O_CREATE | FFS_O_TRUNC; |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
228 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
229 if (rc) |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
230 return(rc); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
231 if (rvi_msg_len != 5) { |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
232 printf("error: TMFFS_FILE_WRITE response has wrong length\n"); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
233 return(ERROR_TARGET); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
234 } |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
235 if (rvi_msg[3]) { |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
236 report_ffs_err("short file write", rvi_msg[3]); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
237 return(ERROR_TARGET); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
238 } |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
239 return(0); |
|
69e8ae2b5ba2
fc-fsio: fwrite implementation started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
289
diff
changeset
|
240 } |
|
910
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
241 |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
242 do_opendir(pathname, statertn, countrtn) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
243 char *pathname; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
244 u_char *statertn; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
245 int *countrtn; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
246 { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
247 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
248 int rc, slen; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
249 |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
250 slen = strlen(pathname); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
251 if (slen >= TMFFS_STRING_SIZE) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
252 printf("error: pathname arg exceeds string length limit\n"); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
253 return(ERROR_USAGE); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
254 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
255 dp = cmdpkt + 1; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
256 *dp++ = ETM_FFS2; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
257 *dp++ = TMFFS_OPENDIR; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
258 *dp++ = slen + 1; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
259 strcpy(dp, pathname); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
260 dp += slen + 1; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
261 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
262 if (rc) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
263 return(rc); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
264 if (rvi_msg[3]) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
265 report_ffs_err("opendir", rvi_msg[3]); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
266 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
267 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
268 if (rvi_msg_len != 11 || rvi_msg[5] != 4) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
269 printf("error: opendir response has wrong length\n"); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
270 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
271 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
272 *countrtn = rvi_msg[4]; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
273 bcopy(rvi_msg + 6, statertn, 4); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
274 return(0); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
275 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
276 |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
277 do_readdir(state, namebuf, namebuflen) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
278 u_char *state; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
279 char *namebuf; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
280 { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
281 u_char cmdpkt[10]; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
282 int rc, slen; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
283 |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
284 cmdpkt[1] = ETM_FFS2; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
285 cmdpkt[2] = TMFFS_READDIR; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
286 cmdpkt[3] = 4; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
287 bcopy(state, cmdpkt+4, 4); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
288 cmdpkt[8] = TMFFS_STRING_SIZE; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
289 rc = etm_pkt_exch(cmdpkt, 8); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
290 if (rc) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
291 return(rc); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
292 if (rvi_msg[3]) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
293 report_ffs_err("readdir", rvi_msg[3]); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
294 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
295 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
296 if (rvi_msg_len < 14) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
297 malformed: printf("error: readdir response is malformed\n"); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
298 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
299 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
300 if (rvi_msg[5] != 4) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
301 goto malformed; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
302 slen = rvi_msg[10]; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
303 if (slen < 2 || rvi_msg_len != slen + 12) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
304 goto malformed; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
305 if (slen > namebuflen) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
306 printf("error: readdir response exceeds provided buffer\n"); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
307 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
308 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
309 if (rvi_msg[11 + slen - 1]) /* must be terminating NUL */ |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
310 goto malformed; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
311 bcopy(rvi_msg + 6, state, 4); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
312 strcpy(namebuf, rvi_msg + 11); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
313 return(0); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
314 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
315 |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
316 do_xlstat(pathname, result) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
317 char *pathname; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
318 struct stat_info *result; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
319 { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
320 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
321 int rc, slen; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
322 |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
323 slen = strlen(pathname); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
324 if (slen >= TMFFS_STRING_SIZE) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
325 printf("error: pathname arg exceeds string length limit\n"); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
326 return(ERROR_USAGE); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
327 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
328 dp = cmdpkt + 1; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
329 *dp++ = ETM_FFS2; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
330 *dp++ = TMFFS_XLSTAT; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
331 *dp++ = slen + 1; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
332 strcpy(dp, pathname); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
333 dp += slen + 1; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
334 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
335 if (rc) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
336 return(rc); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
337 if (rvi_msg[3]) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
338 report_ffs_err("xlstat", rvi_msg[3]); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
339 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
340 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
341 if (rvi_msg_len != 30 || rvi_msg[4] != 24) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
342 printf("error: xlstat response has wrong length\n"); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
343 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
344 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
345 result->type = rvi_msg[5]; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
346 result->flags = rvi_msg[6]; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
347 result->inode = rvi_msg[7] | rvi_msg[8] << 8; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
348 result->size = rvi_msg[9] | rvi_msg[10] << 8 | rvi_msg[11] << 16 | |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
349 rvi_msg[12] << 24; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
350 result->space = rvi_msg[13] | rvi_msg[14] << 8 | rvi_msg[15] << 16 | |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
351 rvi_msg[16] << 24; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
352 result->location = rvi_msg[17] | rvi_msg[18] << 8 | rvi_msg[19] << 16 | |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
353 rvi_msg[20] << 24; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
354 result->block = rvi_msg[22]; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
355 result->sequence = rvi_msg[23] | rvi_msg[24] << 8; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
356 result->updates = rvi_msg[25] | rvi_msg[26] << 8; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
357 return(0); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
358 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
359 |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
360 do_mkdir_existok(pathname) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
361 char *pathname; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
362 { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
363 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
364 int rc, slen; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
365 struct stat_info stat; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
366 |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
367 slen = strlen(pathname); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
368 if (slen >= TMFFS_STRING_SIZE) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
369 printf("error: pathname arg exceeds string length limit\n"); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
370 return(ERROR_USAGE); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
371 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
372 dp = cmdpkt + 1; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
373 *dp++ = ETM_FFS2; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
374 *dp++ = TMFFS_MKDIR; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
375 *dp++ = slen + 1; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
376 strcpy(dp, pathname); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
377 dp += slen + 1; |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
378 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
379 if (rc) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
380 return(rc); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
381 if (rvi_msg_len != 5) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
382 printf("error: mkdir response has wrong length\n"); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
383 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
384 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
385 if (!rvi_msg[3]) /* success */ |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
386 return(0); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
387 if (rvi_msg[3] != TMFFS_ERR_EXISTS) { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
388 report_ffs_err("mkdir", rvi_msg[3]); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
389 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
390 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
391 /* object already exists: OK if it's a directory, error otherwise */ |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
392 rc = do_xlstat(pathname, &stat); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
393 if (rc) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
394 return(rc); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
395 if (stat.type == OT_DIR) |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
396 return(0); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
397 else { |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
398 printf("error: %s exists and is not a directory\n", pathname); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
399 return(ERROR_TARGET); |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
400 } |
|
d1333db6385f
rvinterf/etmsync refactoring: operation functions consolidated in fileio.c
Space Falcon <falcon@ivan.Harhan.ORG>
parents:
293
diff
changeset
|
401 } |
