16 fprint(2, "usage: cdsh [-r root]\n");
24 if((pid = fork()) < 0)
29 execl("/bin/rc", "rc", "-c", cmd, nil);
46 l = strlen(pwd)+1+strlen(s)+1+50; /* 50 = crud for unicode mistakes */
48 snprint(newpwd, l, "%s/%s", pwd, s);
50 assert(newpwd[0] == '/');
53 if(chdir(root) < 0 || (newpwd[1] != '\0' && chdir(newpwd+1) < 0)) {
66 main(int argc, char **argv)
79 fprint(2, "root must be rooted\n");
92 fprint(2, "cannot cd %s: %r\n", root);
96 Binit(&bin, 0, OREAD);
97 while(fprint(2, "%s%% ", pwd), (p = Brdline(&bin, '\n'))) {
98 p[Blinelen(&bin)-1] = '\0';
99 nf = tokenize(p, f, nelem(f));
102 if(strcmp(f[0], "exit") == 0)
104 if(strcmp(f[0], "lc") == 0) {
106 if(system("/bin/lc") < 0)
107 fprint(2, "lc: %r\n");
109 if(strpbrk(p, "'`{}^@$#&()|\\;><"))
110 fprint(2, "no shell characters allowed\n");
117 fprint(2, "lc: %r\n");
122 if(strcmp(f[0], "cd") == 0) {
124 fprint(2, "usage: cd dir\n");
125 else if(cd(f[1]) < 0)
126 fprint(2, "cd: %r\n");
129 fprint(2, "commands are cd, lc, and exit\n");