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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? encoding.xs

?? source of perl for linux application,
?? XS
?? 第 1 頁 / 共 2 頁
字號:
/* * $Id: encoding.xs,v 0.3 2002/04/21 22:14:41 dankogai Exp $ */#define PERL_NO_GET_CONTEXT#include "EXTERN.h"#include "perl.h"#include "XSUB.h"#define U8 U8#define OUR_DEFAULT_FB	"Encode::PERLQQ"#if defined(USE_PERLIO) && !defined(USE_SFIO)/* Define an encoding "layer" in the perliol.h sense.   The layer defined here "inherits" in an object-oriented sense from   the "perlio" layer with its PerlIOBuf_* "methods".  The   implementation is particularly efficient as until Encode settles   down there is no point in tryint to tune it.   The layer works by overloading the "fill" and "flush" methods.   "fill" calls "SUPER::fill" in perl terms, then calls the encode OO   perl API to convert the encoded data to UTF-8 form, then copies it   back to the buffer. The "base class's" read methods then see the   UTF-8 data.   "flush" transforms the UTF-8 data deposited by the "base class's   write method in the buffer back into the encoded form using the   encode OO perl API, then copies data back into the buffer and calls   "SUPER::flush.   Note that "flush" is _also_ called for read mode - we still do the   (back)-translate so that the base class's "flush" sees the   correct number of encoded chars for positioning the seek   pointer. (This double translation is the worst performance issue -   particularly with all-perl encode engine.)*/#include "perliol.h"typedef struct {    PerlIOBuf base;		/* PerlIOBuf stuff */    SV *bufsv;			/* buffer seen by layers above */    SV *dataSV;			/* data we have read from layer below */    SV *enc;			/* the encoding object */    SV *chk;                    /* CHECK in Encode methods */    int flags;			/* Flags currently just needs lines */    int inEncodeCall;		/* trap recursive encode calls */} PerlIOEncode;#define NEEDS_LINES	1SV *PerlIOEncode_getarg(pTHX_ PerlIO * f, CLONE_PARAMS * param, int flags){    PerlIOEncode *e = PerlIOSelf(f, PerlIOEncode);    SV *sv = &PL_sv_undef;    if (e->enc) {	dSP;	/* Not 100% sure stack swap is right thing to do during dup ... */	PUSHSTACKi(PERLSI_MAGIC);	SPAGAIN;	ENTER;	SAVETMPS;	PUSHMARK(sp);	XPUSHs(e->enc);	PUTBACK;	if (call_method("name", G_SCALAR) == 1) {	    SPAGAIN;	    sv = newSVsv(POPs);	    PUTBACK;	}	FREETMPS;	LEAVE;	POPSTACK;    }    return sv;}IVPerlIOEncode_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg, PerlIO_funcs *tab){    PerlIOEncode *e = PerlIOSelf(f, PerlIOEncode);    dSP;    IV  code = PerlIOBuf_pushed(aTHX_ f, mode, Nullsv,tab);    SV *result = Nullsv;    PUSHSTACKi(PERLSI_MAGIC);    SPAGAIN;    ENTER;    SAVETMPS;    PUSHMARK(sp);    XPUSHs(arg);    PUTBACK;    if (call_pv("Encode::find_encoding", G_SCALAR) != 1) {	/* should never happen */	Perl_die(aTHX_ "Encode::find_encoding did not return a value");	return -1;    }    SPAGAIN;    result = POPs;    PUTBACK;    if (!SvROK(result) || !SvOBJECT(SvRV(result))) {	e->enc = Nullsv;	Perl_warner(aTHX_ packWARN(WARN_IO), "Cannot find encoding \"%" SVf "\"",		    arg);	errno = EINVAL;	code = -1;    }    else {       /* $enc->renew */	PUSHMARK(sp);	XPUSHs(result);	PUTBACK;	if (call_method("renew",G_SCALAR|G_EVAL) != 1 || SvTRUE(ERRSV)) {	    Perl_warner(aTHX_ packWARN(WARN_IO), "\"%" SVf "\" does not support renew method",			arg);	}	else {	    SPAGAIN;	    result = POPs;	    PUTBACK;	}	e->enc = newSVsv(result);	PUSHMARK(sp);	XPUSHs(e->enc);	PUTBACK;	if (call_method("needs_lines",G_SCALAR|G_EVAL) != 1 || SvTRUE(ERRSV)) {	    Perl_warner(aTHX_ packWARN(WARN_IO), "\"%" SVf "\" does not support needs_lines",			arg);	}	else {	    SPAGAIN;	    result = POPs;	    PUTBACK;	    if (SvTRUE(result)) {		e->flags |= NEEDS_LINES;	    }	}	PerlIOBase(f)->flags |= PERLIO_F_UTF8;    }    e->chk = newSVsv(get_sv("PerlIO::encoding::fallback", 0));    e->inEncodeCall = 0;    FREETMPS;    LEAVE;    POPSTACK;    return code;}IVPerlIOEncode_popped(pTHX_ PerlIO * f){    PerlIOEncode *e = PerlIOSelf(f, PerlIOEncode);    if (e->enc) {	SvREFCNT_dec(e->enc);	e->enc = Nullsv;    }    if (e->bufsv) {	SvREFCNT_dec(e->bufsv);	e->bufsv = Nullsv;    }    if (e->dataSV) {	SvREFCNT_dec(e->dataSV);	e->dataSV = Nullsv;    }    if (e->chk) {	SvREFCNT_dec(e->chk);	e->chk = Nullsv;    }    return 0;}STDCHAR *PerlIOEncode_get_base(pTHX_ PerlIO * f){    PerlIOEncode *e = PerlIOSelf(f, PerlIOEncode);    if (!e->base.bufsiz)	e->base.bufsiz = 1024;    if (!e->bufsv) {	e->bufsv = newSV(e->base.bufsiz);	sv_setpvn(e->bufsv, "", 0);    }    e->base.buf = (STDCHAR *) SvPVX(e->bufsv);    if (!e->base.ptr)	e->base.ptr = e->base.buf;    if (!e->base.end)	e->base.end = e->base.buf;    if (e->base.ptr < e->base.buf	|| e->base.ptr > e->base.buf + SvLEN(e->bufsv)) {	Perl_warn(aTHX_ " ptr %p(%p)%p", e->base.buf, e->base.ptr,		  e->base.buf + SvLEN(e->bufsv));	abort();    }    if (SvLEN(e->bufsv) < e->base.bufsiz) {	SSize_t poff = e->base.ptr - e->base.buf;	SSize_t eoff = e->base.end - e->base.buf;	e->base.buf = (STDCHAR *) SvGROW(e->bufsv, e->base.bufsiz);	e->base.ptr = e->base.buf + poff;	e->base.end = e->base.buf + eoff;    }    if (e->base.ptr < e->base.buf	|| e->base.ptr > e->base.buf + SvLEN(e->bufsv)) {	Perl_warn(aTHX_ " ptr %p(%p)%p", e->base.buf, e->base.ptr,		  e->base.buf + SvLEN(e->bufsv));	abort();    }    return e->base.buf;}IVPerlIOEncode_fill(pTHX_ PerlIO * f){    PerlIOEncode *e = PerlIOSelf(f, PerlIOEncode);    dSP;    IV code = 0;    PerlIO *n;    SSize_t avail;    if (PerlIO_flush(f) != 0)	return -1;    n  = PerlIONext(f);    if (!PerlIO_fast_gets(n)) {	/* Things get too messy if we don't have a buffer layer	   push a :perlio to do the job */	char mode[8];	n  = PerlIO_push(aTHX_ n, &PerlIO_perlio, PerlIO_modestr(f,mode), Nullsv);	if (!n) {	    Perl_die(aTHX_ "panic: cannot push :perlio for %p",f);	}    }    PUSHSTACKi(PERLSI_MAGIC);    SPAGAIN;    ENTER;    SAVETMPS;  retry:    avail = PerlIO_get_cnt(n);    if (avail <= 0) {	avail = PerlIO_fill(n);	if (avail == 0) {	    avail = PerlIO_get_cnt(n);	}	else {	    if (!PerlIO_error(n) && PerlIO_eof(n))		avail = 0;	}    }    if (avail > 0 || (e->flags & NEEDS_LINES)) {	STDCHAR *ptr = PerlIO_get_ptr(n);	SSize_t use  = (avail >= 0) ? avail : 0;	SV *uni;	char *s = Nullch;	STRLEN len = 0;	e->base.ptr = e->base.end = (STDCHAR *) Nullch;	(void) PerlIOEncode_get_base(aTHX_ f);	if (!e->dataSV)	    e->dataSV = newSV(0);	if (SvTYPE(e->dataSV) < SVt_PV) {	    sv_upgrade(e->dataSV,SVt_PV);	}	if (e->flags & NEEDS_LINES) {	    /* Encoding needs whole lines (e.g. iso-2022-*)	       search back from end of available data for	       and line marker	     */	    STDCHAR *nl = ptr+use-1;	    while (nl >= ptr) {		if (*nl == '\n') {		    break;		}		nl--;	    }	    if (nl >= ptr && *nl == '\n') {		/* found a line - take up to and including that */		use = (nl+1)-ptr;	    }	    else if (avail > 0) {		/* No line, but not EOF - append avail to the pending data */		sv_catpvn(e->dataSV, (char*)ptr, use);		PerlIO_set_ptrcnt(n, ptr+use, 0);		goto retry;	    }	    else if (!SvCUR(e->dataSV)) {		goto end_of_file;	    }	}	if (SvCUR(e->dataSV)) {	    /* something left over from last time - create a normal	       SV with new data appended	     */	    if (use + SvCUR(e->dataSV) > e->base.bufsiz) {		if (e->flags & NEEDS_LINES) {		    /* Have to grow buffer */		    e->base.bufsiz = use + SvCUR(e->dataSV);		    PerlIOEncode_get_base(aTHX_ f);		}		else {	       use = e->base.bufsiz - SvCUR(e->dataSV);	    }	    }	    sv_catpvn(e->dataSV,(char*)ptr,use);	}	else {	    /* Create a "dummy" SV to represent the available data from layer below */	    if (SvLEN(e->dataSV) && SvPVX_const(e->dataSV)) {		Safefree(SvPVX_mutable(e->dataSV));	    }	    if (use > (SSize_t)e->base.bufsiz) {		if (e->flags & NEEDS_LINES) {		    /* Have to grow buffer */		    e->base.bufsiz = use;		    PerlIOEncode_get_base(aTHX_ f);		}		else {	       use = e->base.bufsiz;	    }	    }	    SvPV_set(e->dataSV, (char *) ptr);	    SvLEN_set(e->dataSV, 0);  /* Hands off sv.c - it isn't yours */	    SvCUR_set(e->dataSV,use);	    SvPOK_only(e->dataSV);	}	SvUTF8_off(e->dataSV);	PUSHMARK(sp);	XPUSHs(e->enc);	XPUSHs(e->dataSV);	XPUSHs(e->chk);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品99国产国产精| 欧美日韩成人一区二区| 热久久一区二区| 亚洲综合一区二区三区| 亚洲视频网在线直播| 国产日韩精品视频一区| 中文成人av在线| 久久久久久黄色| 欧美刺激脚交jootjob| 日韩精品一区二区三区在线观看| 欧美日韩一区成人| 91麻豆精品国产91久久久使用方法 | 极品尤物av久久免费看| 久久99热狠狠色一区二区| 日韩精品每日更新| 天堂资源在线中文精品| 五月综合激情婷婷六月色窝| 日韩精品电影在线| 韩日av一区二区| 国产伦精一区二区三区| www.日韩精品| 制服丝袜中文字幕一区| 久久久亚洲欧洲日产国码αv| 亚洲国产高清在线观看视频| 久久久久久久久久久久久久久99| 综合自拍亚洲综合图不卡区| 一二三四社区欧美黄| 日韩精品午夜视频| 成人黄色av网站在线| 欧美私模裸体表演在线观看| 91精品国产综合久久精品| 精品欧美久久久| 亚洲精品亚洲人成人网| 亚洲一区免费视频| 激情欧美一区二区| 波多野结衣亚洲| 欧美精品 日韩| 国产日韩欧美不卡在线| 亚洲国产乱码最新视频| 国产酒店精品激情| 丁香婷婷综合激情五月色| 在线观看91精品国产入口| 欧美mv日韩mv亚洲| 亚洲精品福利视频网站| 国产一区高清在线| 欧美私模裸体表演在线观看| 久久免费国产精品| 亚洲成人手机在线| 国产精品一级在线| 69p69国产精品| 久久久精品国产免费观看同学| 国产精品久久久久久户外露出| 日韩av中文在线观看| 在线亚洲免费视频| 日韩一级黄色片| 亚洲午夜电影在线| 成人综合在线视频| 精品国产乱码久久久久久闺蜜| 亚洲欧美偷拍三级| 粉嫩av一区二区三区在线播放 | 欧美日韩一级视频| 国产精品理伦片| 免费观看日韩av| 欧美日本韩国一区二区三区视频| 中文乱码免费一区二区| 国产一区二区在线视频| 欧美日韩一卡二卡三卡| 亚洲在线视频一区| 91美女在线视频| 中文字幕永久在线不卡| 99久久婷婷国产综合精品电影| 精品国产99国产精品| 蜜桃一区二区三区在线| 欧美剧在线免费观看网站 | 免费成人小视频| 欧美精品一卡两卡| 亚洲一区二区三区四区在线免费观看 | 久久国产乱子精品免费女| 欧美怡红院视频| 午夜电影网一区| 欧美亚洲综合网| 亚洲地区一二三色| 欧美色偷偷大香| 婷婷开心久久网| 欧美中文字幕一区二区三区亚洲| 亚洲婷婷综合色高清在线| 成人精品小蝌蚪| 亚洲天堂久久久久久久| 91原创在线视频| 亚洲欧美另类在线| 99精品欧美一区二区蜜桃免费 | 精品亚洲欧美一区| 亚洲综合偷拍欧美一区色| 99在线精品观看| 精品91自产拍在线观看一区| 不卡一区中文字幕| 亚洲精品写真福利| 欧美va在线播放| 成人app在线| 日韩国产一二三区| 日韩丝袜美女视频| 成人av影视在线观看| 在线91免费看| 亚洲国产精品一区二区www| yourporn久久国产精品| 91精品国产综合久久精品| 国产精品网站导航| 国产成人免费视频一区| 国产日韩欧美精品综合| 国产麻豆精品一区二区| 91视频观看免费| 亚洲图片自拍偷拍| 国产精品久久久久影院色老大| 久久国产欧美日韩精品| 欧美视频一区二区三区| 国产精品自拍网站| 亚洲一区在线电影| 色综合色狠狠天天综合色| 久久久99精品久久| 亚洲人成网站色在线观看 | 日本福利一区二区| 日韩一区二区三区电影在线观看| 亚洲国产一区在线观看| 日本欧美一区二区三区| 强制捆绑调教一区二区| 国产日韩欧美一区二区三区乱码 | 51精品视频一区二区三区| 69堂精品视频| 国产精品资源站在线| 亚洲综合激情小说| 国产精品视频在线看| 在线观看91视频| 久草热8精品视频在线观看| 一区二区三区欧美久久| 欧美精品一区二区三| 欧美精品自拍偷拍| 日本不卡一区二区三区高清视频| 欧美三级在线播放| 亚洲精品视频在线| 欧美日韩大陆一区二区| 亚洲午夜精品一区二区三区他趣| 欧美色视频一区| 日韩精品一级中文字幕精品视频免费观看| 久久se精品一区精品二区| 国产色91在线| 5858s免费视频成人| 久久蜜桃av一区精品变态类天堂| 国产精品女上位| 欧美区一区二区三区| 一区二区三区加勒比av| 懂色av一区二区夜夜嗨| 久久久久久电影| 日本美女视频一区二区| 91电影在线观看| 日本中文字幕不卡| 一区视频在线播放| 精品国产一区二区三区不卡 | 欧美一级国产精品| thepron国产精品| 韩国女主播一区二区三区| 国产伦精一区二区三区| 成人激情免费网站| av不卡免费在线观看| 老司机精品视频在线| 在线精品视频一区二区| 另类中文字幕网| 成人性生交大片免费看在线播放 | 另类欧美日韩国产在线| 中文字幕+乱码+中文字幕一区| 在线观看一区二区精品视频| 成人黄色av电影| 久久精品国产澳门| 日韩精品资源二区在线| 日韩一卡二卡三卡国产欧美| 粉嫩aⅴ一区二区三区四区五区| 国产精品色噜噜| 久久影视一区二区| 99这里只有精品| 久久精品国产网站| 欧美群妇大交群的观看方式| 在线影视一区二区三区| a在线欧美一区| 国产激情视频一区二区三区欧美| 日韩电影网1区2区| 国产欧美一区二区精品性| 中文字幕在线不卡视频| 欧美激情一区二区三区在线| 欧美一区二区三区免费大片 | 国产黄色91视频| 久久精品99久久久| 久久国产精品一区二区| 久色婷婷小香蕉久久| 99久久久久免费精品国产| 国产在线日韩欧美| 国产专区综合网| 国产精品一卡二卡在线观看| 国产一区二三区好的| 麻豆91在线观看| 男女视频一区二区| 免费成人在线视频观看|