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);
48 genc = Strtoc(&genstr);
49 if((io=create(genc, 1, 0666L)) < 0)
50 error_r(Ecreate, genc);
52 if(statfd(io, 0, 0, 0, &length, &appendonly) > 0 && appendonly && length>0)
55 if(f->name.s[0]==0 || samename){
56 if(addr.r.p1==0 && addr.r.p2==f->nc)
58 state(f, f->cleanseq==f->seq? Clean : Dirty);
61 dprint("(new file) ");
62 if(addr.r.p2>0 && filereadc(f, addr.r.p2-1)!='\n')
65 if(f->name.s[0]==0 || samename){
66 if(statfile(name, &dev, &qid, &mtime, 0, 0) > 0){
76 readio(File *f, int *nulls, int setdate, int toterm)
85 char buf[BLOCKSIZE+1], *s;
90 nt = bufload(f, 0, io, nulls);
94 for(nt = 0; (n = read(io, buf+b, BLOCKSIZE-b))>0; nt+=(r-genbuf)){
100 if((*r = *(uchar*)s) < Runeself){
110 w = chartorune(r, s);
123 loginsert(f, p, genbuf, r-genbuf);
130 if(statfd(io, &dev, &qid, &mtime, 0, 0) > 0){
147 while(p < addr.r.p2){
148 if(addr.r.p2-p>BLOCKSIZE)
152 bufread(f, p, genbuf, n);
153 c = Strtoc(tmprstr(genbuf, n));
155 if(Write(io, c, m) != m){
172 dprint("#%lud\n", p);
179 bootterm(char *machine, char **argv)
181 int ph2t[2], pt2h[2];
190 fprint(2, "can't exec: ");
194 if(pipe(ph2t)==-1 || pipe(pt2h)==-1)
206 fprint(2, "can't exec: ");
210 panic("can't fork samterm");
221 connectto(char *machine, char **argv)
228 for(av = argv; *av; av++)
230 av = malloc(sizeof(char*)*((av-argv) + 5));
232 dprint("out of memory\n");
243 if(pipe(p1)<0 || pipe(p2)<0){
244 dprint("can't pipe\n");
258 dprint("can't exec %s\n", RXPATH);
262 dprint("can't fork\n");
271 startup(char *machine, int Rflag, char **argv, char **files)
274 connectto(machine, files);
276 bootterm(machine, argv);
278 outTs(Hversion, VERSION);