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

📄 optpath.c

📁 早期freebsd实现
💻 C
字号:
/* * Copyright (c) 1983, 1985, 1991 Peter J. Nicklin. * Copyright (c) 1991 Version Technology. * All Rights Reserved. * * $License: VT.1.1 $ * Redistribution and use in source and binary forms,  with or without * modification,  are permitted provided that the following conditions * are met:  (1) Redistributions of source code must retain the  above * copyright  notice,  this  list  of  conditions  and  the  following * disclaimer.  (2) Redistributions in binary form must reproduce  the * above  copyright notice,  this list of conditions and the following * disclaimer in the  documentation  and/or other  materials  provided * with  the  distribution.  (3) All advertising materials  mentioning * features or  use  of  this  software  must  display  the  following * acknowledgement:  ``This  product  includes  software  developed by * Version Technology.''  Neither the name of Version  Technology  nor * the  name  of  Peter J. Nicklin  may  be used to endorse or promote * products derived from this software without specific prior  written * permission. * * THIS SOFTWARE IS PROVIDED BY VERSION TECHNOLOGY ``AS IS''  AND  ANY * EXPRESS OR IMPLIED WARRANTIES,  INCLUDING,  BUT NOT LIMITED TO, THE * IMPLIED  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL  VERSION  TECHNOLOGY  BE * LIABLE  FOR ANY DIRECT,  INDIRECT,  INCIDENTAL, SPECIAL, EXEMPLARY, * OR  CONSEQUENTIAL DAMAGES   (INCLUDING,   BUT   NOT   LIMITED   TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF  LIABILITY,  WHETHER  IN  CONTRACT,  STRICT LIABILITY,  OR  TORT * (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING  IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE,  EVEN  IF  ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * Report problems and direct questions to nicklin@netcom.com * * $Header: optpath.c,v 4.4 91/11/25 19:44:59 nicklin Exp $ * * Author: Peter J. Nicklin *//* * optpath() condenses a pathname by eliminating adjacent separator * characters, and current and parent directory names. If optpath() * encounters a parent directory, it backtracks to eliminate the * previous directory. If the beginning of the pathname is reached * during backtracking, then if the pathname is absolute, the parent * directory is purged, otherwise it is shifted to the beginning of * pathname. Special care is taken not to clobber a shifted parent * by using a guard pointer. Returns pathname. * * Note 1) For Apollo Domain/OS, adjacent separator characters are * allowed as the first two characters of the path name. This correctly * passes through paths containing nodenames. (eg. //nodename/myusr/include) */#include "path.h"#define absolute_path	(*pathname == _RDIRC)char *optpath(pathname)	register char *pathname;	/* pathname to be optimized */{	register char *bp;		/* back pathname pointer */	register char *fp;		/* forward pathname pointer */	register char *up;		/* pathname update guard pointer */	bp = fp = up = pathname;	/* elimination of initial "./" causes no harmful side-effects */	if (fp[0] == _CDIRC && fp[1] == _PSC) fp += 2;#ifdef _HasNetRoot	else if (fp[0] == _PSC)		*bp++ = *fp++;	/* allow initial "//": see note 1 */#endif	while (*fp != '\0')		if (fp[0] == _PSC)			if (fp[1] == _PSC || fp[1] == '\0')				fp += 1;	/* "//" or trailing `/' */			else if (fp[1]==_CDIRC && (fp[2]==_PSC || fp[2]=='\0'))				fp += 2;	/* `.' */			else	{				*bp++ = *fp++;				}		else	{			*bp++ = *fp++;			}	if (bp == pathname && *pathname != '\0')		*bp++ = (absolute_path) ? _RDIRC : _CDIRC;	*bp = '\0';	return(pathname);}

⌨️ 快捷键说明

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