13 for(i=1; i<file.nused; i++){
17 if(f->dev==g->dev && f->qidpath==g->qidpath)
18 warn_SS(Wdupfile, &f->name, &g->name);
27 int i, samename, newfile;
30 long mtime, appendonly, length;
33 samename = Strcmp(&genstr, &f->name) == 0;
34 name = Strtoc(&f->name);
35 i = statfile(name, &dev, &qid, &mtime, 0, 0);
39 (f->dev!=dev || f->qidpath!=qid || f->mtime<mtime)){
43 warn_S(Wdate, &genstr);
49 genc = Strtoc(&genstr);
50 if((io=create(genc, 1, 0666L)) < 0)
51 error_r(Ecreate, genc);
53 if(statfd(io, 0, 0, 0, &length, &appendonly) > 0 && appendonly && length>0){
58 if(f->name.s[0]==0 || samename){
59 if(addr.r.p1==0 && addr.r.p2==f->nc)
61 state(f, f->cleanseq==f->seq? Clean : Dirty);
64 dprint("(new file) ");
65 if(addr.r.p2>0 && filereadc(f, addr.r.p2-1)!='\n')
68 if(f->name.s[0]==0 || samename){
69 if(statfile(name, &dev, &qid, &mtime, 0, 0) > 0){
80 readio(File *f, int *nulls, int setdate, int toterm)
89 char buf[BLOCKSIZE+1], *s;
94 nt = bufload(f, 0, io, nulls);
98 for(nt = 0; (n = read(io, buf+b, BLOCKSIZE-b))>0; nt+=(r-genbuf)){
104 if((*r = *(uchar*)s) < Runeself){
114 w = chartorune(r, s);
127 loginsert(f, p, genbuf, r-genbuf);
134 if(statfd(io, &dev, &qid, &mtime, 0, 0) > 0){
151 while(p < addr.r.p2){
152 if(addr.r.p2-p>BLOCKSIZE)
156 bufread(f, p, genbuf, n);
157 c = Strtoc(tmprstr(genbuf, n));
159 if(Write(io, c, m) != m){
176 dprint("#%lud\n", p);
183 bootterm(char *machine, char **argv)
185 int ph2t[2], pt2h[2];
194 fprint(2, "can't exec: ");
198 if(pipe(ph2t)==-1 || pipe(pt2h)==-1)
210 fprint(2, "can't exec: ");
214 panic("can't fork samterm");
225 connectto(char *machine, char **argv)
232 for(av = argv; *av; av++)
234 av = malloc(sizeof(char*)*((av-argv) + 5));
236 dprint("out of memory\n");
247 if(pipe(p1)<0 || pipe(p2)<0){
248 dprint("can't pipe\n");
262 dprint("can't exec %s\n", RXPATH);
266 dprint("can't fork\n");
275 startup(char *machine, int Rflag, char **argv, char **files)
278 connectto(machine, files);
280 bootterm(machine, argv);
282 outTs(Hversion, VERSION);