diff options
author | rsc <devnull@localhost> | 2003-12-11 17:50:28 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2003-12-11 17:50:28 +0000 |
commit | b3994ec5c78e6c18885079b58abb7fb997899c3f (patch) | |
tree | d4ead391f5ebd1554cc5ecfba69130e750de67bb /src/lib9/_p9translate.c | |
parent | 32f69c36e0eec1227934bbd34854bfebd88686f2 (diff) | |
download | plan9port-b3994ec5c78e6c18885079b58abb7fb997899c3f.tar.gz plan9port-b3994ec5c78e6c18885079b58abb7fb997899c3f.tar.bz2 plan9port-b3994ec5c78e6c18885079b58abb7fb997899c3f.zip |
More files related to user-level file servers.
Also add acme!
Diffstat (limited to 'src/lib9/_p9translate.c')
-rw-r--r-- | src/lib9/_p9translate.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/lib9/_p9translate.c b/src/lib9/_p9translate.c new file mode 100644 index 00000000..4eb6eac9 --- /dev/null +++ b/src/lib9/_p9translate.c @@ -0,0 +1,46 @@ +#include <u.h> +#include <libc.h> + +/* + * I don't want too many of these, + * but the ones we have are just too useful. + */ +static struct { + char *old; + char *new; +} replace[] = { + "#9", nil, /* must be first */ + "#d", "/dev/fd", +}; + +char* +_p9translate(char *old) +{ + char *new; + int i, olen, nlen, len; + + if(replace[0].new == nil){ + replace[0].new = getenv("PLAN9"); + if(replace[0].new == nil) + replace[0].new = "/usr/local/plan9"; + } + + for(i=0; i<nelem(replace); i++){ + if(!replace[i].new) + continue; + olen = strlen(replace[i].old); + if(strncmp(old, replace[i].old, olen) != 0 + || (old[olen] != '\0' && old[olen] != '/')) + continue; + nlen = strlen(replace[i].new); + len = strlen(old)+nlen-olen; + new = malloc(len+1); + if(new == nil) + return nil; + strcpy(new, replace[i].new); + strcpy(new+nlen, old+olen); + assert(strlen(new) == len); + return new; + } + return old; +} |