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

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

?? htfsave.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
字號:
/***	VARIOUS FILE WRITER STREAMS****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTFSave.c,v 2.4 1999/05/22 18:23:32 frystyk Exp $****	This version of the stream object just writes to a C file.**	The file is assumed open and left open.****	Bugs:**		strings written must be less than buffer size.****      History:**         HFN: wrote it**         HWL: converted the caching scheme to be hierachical by taking**              AL code from Deamon**	   HFN: moved cache code to HTCache module***//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "HTBind.h"#include "HTFWrite.h"#include "HTFSave.h"					 /* Implemented here */struct _HTStream {    const HTStreamClass *isa;    HTStream *		target;    char * 		end_command;		       /* Command to execute */    BOOL 		remove_on_close;		     /* Remove file? */    char *		filename;			     /* Name of file */    HTRequest *		request;		       /* Saved for callback */    HTRequestCallback *	callback;};#define DEFAULT_LAST_SEGMENT  "index"/* ------------------------------------------------------------------------- */PRIVATE int HTFileSave_flush (HTStream * me){    return (*me->target->isa->flush)(me->target);}PRIVATE int HTFileSave_put_character (HTStream * me, char c){    return (*me->target->isa->put_character)(me->target, c);}PRIVATE int HTFileSave_put_string (HTStream * me, const char * s){    return (*me->target->isa->put_string)(me->target, s);}PRIVATE int HTFileSave_write (HTStream * me, const char * b, int l){    return (*me->target->isa->put_block)(me->target, b, l);}PRIVATE int HTFileSave_free (HTStream * me){    if (me) {	(*me->target->isa->_free)(me->target);#ifdef HAVE_SYSTEM	if (me->end_command) system(me->end_command);    /* SECURITY HOLE!!! */#endif	if (me->callback) (*me->callback)(me->request, me->filename);	if (me->remove_on_close) REMOVE(me->filename);	HT_FREE(me->end_command);	HT_FREE(me->filename);	HT_FREE(me);    }    return HT_OK;}PRIVATE int HTFileSave_abort (HTStream * me, HTList * e){    HTTRACE(STREAM_TRACE, "Save File.. ABORTING...\n");    if (me) {	(*me->target->isa->abort)(me->target, e);	if (me->remove_on_close) REMOVE(me->filename);	HT_FREE(me->end_command);	HT_FREE(me->filename);	HT_FREE(me);    }    return HT_ERROR;}PRIVATE const HTStreamClass HTFileSave ={		    "FileSave",    HTFileSave_flush,    HTFileSave_free,    HTFileSave_abort,    HTFileSave_put_character,    HTFileSave_put_string,    HTFileSave_write};PUBLIC HTStream * HTFileSave_new (HTRequest * request, FILE * fp,				  BOOL leave_open){    HTStream * me = NULL;    if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL)        HT_OUTOFMEM("HTFileSave_new");    me->isa = &HTFileSave;    me->target = HTFWriter_new(request, fp, leave_open);    me->request = request;    return me;}/* ------------------------------------------------------------------------- *//***   This function tries really hard to find a non-existent filename relative**   to the path given. Returns a string that must be freed by the caller or**   NULL on error.*/PRIVATE char * get_filename (char * base, const char * uri,			     const char * suffix, BOOL use_last_segment){    char * path = NULL;    if (use_last_segment) {	char * uri_path = NULL;	if (uri && (uri_path = HTParse(uri, "", PARSE_PATH|PARSE_PUNCTUATION))) {	    char * last_segment = strrchr(uri_path, '/');	    BOOL slash = (base && *(base+strlen(base)-1)==DIR_SEPARATOR_CHAR); 	    if (last_segment && *(last_segment+1)) {		StrAllocMCopy(&path, base ? base : "",			      slash ? "" : DIR_SEPARATOR_STR, ++last_segment, NULL);	    } else {		StrAllocMCopy(&path, base ? base : "",			      slash ? "" : DIR_SEPARATOR_STR, DEFAULT_LAST_SEGMENT,			      suffix ? suffix : "", NULL);	    }	}    } else {	path = HTGetTmpFileName(base);        if (path && suffix) StrAllocCat(path, suffix);    }    HTTRACE(STREAM_TRACE, "Save file... Temporaray file `%s\'\n" _ path ? path : "<null>");    return path;}/*	Save Locally**	------------**	Saves a file to local disk. This can for example be used to dump**	data objects of unknown media types to local disk. The stream prompts**	for a file name for the temporary file.*/PUBLIC HTStream* HTSaveLocally (HTRequest *	request,				void *		param,				HTFormat	input_format,				HTFormat	output_format,				HTStream *	output_stream){    FILE * fp = NULL;    char * filename = NULL;    HTUserProfile * up = HTRequest_userProfile(request);    char * tmproot = HTUserProfile_tmp(up);    if (HTLib_secure()) {	HTRequest_addError(request, ERR_NON_FATAL, NO, HTERR_UNAUTHORIZED,			   NULL, 0, "HTSaveLocally");	return HTErrorStream();    }    if (!tmproot) {	HTTRACE(STREAM_TRACE, "Save File... turned off\n");	return HTErrorStream();    }	    /* Let's prompt the user for a file name for this file */    {	HTAlertCallback *cbf = HTAlert_find(HT_A_PROMPT);	HTParentAnchor *anchor = (HTParentAnchor *) HTRequest_anchor(request);	/*	**  If we found an alert handler for prompting the user then call it.	**  If not then either we are in non-interactive mode or no handler	**  has been registered. For now we then return a blackhole which may	**  not be the best thing to do.	*/	if (cbf) {	    HTAlertPar * reply = HTAlert_newReply();	    char * suffix = HTBind_getSuffix(anchor);	    char * deflt = get_filename(tmproot, HTAnchor_physical(anchor), suffix, YES);	    if ((*cbf)(request, HT_A_PROMPT, HT_MSG_FILENAME,deflt,NULL,reply))		filename = HTAlert_replyMessage(reply);	    HTAlert_deleteReply(reply);	    HT_FREE(suffix);	    HT_FREE(deflt);	}	if (filename) {	    if ((fp = fopen(filename, "wb")) == NULL) {		HTRequest_addError(request, ERR_NON_FATAL, NO, HTERR_NO_FILE,				   filename, strlen(filename),"HTSaveLocally");		HT_FREE(filename);		return HTErrorStream();	    }	} else if (cbf) {	    HTTRACE(STREAM_TRACE, "Save File... No file name - error stream\n");	    return HTErrorStream();	} else {	    HTTRACE(STREAM_TRACE, "Save File... No file name - black hole\n");	    return HTBlackHole();	}    }        /* Now we are ready for creating the file writer stream */    if (fp) {	HTStream * me = HTFileSave_new(request, fp, NO);	me->filename = filename;	return me;    }    HT_FREE(filename);    return HTErrorStream();}/*	Take action using a system command**	----------------------------------**	Creates temporary file, writes to it and then executes system**	command (maybe an external viewer) when EOF has been reached. The**	stream finds a suitable name of the temporary file which preserves the**	suffix. This way, the system command can find out the file type from**	the name of the temporary file name.*/PUBLIC HTStream* HTSaveAndExecute (HTRequest *	request,				   void *	param,				   HTFormat	input_format,				   HTFormat	output_format,				   HTStream *	output_stream){    FILE * fp = NULL;    char * filename = NULL;    HTUserProfile * up = HTRequest_userProfile(request);    char * tmproot = HTUserProfile_tmp(up);    if (HTLib_secure()) {	HTRequest_addError(request, ERR_NON_FATAL, NO, HTERR_UNAUTHORIZED,			   NULL, 0, "HTSaveLocally");	return HTErrorStream();    }    if (!tmproot) {	HTTRACE(STREAM_TRACE, "Save File... turned off");	return HTErrorStream();    }	    /* Let's find a hash name for this file without asking user */    {	HTParentAnchor *anchor = (HTParentAnchor *) HTRequest_anchor(request);	char *suffix = HTBind_getSuffix(anchor);	filename = get_filename(tmproot, HTAnchor_physical(anchor), suffix, NO);	HT_FREE(suffix);	if (filename) {	    if ((fp = fopen(filename, "wb")) == NULL) {		HTRequest_addError(request, ERR_NON_FATAL, NO, HTERR_NO_FILE,				   filename, strlen(filename),"HTSaveAndExecute");		HT_FREE(filename);		return HTErrorStream();	    }	} else {	    HTTRACE(STREAM_TRACE, "Save File... No file name\n");	    return HTErrorStream();	}    }        /* Now we are ready for creating the file writer stream */    if (fp) {	HTStream * me = HTFileSave_new(request, fp, NO);	me->filename = filename;	if (param) {	    if ((me->end_command = (char  *) HT_MALLOC((strlen((char *) param) + 10 + 3*strlen(filename)))) == NULL)		HT_OUTOFMEM("SaveAndExecute");	    sprintf (me->end_command,		     (char *)param, filename, filename, filename);	}	return me;    }    HT_FREE(filename);    return HTErrorStream();}/*	Save and Call Back**	------------------**	This stream works exactly like the HTSaveAndExecute**	stream but in addition when EOF has been reached, it checks whether a**	callback function has been associated with the request object in which**	case, this callback is being called. This can be use by the**	application to do some processing after the system command**	has terminated. The callback function is called with the file name of**	the temporary file as parameter.*/PUBLIC HTStream* HTSaveAndCallback (HTRequest *		request,				    void *		param,				    HTFormat		input_format,				    HTFormat		output_format,				    HTStream *		output_stream){    HTStream * me = HTSaveAndExecute(request, param, input_format,				     output_format, output_stream);    if (me) {	me->callback = HTRequest_callback(request);	return me;    }    return HTErrorStream();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区四区在线免费观看 | 色综合久久久久综合体桃花网| 波多野结衣在线aⅴ中文字幕不卡| 国产成人免费视| 日韩欧美精品三级| 成年人午夜久久久| 久久新电视剧免费观看| 日本sm残虐另类| 欧美日韩亚洲综合在线| 中文字幕av一区二区三区免费看| 午夜精品久久久久久久久久| 色呦呦网站一区| 国产欧美日韩久久| 国产高清成人在线| 久久久久久久综合| 国产一区二区不卡| 国产色产综合色产在线视频| 精品一区二区三区免费毛片爱| 日韩午夜av一区| 韩国精品主播一区二区在线观看| 26uuu精品一区二区| 天使萌一区二区三区免费观看| 337p亚洲精品色噜噜狠狠| 亚洲男人的天堂在线aⅴ视频| 欧美亚洲自拍偷拍| 裸体在线国模精品偷拍| 久久久91精品国产一区二区精品| 99久久精品情趣| 午夜精品福利一区二区蜜股av| 欧美一区二区三区在线观看视频| 亚洲第一激情av| 国产亚洲精品久| 欧美日韩精品一区二区在线播放| 亚洲综合色网站| 久久久久久久久久看片| 91在线播放网址| 久久精品国产77777蜜臀| 国产精品欧美精品| 中文文精品字幕一区二区| 中文字幕一区二区视频| 亚洲一区日韩精品中文字幕| 亚洲黄色免费电影| 日本欧美肥老太交大片| 水蜜桃久久夜色精品一区的特点| 亚洲电影你懂得| 国产91丝袜在线18| 久久99久久精品| 久久精品久久99精品久久| 午夜电影久久久| 无吗不卡中文字幕| 蜜桃一区二区三区在线观看| 亚洲1区2区3区4区| 亚洲品质自拍视频网站| 亚洲第一主播视频| 免费成人性网站| a级精品国产片在线观看| 色噜噜狠狠色综合欧洲selulu| 在线精品视频一区二区| 欧美乱熟臀69xxxxxx| 精品国产网站在线观看| 国产精品久久夜| 一区二区三区在线观看国产| 免费一级片91| 精品一区二区三区不卡| 一本色道a无线码一区v| 精品欧美乱码久久久久久| 国产日产精品一区| 亚洲色图视频免费播放| 国产原创一区二区| 欧美亚洲日本一区| 自拍偷在线精品自拍偷无码专区| 国产精品一卡二| 色播五月激情综合网| 精品国产露脸精彩对白| 亚洲另类中文字| 国产美女久久久久| 精品国产三级a在线观看| 亚洲精品国产视频| 国产一区二区福利| 欧美在线视频日韩| 亚洲精品一卡二卡| 精品亚洲国内自在自线福利| 精品视频1区2区3区| 性欧美大战久久久久久久久| 色狠狠桃花综合| 久久九九久久九九| 激情伊人五月天久久综合| 精品1区2区3区| 亚洲女女做受ⅹxx高潮| 色综合久久88色综合天天6| 国产片一区二区| 丁香天五香天堂综合| 国产午夜精品美女毛片视频| 美女视频网站久久| 日韩欧美第一区| 久久激情五月婷婷| 久久久亚洲欧洲日产国码αv| 亚洲一区二区三区国产| 精品污污网站免费看| 天天操天天色综合| 日韩午夜在线影院| 国产成人精品免费看| 亚洲三级免费电影| 欧美男生操女生| 天天影视涩香欲综合网 | 亚洲一区二区四区蜜桃| 欧美精品国产精品| 黄色日韩三级电影| 精品少妇一区二区三区| 成人免费看视频| 亚洲视频一二三| 7777精品伊人久久久大香线蕉的 | 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩视频在线一区二区| 蜜臀99久久精品久久久久久软件| 国产精品看片你懂得| 日韩欧美国产电影| 91久久线看在观草草青青| 亚洲一区二区在线免费看| 久久久久久久网| 5858s免费视频成人| 高清视频一区二区| 精彩视频一区二区| 亚洲与欧洲av电影| 最近中文字幕一区二区三区| 亚洲欧洲日本在线| 中文字幕乱码亚洲精品一区| 国产视频在线观看一区二区三区 | 亚洲激情欧美激情| 一区二区三区四区乱视频| 一区二区三区欧美久久| 亚洲欧美综合色| 一区二区三区久久| 一本一本久久a久久精品综合麻豆| 国产精品午夜免费| 国产麻豆欧美日韩一区| 国产一区二区毛片| 91香蕉视频在线| 亚洲成人高清在线| 91精品欧美综合在线观看最新| 理论片日本一区| aaa亚洲精品| 欧美精品免费视频| 国产精品成人免费| 日韩高清在线不卡| 色欧美片视频在线观看| 精品伦理精品一区| 国产精品天干天干在线综合| 国产精品久久久久四虎| 亚洲免费观看在线视频| 免费看日韩a级影片| 成人精品国产一区二区4080| 欧美色视频在线| 久久久久国产精品人| 亚洲乱码国产乱码精品精的特点| 天堂在线亚洲视频| 国产成人午夜精品5599| 欧美性大战久久久久久久蜜臀 | 日韩成人伦理电影在线观看| 国产一区中文字幕| 91精品国产综合久久小美女| 亚洲美女电影在线| 国产激情91久久精品导航| 欧美精品色一区二区三区| 国产欧美综合色| 国产九色sp调教91| 欧美精品九九99久久| 亚洲天堂免费看| 国产成人自拍高清视频在线免费播放| 制服.丝袜.亚洲.另类.中文 | www国产亚洲精品久久麻豆| 亚洲欧美日韩国产成人精品影院 | 欧美色男人天堂| 自拍偷自拍亚洲精品播放| 成人黄色免费短视频| 久久看人人爽人人| 国产精选一区二区三区| 精品国产91九色蝌蚪| 韩国成人精品a∨在线观看| 欧美一区二区女人| 免费黄网站欧美| 欧美精品一区二区久久久| 国产一区在线看| 久久久影院官网| 成人av在线影院| 亚洲欧美激情在线| 欧美色图免费看| 美女精品一区二区| 久久久久国产成人精品亚洲午夜| 寂寞少妇一区二区三区| 中文字幕一区二区在线播放| 91视视频在线观看入口直接观看www | 黄色日韩三级电影| 亚洲欧美日韩人成在线播放| 91精品国产一区二区三区蜜臀| 国产一区二区精品久久| 亚洲高清在线视频| 国产精品久久久一区麻豆最新章节| 欧美专区日韩专区| av中文字幕亚洲|