Esempio n. 1
0
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);
}
Esempio n. 2
0
File: show.c Progetto: rforge/muste
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);
}