Blame


1 b3994ec5 2003-12-11 devnull #include <u.h>
2 b3994ec5 2003-12-11 devnull #include <libc.h>
3 b3994ec5 2003-12-11 devnull
4 b3994ec5 2003-12-11 devnull /*
5 b3994ec5 2003-12-11 devnull * I don't want too many of these,
6 b3994ec5 2003-12-11 devnull * but the ones we have are just too useful.
7 b3994ec5 2003-12-11 devnull */
8 b3994ec5 2003-12-11 devnull static struct {
9 b3994ec5 2003-12-11 devnull char *old;
10 b3994ec5 2003-12-11 devnull char *new;
11 b3994ec5 2003-12-11 devnull } replace[] = {
12 b3994ec5 2003-12-11 devnull "#9", nil, /* must be first */
13 b3994ec5 2003-12-11 devnull "#d", "/dev/fd",
14 b3994ec5 2003-12-11 devnull };
15 b3994ec5 2003-12-11 devnull
16 b3994ec5 2003-12-11 devnull char*
17 8ad51794 2004-03-25 devnull plan9translate(char *old)
18 b3994ec5 2003-12-11 devnull {
19 b3994ec5 2003-12-11 devnull char *new;
20 b3994ec5 2003-12-11 devnull int i, olen, nlen, len;
21 b3994ec5 2003-12-11 devnull
22 b3994ec5 2003-12-11 devnull if(replace[0].new == nil){
23 b3994ec5 2003-12-11 devnull replace[0].new = getenv("PLAN9");
24 b3994ec5 2003-12-11 devnull if(replace[0].new == nil)
25 b3994ec5 2003-12-11 devnull replace[0].new = "/usr/local/plan9";
26 b3994ec5 2003-12-11 devnull }
27 b3994ec5 2003-12-11 devnull
28 b3994ec5 2003-12-11 devnull for(i=0; i<nelem(replace); i++){
29 b3994ec5 2003-12-11 devnull if(!replace[i].new)
30 b3994ec5 2003-12-11 devnull continue;
31 b3994ec5 2003-12-11 devnull olen = strlen(replace[i].old);
32 b3994ec5 2003-12-11 devnull if(strncmp(old, replace[i].old, olen) != 0
33 b3994ec5 2003-12-11 devnull || (old[olen] != '\0' && old[olen] != '/'))
34 b3994ec5 2003-12-11 devnull continue;
35 b3994ec5 2003-12-11 devnull nlen = strlen(replace[i].new);
36 b3994ec5 2003-12-11 devnull len = strlen(old)+nlen-olen;
37 b3994ec5 2003-12-11 devnull new = malloc(len+1);
38 b3994ec5 2003-12-11 devnull if(new == nil)
39 8ad51794 2004-03-25 devnull return "<out of memory>";
40 b3994ec5 2003-12-11 devnull strcpy(new, replace[i].new);
41 b3994ec5 2003-12-11 devnull strcpy(new+nlen, old+olen);
42 b3994ec5 2003-12-11 devnull assert(strlen(new) == len);
43 b3994ec5 2003-12-11 devnull return new;
44 b3994ec5 2003-12-11 devnull }
45 b3994ec5 2003-12-11 devnull return old;
46 b3994ec5 2003-12-11 devnull }