亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mx2.c

?? unix v7是最后一個廣泛發布的研究型UNIX版本
?? C
字號:
#include "../h/param.h"#include "../h/systm.h"#include "../h/dir.h"#include "../h/user.h"#include "../h/proc.h"#include "../h/tty.h"#include "../h/inode.h"#define	KERNEL	1#include "../h/mx.h"#include "../h/file.h"#include "../h/conf.h"#include "../h/buf.h"/* * multiplexor driver */struct	chan	chans[NCHANS];struct	group	*groups[NGROUPS];int	mpxline;struct chan *xcp();struct chan *addch();struct chan *nextcp();#define	MIN(a,b)	((a<b)?a:b)short	cmask[16]	={	01,	02,	04,	010,	020,	040,	0100,	0200,	0400,	01000,	02000,	04000,	010000,	020000,	040000, 0100000};#define	HIQ	100#define	LOQ	20#define	FP	((struct file *)cp)char mcdebugs[NDEBUGS];/* * Timing cell */int	mxdummy;int	*MP	= &mxdummy;struct group *getmpx(dev)dev_t dev;{register d;	d = minor(dev);	if (d >= NGROUPS) 		return(NULL);	return(groups[d]);}mxopen(dev, flag){register struct group *gp;register struct file *fp;register struct chan *cp;int	msg;	gp = getmpx(dev);	if (gp == NULL) {	bad:		u.u_error = ENXIO;		return;	}	if (gp->g_state == COPEN) {		gp->g_state = INUSE+ISGRP;		return;	}	if (!(gp->g_state&INUSE)) 		goto bad;	fp = u.u_ofile[u.u_r.r_val1];	if (fp->f_inode != gp->g_inode) 		goto bad;	if ((cp=addch(gp->g_inode, 0))==NULL)		goto bad;	cp->c_flags = XGRP;	cp->c_ottyp = cp->c_ttyp = (struct tty *)cp;	cp->c_line = cp->c_oline = mpxline;	fp->f_flag |= FMPY;	fp->f_flag |= FREAD+FWRITE;	fp->f_un.f_chan = cp;	if (gp->g_inode == mpxip) {		plock(mpxip);		mpxname(cp);		msg = M_OPEN;	} else		msg = M_WATCH;	scontrol(cp, msg, u.u_uid);	sleep((caddr_t)cp,TTIPRI);	if (cp->c_flags&NMBUF)		prele(mpxip);	if (cp->c_flags & WCLOSE) {		chdrain(cp);		chfree(cp);		goto bad;	}	cp->c_fy = fp;	cp->c_pgrp = u.u_procp->p_pgrp;}char	mxnmbuf[NMSIZE];int	nmsize;struct	chan *mxnmcp;mpxname(cp)register struct chan *cp;{register char *np;register c;	np = mxnmbuf;	u.u_dirp = (caddr_t)u.u_arg[0];		while (np < &mxnmbuf[NMSIZE]) {		c = uchar();		if (c <= 0)			break;		*np++ = c;	}	*np++ = '\0';	nmsize = np - mxnmbuf;	cp->c_flags |= NMBUF;}mxclose(dev, flag, cp)dev_t	dev;register struct chan *cp;{register struct group *gp;register struct inode *ip;register struct file *fp;int	i, fmp;	fmp = flag&FMP;	/*	 * close a channel	 */	if (cp!=NULL && fmp && fmp!=FMP) {		for(fp=file; fp < &file[NFILE]; fp++) 		    if(fp->f_count && fp->f_flag&FMP && fp->f_un.f_chan==cp){				return;			}		chdrain(cp);		if ((cp->c_flags&WCLOSE)==0) {			scontrol(cp, M_CLOSE, 0);			cp->c_flags |= WCLOSE;		} else {			chfree(cp);		}		return;	}	if ((gp = getmpx(dev)) == NULL)		return;	ip = gp->g_inode;	if (ip==NULL || (ip->i_mode&IFMT)!=IFMPC) {		return;	}	for(fp=file; fp < &file[NFILE]; fp++) {		if (fp->f_count && (fp->f_flag&FMP)==FMP && fp->f_inode==ip) {			return;		}	}	if (ip == mpxip) {		mpxip = NULL;		prele(ip);	}	for(i=0;i<NINDEX;i++)		if ((cp=gp->g_chans[i])!=NULL)			detach(cp);	groups[minor(dev)] = NULL;	plock(ip);	i = ip->i_mode;	i &= ~IFMT;	i |= IFCHR;	ip->i_mode = i;	zero((caddr_t)gp, sizeof (struct group));	ip->i_flag |= IUPD|ICHG;	iput(ip);}zero(s, cc)register char *s;register cc;{	while (cc--)		*s++ = 0;}char	m_eot[] ={ M_EOT, 0, 0, 0};/* * Mxread + mxwrite are entered from cdevsw * for all read/write calls.  Operations on * an mpx file are handled here. * Calls are made through linesw to handle actual * data movement. */mxread(dev){register struct group *gp;register struct chan *cp;register esc;struct rh h;caddr_t	base;unsigned count;int	s, xfr, more, fmp;	if ((gp=getmpx(dev))==NULL) {bad:		u.u_error = ENXIO;		return;	}	FP = getf(u.u_arg[0]);	fmp = FP->f_flag & FMP;	if (fmp != FMP) {		msread(fmp, FP->f_un.f_chan);		return;	}	if ((int)u.u_base & 1)		goto bad;	s = spl6();	while (gp->g_datq == 0) {		sleep((caddr_t)&gp->g_datq, TTIPRI);	}	while (gp->g_datq && u.u_count >= CNTLSIZ + 2) {		splx(s);		esc = 0;		cp = nextcp(gp);		if (cp==NULL) {			continue;		}		h.index = cpx(cp);		if (count = cp->c_ctlx.c_cc) {			count += CNTLSIZ;			if (cp->c_flags&NMBUF)				count += nmsize;			if (count > u.u_count) {				sdata(cp);				return;			}			esc++;		}		base = u.u_base;		count = u.u_count;		u.u_base += sizeof h;		u.u_count -= sizeof h;		xfr = u.u_count;		if (esc && cp->c_flags&PORT) {			more = mcread(cp);		} else {			more = (*linesw[cp->c_line].l_read)(cp->c_ttyp);		}		if (more > 0)			sdata(cp);		if (more < 0)			scontrol(cp, M_CLOSE, 0);		if (xfr == u.u_count) {			esc++;			iomove((caddr_t)m_eot, sizeof m_eot, B_READ);		}		xfr -= u.u_count;		if (esc) {			h.count = 0;			h.ccount = xfr;		} else {			h.count = xfr;			h.ccount = 0;			mxrstrt(cp, &cp->cx.datq, BLOCK|ALT);		}		if (u.u_count && (xfr&1)) {			u.u_base++;			u.u_count--;		}		copyout((caddr_t)&h, base, sizeof h);		s = spl6();	}}mxwrite(dev){register struct chan *cp;struct	wh h;struct group *gp;int	ucount, esc, fmp, burpcount;caddr_t	ubase, hbase;	if ((gp=getmpx(dev))==NULL) {		u.u_error = ENXIO;		return;	}	FP = getf(u.u_arg[0]);	fmp = FP->f_flag & FMP;	if (fmp != FMP) {		mswrite(fmp, FP->f_un.f_chan);		return;	}	burpcount = 0;	while (u.u_count >= sizeof h) {		hbase = u.u_base;		iomove((caddr_t)&h, sizeof h, B_WRITE);		if (u.u_error)			return;		esc = 0;		if (h.count==0) {			esc++;			h.count = h.ccount;		}		cp = xcp(gp, h.index);		if (cp==NULL)  {			continue;		}		ucount = u.u_count;		ubase = u.u_base;		u.u_count = h.count;		u.u_base = h.data;		if (esc==0) {			struct tty *tp;			caddr_t waddr;			int line;			if (cp->c_flags&PORT) {				line = cp->c_line;				tp = cp->c_ttyp;			} else {				line = cp->c_oline;				tp = cp->c_ottyp;			}		loop:			waddr = (caddr_t)(*linesw[line].l_write)(tp);			if (u.u_count) {				if (gp->g_state&ENAMSG) {					burpcount++;					cp->c_flags |= BLKMSG;/*					scontrol(cp, M_BLK, u.u_count);*/					h.ccount = -1;					h.count = u.u_count;					h.data = u.u_base;					copyout((caddr_t)&h, hbase, sizeof h);				} else {					if (waddr==0) {						u.u_error = ENXIO;						return;					}					sleep(waddr, TTOPRI);					goto loop;				}			}		} else			mxwcontrol(cp); 		u.u_count = ucount;		u.u_base = ubase;	}	u.u_count = burpcount;}/* * Mcread and mcwrite move data on an mpx file. * Transfer addr and length is controlled by mxread/mxwrite. * Kernel-to-Kernel and other special transfers are not * yet in. */mcread(cp)register struct chan *cp;{register struct clist *q;register char *np;int cc;	q = (cp->c_ctlx.c_cc) ? &cp->c_ctlx : &cp->cx.datq;	cc = mxmove(q, B_READ);	if (cp->c_flags&NMBUF && q == &cp->c_ctlx) {		np = mxnmbuf;		while (nmsize--)			passc(*np++);		cp->c_flags &= ~NMBUF;		prele(mpxip);	}	if (cp->c_flags&PORT)		return(cp->c_ctlx.c_cc + cp->c_ttyp->t_rawq.c_cc); else		return(cp->c_ctlx.c_cc + cp->cx.datq.c_cc);}char *mcwrite(cp)register struct chan *cp;{register struct clist *q;register cc;int	s;	q = &cp->cy.datq;	while (u.u_count) {		s = spl6();		if (q->c_cc > HIQ || (cp->c_flags&EOTMARK)) {			cp->c_flags |= SIGBLK;			splx(s);			break;		}		splx(s);		cc = mxmove(q, B_WRITE);	}	wakeup((caddr_t)q);	return((caddr_t)q);}/* * Msread and mswrite move bytes * between user and non-multiplexed channel. */msread(fmp, cp)register struct chan *cp;{register struct clist *q;int s;	q = (fmp&FMPX) ? &cp->cx.datq : &cp->cy.datq;	s = spl6();	while (q->c_cc == 0) {		if (cp->c_flags & EOTMARK) {			cp->c_flags &= ~EOTMARK;			if (cp->c_flags&ENAMSG)				scontrol(cp, M_UBLK, 0);			else {				wakeup((caddr_t)cp);				wakeup((caddr_t)q);			}			goto out;		}		if (cp->c_flags&WCLOSE) {			u.u_error = ENXIO;			goto out;		}		sleep((caddr_t)q,TTIPRI);	}	splx(s);	while (mxmove(q, B_READ) > 0)		;	mxrstrt(cp, q, SIGBLK);	return;out:	splx(s);}mswrite(fmp, cp)register struct chan *cp;{register struct clist *q;register int cc;	q = (fmp&FMPX) ? &cp->cy.datq : &cp->cx.datq;	while (u.u_count) {		spl6();		if (cp->c_flags&WCLOSE) {		bad:			signal(SIGPIPE, cp->c_pgrp);			return;		}		while (q->c_cc>100) {			if (cp->c_flags&WCLOSE)				goto bad;			sdata(cp);			cp->c_flags |= BLOCK;			sleep((caddr_t)q+1,TTOPRI);		}		spl0();		cc = mxmove(q, B_WRITE);		if (cc < 0)			break;	}	if (fmp&FMPX) {		if (cp->c_flags&YGRP) 			sdata(cp); else			wakeup((caddr_t)q);	} else {		if (cp->c_flags&XGRP) 			sdata(cp); else			wakeup((caddr_t)q);	}}/* * move chars between clist and user space. */mxmove(q, dir)register struct clist *q;register dir;{register cc;char buf[HIQ];	cc = MIN(u.u_count, sizeof buf);	if (dir == B_READ) 		cc = q_to_b(q, buf, cc);	if (cc <= 0)		return(cc);	iomove((caddr_t)buf, cc, dir);	if (dir == B_WRITE)		cc = b_to_q(buf, cc, q);	return(cc);}mxrstrt(cp, q, b)register struct chan *cp;register struct clist *q;register b;{int s;	s = spl6();	if (cp->c_flags&b && q->c_cc<LOQ) {		cp->c_flags &= ~b;		if (b&ALT)			wakeup((caddr_t)q+1); else			mcstart(cp, (caddr_t)q);	}	if (cp->c_flags&WFLUSH)		wakeup((caddr_t)q+2);	splx(s);}/* * called from driver start or xint routines * to wakeup output sleeper. */mcstart(cp, q)register struct chan *cp;register caddr_t q;{	if (cp->c_flags&(BLKMSG)) {		cp->c_flags &= ~BLKMSG;		scontrol(cp, M_UBLK, 0);	} else		wakeup((caddr_t)q);}mxwcontrol(cp)register struct chan *cp;{short	cmd[2];int	s;	iomove((caddr_t)cmd, sizeof cmd, B_WRITE);	switch(cmd[0]) {	/*	 * not ready to queue this up yet.	 */	case M_EOT:		s = spl6();		while (cp->c_flags & EOTMARK)			if (cp->c_flags&ENAMSG) {				scontrol(cp, M_BLK, 0);				goto out;			} else				sleep((caddr_t)cp, TTOPRI);		cp->c_flags |= EOTMARK;	out:		splx(s);		break;	case M_IOCTL:printf("M_IOCTL");		break;	default:		u.u_error = ENXIO;	}}mxioctl(dev, cmd, addr, flag)caddr_t addr;{struct group *gp;int fmp;struct file *fp;	if ((gp = getmpx(dev)) == NULL) {bad:		u.u_error = ENXIO;		return;	}	fp = getf(u.u_arg[0]);	if (fp==NULL)		goto bad;	fmp = fp->f_flag & FMP;	if (fmp == FMP) {		switch(cmd) {		case MXLSTN:			if (mpxip == NULL) {				mpxip = gp->g_inode;			} else				goto bad;			break;		case MXNBLK:			gp->g_state |= ENAMSG;			break;		default:			goto bad;		}	}}chdrain(cp)register struct chan *cp;{register struct tty *tp;int wflag;	chwake(cp);	wflag = (cp->c_flags&WCLOSE)==0;	tp = cp->c_ttyp;	if (tp == NULL)		/* prob not required */		return;	if (cp->c_flags&PORT && tp->t_chan == cp) {		cp->c_ttyp = NULL;		tp->t_chan = NULL;		return;	}	if (wflag) 		wflush(cp,&cp->cx.datq); else		flush(&cp->cx.datq);	if (!(cp->c_flags&YGRP)) {		flush(&cp->cy.datq);	}}chwake(cp)register struct chan *cp;{register char *p;	wakeup((caddr_t)cp);	flush(&cp->c_ctlx);	p = (char *)&cp->cx.datq;	wakeup((caddr_t)p); wakeup((caddr_t)++p); wakeup((caddr_t)++p);	p = (char *)&cp->cy.datq;	wakeup((caddr_t)p); wakeup((caddr_t)++p); wakeup((caddr_t)++p);}chfree(cp)register struct chan *cp;{register struct group *gp;register i;	gp = cp->c_group;	if (gp==NULL)		return;	i = cp->c_index;	if (cp == gp->g_chans[i]) {		gp->g_chans[i] = NULL;	}	cp->c_group = NULL;}flush(q)register struct clist *q;{	while(q->c_cc)		getc(q);}wflush(cp,q)register struct chan *cp;register struct clist *q;{register s;	s = spl6();	while(q->c_cc) {		if (cp->c_flags & WCLOSE) {			flush(q);			goto out;		}		cp->c_flags |= WFLUSH;		sdata(cp);		sleep((caddr_t)q+2,TTOPRI);	}out:	cp->c_flags &= ~WFLUSH;	splx(s);}scontrol(cp,event,value)register struct chan *cp;short event,value;{register struct clist *q;int s;	q = &cp->c_ctlx;	s = spl6();	if (sdata(cp) == NULL)		return;	putw(event,q);	putw(value,q);	splx(s);}sdata(cp)register struct chan *cp;{register struct group *gp;register short x;register struct group *lgp;int s;	gp = cp->c_group;	if (gp==NULL) {		return(0);	}	x = cp->c_index;	s = spl6();	while (gp) {		if ((gp->g_state&ISGRP)==0) {			return(0);		}		gp->g_datq |= cmask[x];		x = gp->g_index;		lgp = gp;		gp = gp->g_group;	}	gp =  lgp;	splx(s);	wakeup((caddr_t)&gp->g_datq);	return((int)gp);}struct chan *xcp(gp, x)register struct group *gp;register short x;{register i;	i = 0;	while (i<NLEVELS && gp->g_state&ISGRP) {		gp = (struct group *)gp->g_chans[x&017];		x >>= 4;		if ((x&017) >= NINDEX)			break;		i++;	}	return((struct chan *)gp);}cpx(cp)register struct chan *cp;{register x;register struct group *gp;	if (cp==NULL)		return(-1);	x = (-1<<4) + cp->c_index;	gp = cp->c_group;	if (gp==NULL || (gp->g_state&ISGRP)==0)		return(-1);	gp = gp->g_group;	while (gp && gp->g_state&ISGRP) {		x <<= 4;		x |= gp->g_index;		gp = gp->g_group;	}	return(x);}struct chan *nextcp(gp)register struct group *gp;{	if (gp->g_datq == 0) {		gp = NULL;		goto out;	}	while (gp != NULL && gp->g_state&ISGRP) {		while ( (gp->g_datq & gp->g_rotmask) == 0) {			gp->g_rot++;			gp->g_rot &= 017;			if (gp->g_rot)				gp->g_rotmask <<= 1; else				gp->g_rotmask = 1;		}		gp = (struct group *)gp->g_chans[gp->g_rot];	}	if (gp)		rmdata(gp);out:	return((struct chan *)gp);}rmdata(cp)register struct chan *cp;{register struct group *gp;register short x;	gp = cp->c_group;	x = cp->c_index;	while (gp) {		gp->g_datq &= ~cmask[x];		if (gp->g_datq)			return;		x = gp->g_index;		gp = gp->g_group;	}}mcrint(c, tp)struct tty *tp;{}mcxint(tp)struct tty *tp;{}/*prstuff(s,cc)register char *s;register cc;{	while (cc--)		printf("%o ",*s++&0377);}prascii(s, cc)register char *s;register cc;{register c;	while (cc--) {		c = *s++;		if (c>=040 && c<=0176)			putchar(c); else			printf(" %o ", c&0377);	}}*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产电影| 精品美女一区二区| 国产1区2区3区精品美女| 亚洲情趣在线观看| 久久久久国产成人精品亚洲午夜 | 无吗不卡中文字幕| 国产清纯白嫩初高生在线观看91 | 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 成人精品视频一区| 免费不卡在线视频| 亚洲国产视频网站| 国产精品嫩草影院com| 欧美精品日韩综合在线| 99国产一区二区三精品乱码| 麻豆国产精品一区二区三区| 一区二区高清在线| 国产精品家庭影院| 久久婷婷国产综合国色天香| 欧美精品乱码久久久久久| 成a人片亚洲日本久久| 国产在线播放一区三区四| 亚洲韩国精品一区| 亚洲女爱视频在线| 国产亚洲欧洲997久久综合| 欧美一区二区三区不卡| 欧美日韩激情一区| 日本二三区不卡| 色综合色狠狠综合色| 不卡影院免费观看| 国产成人亚洲综合a∨婷婷| 免费看日韩精品| 视频在线观看91| 日韩一区欧美二区| 日韩和欧美一区二区| 午夜精品视频在线观看| 亚洲成人7777| 青椒成人免费视频| 美女精品一区二区| 久久99精品国产91久久来源| 免费人成黄页网站在线一区二区| 男女性色大片免费观看一区二区 | 狠狠色丁香久久婷婷综合丁香| 日韩国产一二三区| 免费在线看成人av| 韩国精品主播一区二区在线观看| 狠狠色丁香九九婷婷综合五月| 蜜桃视频在线观看一区| 精品一区二区日韩| 国产成a人亚洲精品| 99在线精品免费| 日本高清不卡视频| 欧美日韩一区小说| 欧美精品aⅴ在线视频| 欧美一区二区三级| 久久久久国产一区二区三区四区 | 色婷婷久久综合| 色婷婷久久99综合精品jk白丝| 91久久线看在观草草青青| 在线观看国产日韩| 日韩一区二区三区三四区视频在线观看| 在线综合视频播放| 亚洲精品一区二区三区在线观看 | 亚洲欧美怡红院| 五月婷婷综合激情| 不卡在线视频中文字幕| 91蝌蚪porny| 欧美日韩亚洲高清一区二区| 日韩一级二级三级精品视频| 精品99999| 亚洲精品一卡二卡| 日欧美一区二区| 国产精品99久久久久久久女警| www.99精品| 在线播放欧美女士性生活| 欧美r级在线观看| 国产精品乱人伦中文| 一区二区久久久| 国精产品一区一区三区mba桃花| 成人高清伦理免费影院在线观看| 欧美视频一区二区三区在线观看| 精品福利一二区| 亚洲一级二级在线| 国产精品1区2区| 欧美日韩国产首页在线观看| www久久精品| 亚洲一区精品在线| 国产精品1024久久| 欧美喷潮久久久xxxxx| 久久免费国产精品| 亚洲自拍另类综合| 国产一二精品视频| 欧美日韩国产综合一区二区| 久久精品男人的天堂| 亚洲成人免费视| a在线播放不卡| 精品99一区二区| 午夜精品久久久久久久99水蜜桃| 国产成人在线视频免费播放| 91精品国产日韩91久久久久久| 国产精品乱码人人做人人爱| 免费成人在线视频观看| 91久久精品国产91性色tv| 久久久精品国产免大香伊| 婷婷开心久久网| 在线欧美一区二区| 国产精品久久免费看| 老司机免费视频一区二区 | 91免费视频网址| 精品国产1区二区| 日韩国产欧美视频| 欧美日韩午夜在线视频| 一区免费观看视频| 国产69精品久久久久777| 日韩亚洲欧美综合| 日韩和的一区二区| 欧美日韩亚洲不卡| 亚洲主播在线播放| 色综合亚洲欧洲| 欧美国产综合色视频| 精品一区二区三区免费视频| 欧美高清视频不卡网| 亚洲国产三级在线| 日本高清无吗v一区| ...xxx性欧美| 91香蕉视频黄| 亚洲欧美精品午睡沙发| 99精品黄色片免费大全| 国产精品丝袜一区| 成人动漫精品一区二区| 国产欧美日韩综合精品一区二区| 国产毛片精品国产一区二区三区| 久久综合九色综合97_久久久| 日韩有码一区二区三区| 91精品国产综合久久福利软件 | 日本欧美肥老太交大片| 欧美欧美午夜aⅴ在线观看| 亚洲国产精品视频| 欧美撒尿777hd撒尿| 亚洲国产aⅴ天堂久久| 在线中文字幕不卡| 亚洲第一激情av| 日韩网站在线看片你懂的| 久久99精品久久久久久久久久久久| 日韩视频一区二区三区 | 蜜臀久久久久久久| 欧美不卡一区二区| 国产精品1024| 专区另类欧美日韩| 91福利资源站| 日本一道高清亚洲日美韩| 6080午夜不卡| 精品中文字幕一区二区| 久久人人爽人人爽| 不卡的av网站| 一片黄亚洲嫩模| 日韩欧美综合一区| 国产成人高清视频| 美女尤物国产一区| 亚洲国产精品黑人久久久| 91蜜桃在线免费视频| 亚洲综合丝袜美腿| 欧美xxxx老人做受| 国产成a人亚洲| 亚洲黄网站在线观看| 欧美日韩国产大片| 国产一区二区91| 亚洲精品国产精品乱码不99| 欧美午夜精品久久久久久超碰 | 在线视频观看一区| 日韩av一级片| 国产精品久久99| 欧美精品高清视频| 国产99久久精品| 亚洲va天堂va国产va久| 精品国产一区二区三区久久久蜜月 | 久久综合色天天久久综合图片| 成人一区二区三区中文字幕| 亚洲成人精品在线观看| 久久久久久久网| 欧美三级中文字幕在线观看| 韩国欧美一区二区| 亚洲夂夂婷婷色拍ww47| 欧美变态口味重另类| 一本高清dvd不卡在线观看| 久久福利视频一区二区| 亚洲日韩欧美一区二区在线| 日韩欧美一区在线| 一本久道中文字幕精品亚洲嫩| 另类小说综合欧美亚洲| 亚洲视频免费观看| 日韩一区二区在线看| 91视频国产观看| 黄一区二区三区| 天堂蜜桃一区二区三区| 亚洲同性同志一二三专区| 久久亚洲春色中文字幕久久久| 在线欧美小视频| 99v久久综合狠狠综合久久| 激情亚洲综合在线| 午夜电影久久久|