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

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

?? htfile.c

?? www工具包. 這是W3C官方支持的www支撐庫(kù). 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*								       HTFile.c**	FILE ACCESS****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTFile.c,v 1.158 2000/08/10 16:05:39 kahan Exp $****	This is unix-specific code in general, with some VMS bits.**	These are routines for file access used by browsers.**** History:**	   Feb 91	Written Tim Berners-Lee CERN/CN**	   Apr 91	vms-vms access included using DECnet syntax**	26 Jun 92 (JFG) When running over DECnet, suppressed FTP.**			Fixed access bug for relative names on VMS.**	   Sep 93 (MD)  Access to VMS files allows sharing.**	15 Nov 93 (MD)	Moved HTVMSname to HTVMSUTILS.C**	22 Feb 94 (MD)  Excluded two routines if we are not READING directories**	18 May 94 (HF)	Directory stuff removed and stream handling updated,**			error messages introduced etc.**		  HFN	Separated transport**** Bugs:**	FTP: Cannot access VMS files from a unix machine.**      How can we know that the**	target machine runs VMS?*//* Library Includes */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "WWWDir.h"#include "WWWTrans.h"#include "HTReqMan.h"#include "HTBind.h"#include "HTMulti.h"#include "HTFile.h"		/* Implemented here *//* Final states have negative value */typedef enum _FileState {    FS_RETRY		= -4,    FS_ERROR		= -3,    FS_NO_DATA		= -2,    FS_GOT_DATA		= -1,    FS_BEGIN		= 0,    FS_PENDING,    FS_DO_CN,    FS_NEED_OPEN_FILE,    FS_NEED_BODY,    FS_PARSE_DIR,    FS_TRY_FTP} FileState;/* This is the context structure for the this module */typedef struct _file_info {    FileState		state;		  /* Current state of the connection */    char *		local;		/* Local representation of file name */    struct stat		stat_info;	      /* Contains actual file chosen */    HTNet *		net;    HTTimer *		timer;} file_info;struct _HTStream {    const HTStreamClass *	isa;};struct _HTInputStream {    const HTInputStreamClass *	isa;};PRIVATE HTDirReadme	dir_readme = HT_DIR_README_TOP;PRIVATE HTDirAccess	dir_access = HT_DIR_OK;PRIVATE HTDirShow	dir_show = HT_DS_SIZE+HT_DS_DATE+HT_DS_DES+HT_DS_ICON;PRIVATE HTDirKey	dir_key = HT_DK_CINS;PRIVATE BOOL		file_suffix_binding = YES;/* ------------------------------------------------------------------------- *//*	Directory Access**	----------------*/PUBLIC BOOL HTFile_setDirAccess (HTDirAccess mode){    dir_access = mode;    return YES;}PUBLIC HTDirAccess HTFile_dirAccess (void){    return dir_access;}/*	Directory Readme**	----------------*/PUBLIC BOOL HTFile_setDirReadme (HTDirReadme mode){    dir_readme = mode;    return YES;}PUBLIC HTDirReadme HTFile_dirReadme (void){    return dir_readme;}/***  Should we find the bindings between file suffixes and media types**  here or not?*/PUBLIC BOOL HTFile_doFileSuffixBinding (BOOL mode){    file_suffix_binding = mode;    return YES;}PUBLIC BOOL HTFile_fileSuffixBinding (void){    return file_suffix_binding;}/*	HTFile_readDir**	--------------**	Reads the directory "path"**	Returns:**		HT_ERROR	Error**		HT_FORBIDDEN	Directory reading not allowed**		HT_LOADED	Successfully read the directory*/PRIVATE int HTFile_readDir (HTRequest * request, file_info *file){#ifdef HAVE_READDIR    DIR * dp;    struct stat file_info;    HTParentAnchor * anchor = HTRequest_anchor(request);    char *url = HTAnchor_physical(anchor);    char fullname[HT_MAX_PATH+1];    char *name;    HTTRACE(PROT_TRACE, "Reading..... directory\n");    if (dir_access == HT_DIR_FORBID) {	HTRequest_addError(request, ERR_FATAL, NO, HTERR_FORBIDDEN,		   NULL, 0, "HTFile_readDir");	return HT_FORBIDDEN;    }        /* Initialize path name for stat() */    if (*(name = (url+strlen(url)-1)) != '/') {	char *newurl = NULL;	StrAllocCopy(newurl, url);	StrAllocCat(newurl, "/");	HT_FREE(file->local);	file->local = HTWWWToLocal(newurl, "", HTRequest_userProfile(request));	HT_FREE(newurl);    }    strcpy(fullname, file->local);    name = fullname+strlen(fullname);		 /* Point to end of fullname */    /* Check if access is enabled */    if (dir_access == HT_DIR_SELECTIVE) {	strcpy(name, DEFAULT_DIR_FILE);	if (HT_STAT(fullname, &file_info)) {	    HTTRACE(PROT_TRACE, "Read dir.... `%s\' not found\n" _ DEFAULT_DIR_FILE);	    HTRequest_addError(request, ERR_FATAL, NO, HTERR_FORBIDDEN,		       NULL, 0, "HTFile_readDir");	    return HT_FORBIDDEN;	}    }    if ((dp = opendir(file->local))) {	struct dirent * dirbuf;	HTDir *dir = HTDir_new(request, dir_show, dir_key);	char datestr[20];	char sizestr[10];	HTFileMode mode;#ifdef HT_REENTRANT	struct dirent result;				    /* For readdir_r */#endif#ifdef HAVE_READDIR_R_2        while ((dirbuf = (struct dirent *) readdir_r(dp, &result)))#elif defined(HAVE_READDIR_R_3)        while (readdir_r(dp, &result, &dirbuf) == 0)#else	while ((dirbuf = readdir(dp)))#endif /* HAVE_READDIR_R_2 */	{	    /* Current and parent directories are never shown in list */#ifdef HAVE_DIRENT_INO	    if (!dirbuf->d_ino ||		!strcmp(dirbuf->d_name, ".") || !strcmp(dirbuf->d_name, ".."))#else	    if (!strcmp(dirbuf->d_name, ".") || !strcmp(dirbuf->d_name, ".."))#endif		continue;	    /* Make a lstat on the file */	    strcpy(name, dirbuf->d_name);	    if (HT_LSTAT(fullname, &file_info)) {		HTTRACE(PROT_TRACE, "Read dir.... lstat failed: %s\n" _ fullname);		continue;	    }	    /* Convert stat info to fit our setup */	    if (((mode_t) file_info.st_mode & S_IFMT) == S_IFDIR) {#ifdef VMS		char *dot = strstr(name, ".DIR");      /* strip .DIR part... */		if (dot) *dot = '\0';#endif /* VMS */		mode = HT_IS_DIR;		if (dir_show & HT_DS_SIZE) strcpy(sizestr, "-");	    } else {		mode = HT_IS_FILE;		if (dir_show & HT_DS_SIZE)		    HTNumToStr(file_info.st_size, sizestr, 10);	    }	    if (dir_show & HT_DS_DATE)		HTDateDirStr(&file_info.st_mtime, datestr, 20);	    /* Add to the list */	    if (HTDir_addElement(dir, name, datestr, sizestr, mode) != YES)		break;	}	closedir(dp);	HTDir_free(dir);	return HT_LOADED;    } else {	HTRequest_addSystemError(request,  ERR_FATAL, errno, NO, "opendir");	return HT_ERROR;    }#else    return HT_ERROR;	/* needed for WWW_MSWINDOWS */#endif /* HAVE_READDIR */}/*	Determine write access to a file**	--------------------------------**	If stat_info is NULL then the function calls stat() on it's own,**	otherwise it uses the information found in stat_info** On exit,**	return value	YES if file can be accessed and can be written to.**** Bugs:**	1.	No code for non-unix systems.**	2.	Isn't there a quicker way?*/PRIVATE BOOL HTEditable (const char * filename, struct stat * stat_info){#ifdef GETGROUPS_T    int i;    uid_t myUid;    int	ngroups;			/* The number of groups  */    struct stat	fileStatus;    struct stat *fileptr = stat_info ? stat_info : &fileStatus;    GETGROUPS_T groups[NGROUPS];    if (!stat_info) {	if (HT_STAT(filename, &fileStatus))	    return NO;				  /* Can't even access file! */    }    ngroups = getgroups(NGROUPS, groups);	/* Groups to which I belong  */    myUid = geteuid();				/* Get my user identifier */#ifdef HTDEBUG    if (PROT_TRACE) {        int i;	HTTRACE(PROT_TRACE,		"File mode is 0%o, uid=%d, gid=%d. My uid=%d, %d groups (" _		(unsigned int) fileptr->st_mode _		(int) fileptr->st_uid _ (int) fileptr->st_gid _		(int) myUid _ ngroups);	for (i=0; i<ngroups; i++) HTTRACE(PROT_TRACE, " %d" _ (int) groups[i]);	HTTRACE(PROT_TRACE, ")\n");    }#endif /* HTDEBUG */        if (fileptr->st_mode & 0002)		/* I can write anyway? */    	return YES;	    if ((fileptr->st_mode & 0200)		/* I can write my own file? */     && (fileptr->st_uid == myUid))    	return YES;    if (fileptr->st_mode & 0020)		/* Group I am in can write? */    {   	for (i=0; i<ngroups; i++) {            if (groups[i] == fileptr->st_gid)	        return YES;	}    }    HTTRACE(PROT_TRACE, "\tFile is not editable.\n");    return NO;					/* If no excuse, can't do */#else    /*    ** We don't know and can't find out. Can we be sure that when opening    ** a file in mode "a" that the file is not modified?    */    return NO;#endif /* GETGROUPS_T */}/*	FileCleanup**	-----------**      This function closes the connection and frees memory.**      Returns YES on OK, else NO*/PRIVATE int FileCleanup (HTRequest *req, int status){    HTNet * net = HTRequest_net(req);    file_info * file = (file_info *) HTNet_context(net);    HTStream * input = HTRequest_inputStream(req);    /* Free stream with data TO Local file system */    if (input) {        if (status == HT_INTERRUPTED)            (*input->isa->abort)(input, NULL);        else            (*input->isa->_free)(input);        HTRequest_setInputStream(req, NULL);    }    /*    **  Remove if we have registered a timer function as a callback    */    if (file->timer) {	HTTimer_delete(file->timer);	file->timer = NULL;    }    if (file) {	HT_FREE(file->local);	HT_FREE(file);    }    HTNet_delete(net, status);    return YES;}/*	Load a document**	---------------**** On entry,

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美体内she精视频| 中文字幕日韩精品一区| 日韩一区二区三区免费看| 欧美日韩国产大片| 欧美一级理论片| 精品国产3级a| 欧美国产精品一区| 一区二区三区四区五区视频在线观看| 国产精品三级久久久久三级| 亚洲欧洲日韩av| 亚洲一二三四在线| 全国精品久久少妇| 国产精品一区二区久久不卡| www.亚洲激情.com| av电影天堂一区二区在线 | 99久久精品情趣| 欧美亚一区二区| 欧美在线观看一区| 欧美一区二区免费观在线| 日韩精品自拍偷拍| 日韩精品一区二区三区在线| 久久久久久久综合日本| 一区精品在线播放| 日日夜夜精品视频免费| 国产一区二三区好的| 波多野结衣一区二区三区 | 精品国产伦理网| 中文字幕不卡在线| 午夜视频在线观看一区二区| 精品午夜久久福利影院| 99在线精品观看| 91精品国产高清一区二区三区| 欧美精品一区在线观看| 中文字幕av免费专区久久| 一区二区三区四区在线| 日本aⅴ免费视频一区二区三区| 国产很黄免费观看久久| 欧美中文字幕久久| 久久久青草青青国产亚洲免观| 亚洲欧美国产高清| 毛片av一区二区| 91麻豆精品在线观看| 欧美电影免费观看高清完整版在 | 亚洲精品中文在线| 国产在线精品一区二区夜色| 91久久精品一区二区三| 久久蜜桃av一区二区天堂| 亚洲一二三四在线| av激情综合网| 久久免费电影网| 亚洲18色成人| 99热精品国产| 日韩欧美国产综合一区| 亚洲欧美日韩国产手机在线| 日本亚洲电影天堂| 一本色道久久综合狠狠躁的推荐 | 毛片基地黄久久久久久天堂| 色综合咪咪久久| 久久婷婷色综合| 一区二区三区中文免费| 久久精品国产精品青草| 欧美日韩黄视频| 亚洲三级理论片| 国产成人8x视频一区二区| 欧美一区二区三区在| 亚洲人妖av一区二区| 国产精品456| 日韩欧美一区二区久久婷婷| 午夜国产精品一区| 一本大道av伊人久久综合| 欧美高清在线视频| 国内精品国产成人| 日韩精品在线看片z| 午夜国产精品一区| 精品视频1区2区| 亚洲摸摸操操av| 不卡欧美aaaaa| 国产女人18毛片水真多成人如厕 | 一区二区日韩av| 国产不卡免费视频| 精品免费国产一区二区三区四区| 日本午夜一区二区| 日韩亚洲欧美成人一区| 亚洲宅男天堂在线观看无病毒| 99综合电影在线视频| 国产婷婷色一区二区三区在线| 激情五月激情综合网| 日韩视频免费直播| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美日韩一区二区不卡| 午夜激情一区二区| 91精品国产高清一区二区三区| 日韩一区精品视频| 911精品国产一区二区在线| 午夜精品免费在线观看| 欧美在线观看一区二区| 亚洲美女在线一区| 欧美日韩专区在线| 日韩在线卡一卡二| 精品久久五月天| 激情综合色综合久久综合| 久久久www成人免费毛片麻豆| 国产麻豆精品在线观看| 欧美哺乳videos| 狠狠色丁香久久婷婷综| 国产婷婷色一区二区三区| 成人黄色国产精品网站大全在线免费观看| 国产欧美精品在线观看| 99久久精品免费看| 亚洲一区在线观看免费观看电影高清 | 久久不见久久见免费视频1| 日韩欧美一级精品久久| 国产高清在线观看免费不卡| 国产亚洲1区2区3区| 国产91丝袜在线播放九色| 亚洲欧洲三级电影| 欧美羞羞免费网站| 免费xxxx性欧美18vr| 久久在线观看免费| youjizz久久| 亚洲午夜免费电影| 日韩免费福利电影在线观看| 国产乱码精品一品二品| 成人免费在线观看入口| 欧美日韩aaa| 国产经典欧美精品| 日本一区二区免费在线观看视频 | 一区二区三区四区亚洲| 欧美一级日韩一级| 成人教育av在线| 偷拍与自拍一区| 久久久久久麻豆| 欧美日韩亚洲综合| 国产精品一二三四五| 欧美激情一区不卡| 在线国产亚洲欧美| 视频一区中文字幕国产| 久久中文字幕电影| 欧美手机在线视频| 国产精品一区二区三区四区| 亚洲免费观看在线观看| 精品久久久久久无| 在线一区二区三区四区五区| 久久精品免费看| 欧美极品少妇xxxxⅹ高跟鞋| 欧洲一区二区av| 国产成人精品亚洲777人妖| 亚洲图片有声小说| 欧美激情一区二区三区四区| 欧美高清视频在线高清观看mv色露露十八 | 最新热久久免费视频| 色狠狠色噜噜噜综合网| 激情五月播播久久久精品| 国产精品国产三级国产三级人妇| 国产精品久久久久影院亚瑟| 在线成人av网站| av福利精品导航| 国产精品一区二区91| 亚洲狠狠爱一区二区三区| 国产精品三级视频| 国产丝袜在线精品| 久久久精品天堂| 欧美精品一区二区三区四区 | 视频一区二区不卡| 亚洲一卡二卡三卡四卡五卡| 中文字幕一区av| 中文一区二区在线观看| 国产女人水真多18毛片18精品视频 | 亚洲国产视频网站| 一区二区免费在线| 亚洲黄色尤物视频| 一区二区三区四区五区视频在线观看 | 国产毛片精品国产一区二区三区| 精品在线观看视频| 国产在线看一区| 国产一级精品在线| 国产精品一色哟哟哟| 国产成人综合在线| 懂色一区二区三区免费观看| 高清在线观看日韩| jlzzjlzz亚洲日本少妇| 91视频免费观看| 91视频免费看| 欧美午夜不卡在线观看免费| 欧美性猛交xxxxxx富婆| 欧美日韩精品一区二区三区四区| 欧美日韩一区二区在线观看视频 | 经典三级视频一区| 国产成人精品综合在线观看 | 亚洲男人天堂av网| 夜夜爽夜夜爽精品视频| 亚洲一二三四久久| 欧美日精品一区视频| 欧美性受极品xxxx喷水| 色噜噜狠狠一区二区三区果冻| 成人av一区二区三区| 色婷婷综合在线| 在线播放91灌醉迷j高跟美女 | 国产剧情在线观看一区二区| 国产精品中文字幕日韩精品|