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

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

?? path.c

?? 舉世聞名的joe記事本源程序
?? C
字號:
/*  *	Directory and path functions *	Copyright *		(C) 1992 Joseph H. Allen * *	This file is part of JOE (Joe's Own Editor) */#include "types.h"#ifdef HAVE_PWD_H#include <pwd.h>#endif#ifdef HAVE_PATHS_H#  include <paths.h>	/* for _PATH_TMP */#endif#ifdef HAVE_LIMITS_H#include <limits.h>#endif#ifdef HAVE_DIRENT_H#  include <dirent.h>#  define NAMLEN(dirent) strlen((dirent)->d_name)#else#  ifdef HAVE_SYS_DIRENT_H#    include <sys/dirent.h>#    define NAMLEN(dirent) strlen((dirent)->d_name)#  else#    define direct dirent#    define NAMLEN(dirent) (dirent)->d_namlen#    ifdef HAVE_SYS_NDIR_H#      include <sys/ndir.h>#    else#      ifdef HAVE_SYS_DIR_H#        include <sys/dir.h>#      else#        ifdef HAVE_NDIR_H#          include <ndir.h>#        else#          ifndef __MSDOS__#            include "dir.c"#          endif#        endif#      endif#    endif#  endif#endif#ifdef __MSDOS__	/* paths in MS-DOS can include a drive letter followed by semicolon */#define	do_if_drive_letter(path, command) do { \						if ((path)[0] && (path)[1] == ':') { \							command; \						} \					} while(0)#else#define do_if_drive_letter(path, command)	do { } while(0)#endif#define skip_drive_letter(path)	do_if_drive_letter((path), (path) += 2)#ifndef		_PATH_TMP#  ifdef __MSDOS__#    define	_PATH_TMP	""#  else#    define	_PATH_TMP	"/tmp/"#  endif#endif#ifndef PATH_MAX#warning What should we include to have PATH_MAX defined?#define PATH_MAX	4096#endif/********************************************************************/unsigned char *joesep(unsigned char *path){	int x;	for (x = 0; path[x]; ++x)		if (path[x] == '\\')			path[x] = '/';	return path;}/********************************************************************/unsigned char *namprt(unsigned char *path){	unsigned char *z;	skip_drive_letter(path);	z = path + slen(path);	while ((z != path) && (z[-1] != '/'))		--z;	return vsncpy(NULL, 0, sz(z));}/********************************************************************/unsigned char *namepart(unsigned char *tmp, unsigned char *path){	unsigned char *z;	skip_drive_letter(path);	z = path + zlen(path);	while ((z != path) && (z[-1] != '/'))		--z;	return zcpy(tmp, z);}/********************************************************************/unsigned char *dirprt(unsigned char *path){	unsigned char *b = path;	unsigned char *z = path + slen(path);	skip_drive_letter(b);	while ((z != b) && (z[-1] != '/'))		--z;	return vsncpy(NULL, 0, path, z - path);}/********************************************************************/unsigned char *begprt(unsigned char *path){	unsigned char *z = path + slen(path);	int drv = 0;	do_if_drive_letter(path, drv = 2);	while ((z != path + drv) && (z[-1] == '/'))		--z;	if (z == path + drv)		return vsncpy(NULL, 0, sz(path));	else {		while ((z != path + drv) && (z[-1] != '/'))			--z;		return vsncpy(NULL, 0, path, z - path);	}}/********************************************************************/unsigned char *endprt(unsigned char *path){	unsigned char *z = path + slen(path);	int drv = 0;	do_if_drive_letter(path, drv = 2);	while ((z != path + drv) && (z[-1] == '/'))		--z;	if (z == path + drv)		return vsncpy(NULL, 0, sc(""));	else {		while (z != path + drv && z[-1] != '/')			--z;		return vsncpy(NULL, 0, sz(z));	}}/********************************************************************/int mkpath(unsigned char *path){	unsigned char *s;	if (path[0] == '/') {		if (chddir("/"))			return 1;		s = path;		goto in;	}	while (path[0]) {		int c;		for (s = path; (*s) && (*s != '/'); s++) ;		c = *s;		*s = 0;		if (chddir((char *)path)) {			if (mkdir((char *)path, 0777))				return 1;			if (chddir((char *)path))				return 1;		}		*s = c;	      in:		while (*s == '/')			++s;		path = s;	}	return 0;}/********************************************************************//* Create a temporary file *//********************************************************************/unsigned char *mktmp(unsigned char *where){#ifndef HAVE_MKSTEMP	static unsigned seq = 0;#endif	unsigned char *name;	int fd;	unsigned namesize;	if (!where)		where = (unsigned char *)getenv("TEMP");	if (!where)		where = USTR _PATH_TMP;	namesize = zlen(where) + 16;	name = vsmk(namesize);	/* [G.Ghibo'] we need to use vsmk() and not malloc() as				   area returned by mktmp() is destroyed later with				   vsrm(); */#ifdef HAVE_MKSTEMP	joe_snprintf_1(name, namesize, "%s/joe.tmp.XXXXXX", where);	if((fd = mkstemp((char *)name)) == -1)		return NULL;	/* FIXME: vflsh() and vflshf() */				/* expect mktmp() always succeed!!! */	fchmod(fd, 0600);       /* Linux glibc 2.0 mkstemp() creates it with */				/* 0666 mode --> change it to 0600, so nobody */				/* else sees content of temporary file */	close(fd);#else      loop:	seq = (seq + 1) % 1000;	joe_snprintf_3(name, namesize, "%s/joe.tmp.%03u%03u", where, seq, (unsigned) time(NULL) % 1000);	if ((fd = open(name, O_RDONLY)) != -1) {		close(fd);		goto loop;	/* FIXME: possible endless loop --> DoS attack */	}	if ((fd = open(name, O_RDWR | O_CREAT | O_EXCL, 0600)) == -1)		return NULL;	/* FIXME: see above */	else		close(fd);#endif	return name;}/********************************************************************/int rmatch(unsigned char *a, unsigned char *b){	int flag, inv, c;	for (;;)		switch (*a) {		case '*':			++a;			do {				if (rmatch(a, b))					return 1;			} while (*b++);			return 0;		case '[':			++a;			flag = 0;			if (*a == '^') {				++a;				inv = 1;			} else				inv = 0;			if (*a == ']')				if (*b == *a++)					flag = 1;			while (*a && (c = *a++) != ']')				if ((c == '-') && (a[-2] != '[') && (*a)) {					if ((*b >= a[-2]) && (*b <= *a))						flag = 1;				} else if (*b == c)					flag = 1;			if ((!flag && !inv) || (flag && inv) || (!*b))				return 0;			++b;			break;		case '?':			++a;			if (!*b)				return 0;			++b;			break;		case 0:			if (!*b)				return 1;			else				return 0;		default:			if (*a++ != *b++)				return 0;		}}/********************************************************************/int isreg(unsigned char *s){	int x;	for (x = 0; s[x]; ++x)		if ((s[x] == '*') || (s[x] == '?') || (s[x] == '['))			return 1;	return 0;}/********************************************************************/#ifdef __MSDOS__#include <dos.h>#include <dir.h>struct direct {	unsigned char d_name[16];} direc;int dirstate = 0;struct ffblk ffblk;unsigned char *dirpath = NULL;void *opendir(unsigned char *path){	dirstate = 0;	return &direc;}void closedir(){}struct direct *readdir(){	int x;	if (dirstate) {		if (findnext(&ffblk))			return NULL;	} else {		if (findfirst("*.*", &ffblk, FA_DIREC))			return NULL;		dirstate = 1;	}	zcpy(direc.d_name, ffblk.ff_name);	for (x = 0; direc.d_name[x]; ++x)		direc.d_name[x] = tolower(direc.d_name[x]);	return &direc;}#endif/********************************************************************/unsigned char **rexpnd(unsigned char *word){	void *dir;	unsigned char **lst = NULL;	struct dirent *de;	dir = opendir(".");	if (dir) {		while ((de = readdir(dir)) != NULL)			if (strcmp(".", de->d_name))				if (rmatch(word, (unsigned char *)de->d_name))					lst = vaadd(lst, vsncpy(NULL, 0, sz((unsigned char *)de->d_name)));		closedir(dir);	}	return lst;}/********************************************************************/unsigned char **rexpnd_users(unsigned char *word){	unsigned char **lst = NULL;	struct passwd *pw;	while((pw=getpwent()))		if (rmatch(word+1, (unsigned char *)pw->pw_name)) {			unsigned char *t = vsncpy(NULL,0,sc("~"));			lst = vaadd(lst, vsncpy(sv(t),sz((unsigned char *)pw->pw_name)));			}	endpwent();	return lst;}/********************************************************************/int chpwd(unsigned char *path){#ifdef __MSDOS__	unsigned char buf[256];	int x;	if (!path)		return 0;	if ((path[0]) && (path[1] == ':')) {		if (_chdrive(path[0] & 0x1F))			return -1;		path += 2;	}	if (!path[0])		return 0;	zcpy(buf, path);	x = zlen(buf);	while (x > 1) {		--x;		if ((buf[x] == '/') || (buf[x] == '\\'))			buf[x] = 0;		else			break;	}	return chdir(buf);#else	if ((!path) || (!path[0]))		return 0;	return chdir((char *)path);#endif}/* The pwd function */unsigned char *pwd(void){	static unsigned char buf[PATH_MAX];	unsigned char	*ret;#ifdef HAVE_GETCWD	ret = (unsigned char *)getcwd((char *)buf, PATH_MAX - 1);#else	ret = (unsigned char *)getwd((char *)buf);#endif	buf[PATH_MAX - 1] = '\0';	return ret;}/* Simplify prefix by using ~ *//* Expects s to have trailing / */unsigned char *simplify_prefix(unsigned char *s){	unsigned char *t = (unsigned char *)getenv("HOME");	unsigned char *n;#ifdef junk	unsigned char *org = pwd();	/* Normalize home */	if (t && !chpwd(t)) {		t = pwd();	} else {		t = 0;	}	chpwd(org);#endif	/* If current directory is prefixed with home directory, use ~... */	if (t && !strncmp((char *)s,(char *)t,zlen(t)) && (!s[zlen(t)] || s[zlen(t)]=='/')) {		n = vsncpy(NULL,0,sc("~/"));		/* If anything more than just the home directory, add it */		if (s[zlen(t)]) {			n = vsncpy(sv(n),s+zlen(t)+1,zlen(s+zlen(t)+1));		}	} else {		n = vsncpy(NULL,0,sz(s));	}	return n;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产精品官网| 91色.com| 99精品国产视频| 日韩三级中文字幕| 亚洲激情图片一区| 国产成人免费视| 日韩欧美专区在线| 亚洲国产婷婷综合在线精品| 丁香网亚洲国际| 欧美大胆一级视频| 亚洲成人高清在线| 91在线播放网址| 国产欧美一区二区精品秋霞影院| 日韩二区在线观看| 欧美在线视频你懂得| 中文字幕一区二区不卡 | 中文字幕 久热精品 视频在线| 亚洲18女电影在线观看| 亚洲精品欧美激情| ww亚洲ww在线观看国产| 亚洲成人激情自拍| 欧美在线观看一区| 一区二区三区精品视频在线| gogo大胆日本视频一区| 国产亚洲成年网址在线观看| 国产专区欧美精品| 精品国产一区久久| 捆绑变态av一区二区三区| 欧美日韩一二区| 亚洲午夜精品17c| 91久久精品一区二区三区| 最新久久zyz资源站| www.久久久久久久久| 国产精品久久久久久久久免费樱桃| 国产在线一区观看| 久久精品视频在线看| 国产馆精品极品| 国产欧美日韩不卡免费| 精品一区二区影视| 久久久国产综合精品女国产盗摄| 精品一区二区三区欧美| 久久亚洲捆绑美女| 成人小视频在线观看| 亚洲天堂av老司机| 欧美偷拍一区二区| 青青草91视频| ww久久中文字幕| 成人免费高清视频| 亚洲另类一区二区| 欧美一级一区二区| 国产一区二区三区四区五区入口 | 在线不卡一区二区| 日韩综合小视频| 日韩精品一区二区三区四区| 国产精品69毛片高清亚洲| 国产精品久久久久久福利一牛影视| 91玉足脚交白嫩脚丫在线播放| 亚洲精品免费一二三区| 91麻豆精品国产91久久久| 久久国产精品99久久人人澡| 国产视频一区在线观看| 91原创在线视频| 琪琪一区二区三区| 国产精品丝袜黑色高跟| 欧美三电影在线| 精品一区二区在线视频| 中文字幕日韩一区二区| 欧美精品色一区二区三区| 国产米奇在线777精品观看| 日韩一区中文字幕| 日韩一级精品视频在线观看| 成人爱爱电影网址| 免费在线看一区| 国产精品久久久爽爽爽麻豆色哟哟| 欧美午夜精品免费| 国产传媒一区在线| 亚洲成人福利片| 国产精品久久久久永久免费观看 | 国产精品一区二区三区网站| 1000部国产精品成人观看| 欧美精品日韩一本| 成人av电影在线观看| 日本伊人精品一区二区三区观看方式| 国产日韩欧美精品在线| 欧美精品久久一区二区三区| 成人精品视频网站| 日本欧美肥老太交大片| 亚洲视频每日更新| 国产午夜久久久久| 在线不卡中文字幕播放| 欧美中文字幕不卡| 成人涩涩免费视频| 国产一区二区不卡| 日日夜夜精品视频天天综合网| 中文字幕一区二区不卡 | 久久久久久久久久看片| 欧美日韩在线免费视频| 91污在线观看| 国产suv精品一区二区883| 美脚の诱脚舐め脚责91| 亚洲高清免费观看| 一色桃子久久精品亚洲| 国产欧美精品一区二区色综合| 欧美一区二区视频观看视频| 色天天综合久久久久综合片| 不卡一区在线观看| 成人综合激情网| 国产专区欧美精品| 久久国产精品一区二区| 免费久久99精品国产| 亚洲成在人线免费| 亚洲一区二区三区四区中文字幕| 亚洲男帅同性gay1069| 国产精品无圣光一区二区| 欧美精品一区二| 精品久久久久久久久久久久久久久 | 日韩欧美国产综合一区| 91精品国产一区二区| 欧美一区二区三区白人| 欧美久久久一区| 欧美精品久久一区| 538prom精品视频线放| 7777精品伊人久久久大香线蕉经典版下载| 一本一本大道香蕉久在线精品| 99re热视频精品| 一本到不卡免费一区二区| 色哟哟国产精品| 欧美性色欧美a在线播放| 欧美伊人久久久久久午夜久久久久| 在线观看91精品国产入口| 欧美在线视频不卡| 91精品在线麻豆| 26uuu国产一区二区三区| 亚洲精品一区二区精华| 国产亚洲美州欧州综合国 | 欧美一区二区三区视频免费| 日韩三级电影网址| 国产午夜三级一区二区三| 自拍偷拍国产亚洲| 偷拍亚洲欧洲综合| 韩国女主播成人在线观看| 成人av资源站| 欧美午夜精品久久久久久超碰| 精品视频在线看| 精品国产乱码久久久久久蜜臀| 国产午夜亚洲精品羞羞网站| 最近日韩中文字幕| 同产精品九九九| 国产成人精品一区二区三区四区 | 在线免费观看日本一区| 69堂亚洲精品首页| 中文在线一区二区 | 欧美丰满少妇xxxxx高潮对白| 欧美成人女星排名| 亚洲欧美日韩久久| 裸体健美xxxx欧美裸体表演| 高清beeg欧美| 4hu四虎永久在线影院成人| 久久久亚洲欧洲日产国码αv| 最新中文字幕一区二区三区| 免费看精品久久片| 99久久国产免费看| 日韩亚洲欧美一区| 亚洲男人天堂一区| 国产精品性做久久久久久| 在线观看www91| 国产日韩欧美精品综合| 日本va欧美va欧美va精品| 97国产一区二区| 精品对白一区国产伦| 亚洲成人精品一区二区| 99久久精品国产精品久久| 久久伊99综合婷婷久久伊| 午夜视频一区二区| 91同城在线观看| 久久久久久久电影| 美日韩一级片在线观看| 欧美午夜精品免费| 亚洲品质自拍视频网站| 国产高清一区日本| 日韩女优制服丝袜电影| 亚洲高清一区二区三区| 成人美女视频在线观看18| 精品日韩在线观看| 日韩不卡免费视频| 欧美婷婷六月丁香综合色| 伊人开心综合网| 97久久精品人人做人人爽| 国产精品免费免费| 国产精品亚洲综合一区在线观看| 欧美大白屁股肥臀xxxxxx| 丝袜美腿亚洲一区| 欧美精品tushy高清| 亚洲国产精品久久久久婷婷884 | 国产一区二区看久久| 日韩丝袜情趣美女图片| 日韩一区精品字幕| 91精品免费在线观看| 亚洲第一在线综合网站| 欧美午夜一区二区三区免费大片|