⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 path.c

📁 代码检索工具GLOBAL源码。可用来浏览分析LINUX源码。
💻 C
字号:
/* * Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2004 *	Tama Communications Corporation * #ifdef __DJGPP__ * Contributed by Jason Hood <jadoxa@yahoo.com.au>, 2001. # #endif * * This file is part of GNU GLOBAL. * * GNU GLOBAL is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU GLOBAL is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA. */#ifdef HAVE_CONFIG_H#include <config.h>#endif#ifdef HAVE_STRING_H#include <string.h>#else#include <strings.h>#endif#ifdef __DJGPP__#include <fcntl.h>			/* for _USE_LFN */#endif#include "gparam.h"#include "path.h"#include "strlimcpy.h"/* * isabspath: whether absolute path or not * *	i)	path	path *	r)		1: absolute, 0: not absolute */intisabspath(p)	const char *p;{	if (p[0] == '/')		return 1;#if defined(_WIN32) || defined(__DJGPP__)	if (p[0] == '\\')		return 1;	if (isdrivechar(p[0]) && p[1] == ':' && (p[2] == '\\' || p[2] == '/'))		return 1;#endif	return 0;}/* * canonpath: make canonical path name. * *	io)	path	path *	r)		path * * Note: canonpath rewrite argument buffer. */char *canonpath(path)	char *path;{#ifdef __DJGPP__	char *p;	if (_USE_LFN) {		char name[260], sfn[13];		char *base;		/*		 * Ensure we're using a complete long name, not a mixture		 * of long and short.		 */		_truename(path, path);		/*		 * _truename will successfully convert the path of a non-		 * existant file, but it's probably still a mixture of long and		 * short components - convert the path separately.		 */		if (access(path, F_OK) != 0) {			base = basename(path);			strcpy(name, base);			*base = '\0';			_truename(path, path);			strcat(path, name);		}		/*		 * Convert the case of 8.3 names, as other djgpp functions do.		 */		if (!_preserve_fncase()) {			for (p = path+3, base = p-1; *base; p++) {				if (*p == '\\' || *p == '\0') {					memcpy(name, base+1, p-base-1);					name[p-base-1] = '\0';					if (!strcmp(_lfn_gen_short_fname(name, sfn), name)) {						while (++base < p)							if (*base >= 'A' && *base <= 'Z')								*base += 'a' - 'A';					} else					   base = p;				}			}		}	}	/*	 * Lowercase the drive letter and convert to slashes.	 */	path[0] = tolower(path[0]);	for (p = path+2; *p; ++p)		if (*p == '\\')			*p = '/';#else#ifdef _WIN32	char *p, *s;	p = path;	/*	 * Change \ to / in a path (for DOS/Windows paths)	 */	while ((p = strchr(p, '\\')) != NULL)		*p = '/';#ifdef __CYGWIN__	/*	 * On NT with CYGWIN, getcwd can return something like	 * "//c/tmp", which isn't usable. We change that to "c:/tmp".	 */	p = path;	if (p[0] == '/' && p[1] == '/' && isdrivechar(p[2]) && p[3] == '/') {		s = &p[2];		/* point drive char */		*p++ = *s++;		*p++ = ':';		while (*p++ = *s++)			;	}#endif /* __CYGWIN__ */#endif /* _WIN32 */#endif /* __DJGPP__ */	return path;}#if (defined(_WIN32) && !defined(__CYGWIN__)) || defined(__DJGPP__)/* * realpath: get the complete path */char *realpath(in_path, out_path)	const char *in_path;	char *out_path;{#ifdef __DJGPP__	/*	 * I don't use _fixpath or _truename in LFN because neither guarantee	 * a complete long name. This is mainly DOS's fault, since the cwd can	 * be a mixture of long and short components.	 */	if (_USE_LFN) {		strlimcpy(out_path, in_path, MAXPATHLEN);		canonpath(out_path);	} else		_fixpath(in_path, out_path);#else	_fullpath(out_path, in_path, MAXPATHLEN);	canonpath(out_path);#endif	return out_path;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -