static int vn_readwrite_io(struct vn_softc * vn, struct buf * bp, vfs_context_t ctx) { int error = 0; char * iov_base; caddr_t vaddr; if (buf_map(bp, &vaddr)) panic("vn device: buf_map failed"); iov_base = (char *)vaddr; if (vn->sc_shadow_vp == NULL) { user_ssize_t temp_resid; error = file_io(vn->sc_vp, ctx, buf_flags(bp) & B_READ ? UIO_READ : UIO_WRITE, iov_base, (off_t)buf_blkno(bp) * vn->sc_secsize, buf_resid(bp), &temp_resid); buf_setresid(bp, temp_resid); } else { if (buf_flags(bp) & B_READ) error = shadow_read(vn, bp, iov_base, ctx); else error = shadow_write(vn, bp, iov_base, ctx); } buf_unmap(bp); return (error); }
static int load(char *s) { int i,k; long kk; long k1,k2; char *p; int alku; int shad_permit=1; char x[LLENGTH]; char aika[26]; int lev=0; if (*s==EOS) return(1); disp_frame=0; p=strchr(s,','); if (p==NULL) { k1=atol(s); if (k1<1L) k1=1L; k2=jmax; } else { *p=EOS; k1=atol(s); if (k1<1L) k1=1L; k2=atol(p+1); if (k2<k1) k2=jmax; if (strchr(p+1,'*')!=NULL) disp_frame=1; } if (edit) alku=0; else alku=1; if (disp_frame) { pvmaika(aika); k=sprintf(line,"* - - SURVO MM "); k+=sprintf(line+k,"%s %20.20s%7d%5d 0",aika,edisk,ted2,ted1-1); edwrite(line,jj,0); if (zs[jj]==0) { i=shadow_create(jj); if (i<0) return(-1); } for (i=0; i<k; ++i) line[i]=' '; line[k]=EOS; line[1]='{'; line[k-1]='}'; lev=k; edwrite(line,zs[jj],0); ++jj; } for (kk=k1; kk<=k2; ++kk) { if (jj>r2) { ei_tilaa(); break; } edread(line,jj); if (!empty_s(line+1)) { /* ei_tilaa(); */ i=lis_rivit(jj,k2-kk+1L+(long)disp_frame); /* 29.6.90 */ if (i<0) break; } i=etsi(kk); if (i<0) { muste_fclose(text); return(-1); } i=lue_rivi(line); if (feof(text) && !*line) { jmax=kk-1; break; } if (i<0) return(-1); if (!disp_frame) edwrite(line,jj,alku); else { sprintf(x,"*%4ld %s",kk,line); /* k -> kk 24.5.93 */ edwrite(x,jj,0); } j=kk+1; if (edit!=3) talleta_alku((long)j,muste_ftell(text)); if ((edit==1 || (edit==3 && !empty32)) && shad_permit) shad_permit=shadow_write((int)kk,jj,disp_frame); /* showsh */ ++jj; } if (!shad_permit) return(-1); if (disp_frame) { strncpy(line,space,lev); line[lev]=EOS; line[0]='*'; edwrite(line,jj,0); if (zs[jj]==0) { i=shadow_create(jj); if (i<0) return(-1); } for (i=0; i<lev; ++i) line[i]=' '; line[lev]=EOS; line[lev-1]='}'; edwrite(line,zs[jj],0); } return(1); }