annotate rvinterf/etmsync/fsbasics.c @ 395:8891c3d0c68a

fc-loadtool: pass abb[rw] commands through to loadagent
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Wed, 11 Jun 2014 17:49:13 +0000
parents 3dd74b16df82
children d1333db6385f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
278
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
1 /*
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
2 * Basic FFS2 operations
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
3 */
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
4
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
5 #include <sys/types.h>
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
6 #include <stdio.h>
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
7 #include <stdlib.h>
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
8 #include <string.h>
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
9 #include <strings.h>
278
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
10 #include "etm.h"
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
11 #include "ffs.h"
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
12 #include "tmffs2.h"
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
13 #include "limits.h"
295
3dd74b16df82 fc-fsio: pathname recursion handling revamped
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 289
diff changeset
14 #include "ffslimits.h"
282
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
15 #include "localtypes.h"
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
16 #include "localstruct.h"
278
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
17 #include "exitcodes.h"
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
18
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
19 extern u_char rvi_msg[];
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
20 extern int rvi_msg_len;
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
21
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
22 cmd_ffs2ver()
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
23 {
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
24 u_char cmdpkt[4];
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
25 int rc;
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
26
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
27 cmdpkt[1] = ETM_FFS2;
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
28 cmdpkt[2] = TMFFS_VERSION;
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
29 rc = etm_pkt_exch(cmdpkt, 2);
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
30 if (rc)
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
31 return(rc);
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
32 if (rvi_msg[3]) {
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
33 printf("FFS2 error %d\n", rvi_msg[3]);
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
34 return(ERROR_TARGET);
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
35 }
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
36 if (rvi_msg_len != 7) {
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
37 printf("error: FFS2 version response has wrong length\n");
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
38 return(ERROR_TARGET);
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
39 }
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
40 printf("FFS2 version: %02X.%02X\n", rvi_msg[5], rvi_msg[4]);
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
41 return(0);
f77480d3dd21 fc-fsio: first ffs2ver command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
42 }
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
43
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
44 do_opendir(pathname, statertn, countrtn)
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
45 char *pathname;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
46 u_char *statertn;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
47 int *countrtn;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
48 {
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
49 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
50 int rc, slen;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
51
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
52 slen = strlen(pathname);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
53 if (slen >= TMFFS_STRING_SIZE) {
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
54 printf("error: pathname arg exceeds string length limit\n");
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
55 return(ERROR_USAGE);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
56 }
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
57 dp = cmdpkt + 1;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
58 *dp++ = ETM_FFS2;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
59 *dp++ = TMFFS_OPENDIR;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
60 *dp++ = slen + 1;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
61 strcpy(dp, pathname);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
62 dp += slen + 1;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
63 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
64 if (rc)
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
65 return(rc);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
66 if (rvi_msg[3]) {
289
244f08f58e51 fc-fsio: error decoding implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 282
diff changeset
67 report_ffs_err("opendir", rvi_msg[3]);
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
68 return(ERROR_TARGET);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
69 }
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
70 if (rvi_msg_len != 11 || rvi_msg[5] != 4) {
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
71 printf("error: opendir response has wrong length\n");
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
72 return(ERROR_TARGET);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
73 }
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
74 *countrtn = rvi_msg[4];
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
75 bcopy(rvi_msg + 6, statertn, 4);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
76 return(0);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
77 }
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
78
295
3dd74b16df82 fc-fsio: pathname recursion handling revamped
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 289
diff changeset
79 do_readdir(state, namebuf, namebuflen)
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
80 u_char *state;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
81 char *namebuf;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
82 {
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
83 u_char cmdpkt[10];
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
84 int rc, slen;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
85
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
86 cmdpkt[1] = ETM_FFS2;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
87 cmdpkt[2] = TMFFS_READDIR;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
88 cmdpkt[3] = 4;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
89 bcopy(state, cmdpkt+4, 4);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
90 cmdpkt[8] = TMFFS_STRING_SIZE;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
91 rc = etm_pkt_exch(cmdpkt, 8);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
92 if (rc)
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
93 return(rc);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
94 if (rvi_msg[3]) {
289
244f08f58e51 fc-fsio: error decoding implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 282
diff changeset
95 report_ffs_err("readdir", rvi_msg[3]);
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
96 return(ERROR_TARGET);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
97 }
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
98 if (rvi_msg_len < 14) {
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
99 malformed: printf("error: readdir response is malformed\n");
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
100 return(ERROR_TARGET);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
101 }
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
102 if (rvi_msg[5] != 4)
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
103 goto malformed;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
104 slen = rvi_msg[10];
295
3dd74b16df82 fc-fsio: pathname recursion handling revamped
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 289
diff changeset
105 if (slen < 2 || rvi_msg_len != slen + 12)
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
106 goto malformed;
295
3dd74b16df82 fc-fsio: pathname recursion handling revamped
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 289
diff changeset
107 if (slen > namebuflen) {
3dd74b16df82 fc-fsio: pathname recursion handling revamped
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 289
diff changeset
108 printf("error: readdir response exceeds provided buffer\n");
3dd74b16df82 fc-fsio: pathname recursion handling revamped
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 289
diff changeset
109 return(ERROR_TARGET);
3dd74b16df82 fc-fsio: pathname recursion handling revamped
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 289
diff changeset
110 }
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
111 if (rvi_msg[11 + slen - 1]) /* must be terminating NUL */
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
112 goto malformed;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
113 bcopy(rvi_msg + 6, state, 4);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
114 strcpy(namebuf, rvi_msg + 11);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
115 return(0);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
116 }
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
117
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
118 cmd_ls(argc, argv)
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
119 char **argv;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
120 {
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
121 u_char state[4];
295
3dd74b16df82 fc-fsio: pathname recursion handling revamped
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 289
diff changeset
122 char namebuf[256];
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
123 int nument, i, rc;
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
124
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
125 rc = do_opendir(argv[1], state, &nument);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
126 if (rc)
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
127 return(rc);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
128 if (!nument) {
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
129 printf("<empty dir>\n");
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
130 return(0);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
131 }
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
132 for (i = 0; i < nument; i++) {
295
3dd74b16df82 fc-fsio: pathname recursion handling revamped
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 289
diff changeset
133 rc = do_readdir(state, namebuf, sizeof namebuf);
279
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
134 if (rc)
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
135 return(rc);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
136 printf("%s\n", namebuf);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
137 }
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
138 return(0);
36ad667341fc fc-fsio: ls implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 278
diff changeset
139 }
282
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
140
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
141 do_xlstat(pathname, result)
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
142 char *pathname;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
143 struct stat_info *result;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
144 {
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
145 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
146 int rc, slen;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
147
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
148 slen = strlen(pathname);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
149 if (slen >= TMFFS_STRING_SIZE) {
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
150 printf("error: pathname arg exceeds string length limit\n");
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
151 return(ERROR_USAGE);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
152 }
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
153 dp = cmdpkt + 1;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
154 *dp++ = ETM_FFS2;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
155 *dp++ = TMFFS_XLSTAT;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
156 *dp++ = slen + 1;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
157 strcpy(dp, pathname);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
158 dp += slen + 1;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
159 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
160 if (rc)
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
161 return(rc);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
162 if (rvi_msg[3]) {
289
244f08f58e51 fc-fsio: error decoding implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 282
diff changeset
163 report_ffs_err("xlstat", rvi_msg[3]);
282
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
164 return(ERROR_TARGET);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
165 }
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
166 if (rvi_msg_len != 30 || rvi_msg[4] != 24) {
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
167 printf("error: xlstat response has wrong length\n");
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
168 return(ERROR_TARGET);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
169 }
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
170 result->type = rvi_msg[5];
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
171 result->flags = rvi_msg[6];
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
172 result->inode = rvi_msg[7] | rvi_msg[8] << 8;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
173 result->size = rvi_msg[9] | rvi_msg[10] << 8 | rvi_msg[11] << 16 |
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
174 rvi_msg[12] << 24;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
175 result->space = rvi_msg[13] | rvi_msg[14] << 8 | rvi_msg[15] << 16 |
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
176 rvi_msg[16] << 24;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
177 result->location = rvi_msg[17] | rvi_msg[18] << 8 | rvi_msg[19] << 16 |
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
178 rvi_msg[20] << 24;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
179 result->block = rvi_msg[22];
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
180 result->sequence = rvi_msg[23] | rvi_msg[24] << 8;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
181 result->updates = rvi_msg[25] | rvi_msg[26] << 8;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
182 return(0);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
183 }
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
184
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
185 cmd_stat(argc, argv)
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
186 char **argv;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
187 {
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
188 struct stat_info stat;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
189 int rc;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
190 char *type;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
191
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
192 rc = do_xlstat(argv[1], &stat);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
193 if (rc)
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
194 return(rc);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
195 switch (stat.type) {
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
196 case OT_FILE:
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
197 type = "file";
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
198 break;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
199 case OT_DIR:
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
200 type = "directory";
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
201 break;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
202 case OT_LINK:
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
203 type = "symlink";
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
204 break;
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
205 default:
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
206 type = "???";
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
207 }
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
208 printf("Type: %s%s\n", type,
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
209 stat.flags & OF_READONLY ? ", read-only" : "");
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
210 printf("inode %x\n", stat.inode);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
211 printf("size %u, space %u\n", stat.size, stat.space);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
212 printf("location=%x, block %d\n", stat.location, stat.block);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
213 return(0);
517e8a428fde fc-fsio: xlstat operation implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 279
diff changeset
214 }