1 #include "u.h" 2 #include "../port/lib.h" 3 #include "mem.h" 4 #include "dat.h" 5 #include "fns.h" 6 #include "../port/error.h" 7 8 static Chan * 9 indirattach(char *spec) 10 { 11 char *p; 12 Dev *d; 13 14 if(*spec == 0) 15 error(Ebadspec); 16 p = strrchr(spec, '!'); 17 if(p == nil) 18 p = ""; 19 else 20 *p++ = 0; 21 d = devbyname(spec); 22 if(d == nil || d->dc == '*'){ 23 snprint(up->env->errstr, ERRMAX, "unknown device: %s", spec); 24 error(up->env->errstr); 25 } 26 if(up->env->pgrp->nodevs && 27 (utfrune("|esDa", d->dc) == nil || d->dc == 's' && *p!='\0')) 28 error(Enoattach); 29 return d->attach(p); 30 } 31 32 Dev indirdevtab = { 33 '*', 34 "indir", 35 36 devreset, 37 devinit, 38 devshutdown, 39 indirattach, 40 }; 41