annotate rvinterf/etmsync/symlink.c @ 923:10b4bed10192

gsm-fw/L1: fix for the DSP patch corruption bug The L1 code we got from the LoCosto fw contains a feature for DSP CPU load measurement. This feature is a LoCosto-ism, i.e., not applicable to earlier DBB chips (Calypso) with their respective earlier DSP ROMs. Most of the code dealing with that feature is conditionalized as #if (DSP >= 38), but one spot was missed, and the MCU code was writing into an API word dealing with this feature. In TCS211 this DSP API word happens to be used by the DSP code patch, hence that write was corrupting the patched DSP code.
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Mon, 19 Oct 2015 17:13:56 +0000
parents e0ca3ca46a06
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
302
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
1 /*
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
2 * Commands for experimenting with FFS symlinks
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
3 */
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
4
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
5 #include <sys/types.h>
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
6 #include <stdio.h>
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
7 #include <stdlib.h>
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
8 #include <string.h>
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
9 #include <strings.h>
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
10 #include "etm.h"
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
11 #include "ffs.h"
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
12 #include "tmffs2.h"
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
13 #include "limits.h"
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
14 #include "ffslimits.h"
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
15 #include "localtypes.h"
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
16 #include "localstruct.h"
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
17 #include "exitcodes.h"
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
18
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
19 extern u_char rvi_msg[];
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
20 extern int rvi_msg_len;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
21
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
22 do_symlink(target, realobj)
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
23 char *target, *realobj;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
24 {
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
25 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
26 int rc, targlen, reallen;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
27
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
28 reallen = strlen(realobj);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
29 if (reallen >= TMFFS_STRING_SIZE) {
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
30 printf("error: pathname arg exceeds string length limit\n");
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
31 return(ERROR_USAGE);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
32 }
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
33 targlen = strlen(target);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
34 if (3 + (reallen+2) + (targlen+2) + 1 > MAX_PKT_TO_TARGET) {
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
35 printf("error: symlink request fails to fit into packet\n");
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
36 return(ERROR_USAGE);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
37 }
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
38 dp = cmdpkt + 1;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
39 *dp++ = ETM_FFS2;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
40 *dp++ = TMFFS_SYMLINK;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
41 *dp++ = reallen + 1;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
42 strcpy(dp, realobj);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
43 dp += reallen + 1;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
44 *dp++ = targlen + 1;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
45 strcpy(dp, target);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
46 dp += targlen + 1;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
47 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
48 if (rc)
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
49 return(rc);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
50 if (rvi_msg_len != 5) {
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
51 printf("error: TMFFS_SYMLINK response has wrong length\n");
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
52 return(ERROR_TARGET);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
53 }
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
54 if (rvi_msg[3]) {
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
55 report_ffs_err("symlink", rvi_msg[3]);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
56 return(ERROR_TARGET);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
57 }
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
58 return(0);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
59 }
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
60
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
61 cmd_symlink(argc, argv)
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
62 char **argv;
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
63 {
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
64 return do_symlink(argv[1], argv[2]);
cd5068cf0551 fc-fsio: symlink command implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
65 }
303
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
66
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
67 do_readlink(pathname, databuf, rdret)
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
68 char *pathname;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
69 u_char *databuf;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
70 int *rdret;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
71 {
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
72 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
73 int rc, slen, sz;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
74
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
75 slen = strlen(pathname);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
76 if (slen >= TMFFS_STRING_SIZE) {
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
77 printf("error: pathname arg exceeds string length limit\n");
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
78 return(ERROR_USAGE);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
79 }
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
80 dp = cmdpkt + 1;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
81 *dp++ = ETM_FFS2;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
82 *dp++ = TMFFS_READLINK;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
83 *dp++ = slen + 1;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
84 strcpy(dp, pathname);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
85 dp += slen + 1;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
86 *dp++ = 0; /* dummy 2nd buffer */
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
87 rc = etm_pkt_exch(cmdpkt, dp - cmdpkt - 1);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
88 if (rc)
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
89 return(rc);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
90 if (rvi_msg[3]) {
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
91 report_ffs_err("readlink", rvi_msg[3]);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
92 return(ERROR_TARGET);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
93 }
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
94 if (rvi_msg_len < 6) {
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
95 *rdret = 0;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
96 return(0);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
97 }
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
98 sz = rvi_msg[4];
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
99 if (rvi_msg_len != sz + 6) {
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
100 printf("error: readlink response has wrong length\n");
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
101 return(ERROR_TARGET);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
102 }
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
103 bcopy(rvi_msg + 5, databuf, sz);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
104 *rdret = sz;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
105 return(0);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
106 }
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
107
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
108 cmd_readlink(argc, argv)
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
109 char **argv;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
110 {
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
111 u_char databuf[256];
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
112 int rc, sz, off, l;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
113
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
114 rc = do_readlink(argv[1], databuf, &sz);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
115 if (rc)
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
116 return(rc);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
117 printf("%d bytes read\n", sz);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
118 for (off = 0; off < sz; off += 16) {
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
119 l = sz - off;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
120 if (l > 16)
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
121 l = 16;
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
122 hexdump_line(off, databuf + off, l);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
123 }
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
124 return(0);
61c68a55f2a2 fc-fsio: readlink implemented
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 302
diff changeset
125 }
304
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
126
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
127 do_readlink_sancheck(pathname, databuf)
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
128 char *pathname;
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
129 u_char *databuf;
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
130 {
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
131 int rc, sz;
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
132
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
133 rc = do_readlink(pathname, databuf, &sz);
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
134 if (rc)
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
135 return(rc);
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
136 if (sz < 2 || databuf[sz-1]) {
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
137 printf("error: readlink on %s returned garbage\n", pathname);
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
138 return(ERROR_TARGET);
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
139 }
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
140 return(0);
e0ca3ca46a06 fc-fsio: ll reads and shows symlinks
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 303
diff changeset
141 }