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

📄 aux.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "common.h"/* expand a path relative to some `.' */extern String *abspath(char *path, char *dot, String *to){	if (*path == '/') {		to = s_append(to, path);	} else {		to = s_append(to, dot);		to = s_append(to, "/");		to = s_append(to, path);	}	return to;}/* return a pointer to the base component of a pathname */extern char *basename(char *path){	char *cp;	cp = strrchr(path, '/');	return cp==0 ? path : cp+1;}/* append a sub-expression match onto a String */extern voidappend_match(Resub *subexp, String *sp, int se){	char *cp, *ep;	cp = subexp[se].sp;	ep = subexp[se].ep;	for (; cp < ep; cp++)		s_putc(sp, *cp);	s_terminate(sp);}/* *  check for shell characters in a String */static char *illegalchars = "\r\n";extern intshellchars(char *cp){	char *sp;	for(sp=illegalchars; *sp; sp++)		if(strchr(cp, *sp))			return 1;	return 0;}static char *specialchars = " ()<>{};=\\'\`^&|";static char *escape = "%%";inthexchar(int x){	x &= 0xf;	if(x < 10)		return '0' + x;	else		return 'A' + x - 10;}/* *  rewrite a string to escape shell characters */extern String*escapespecial(String *s){	String *ns;	char *sp;	for(sp = specialchars; *sp; sp++)		if(strchr(s_to_c(s), *sp))			break;	if(*sp == 0)		return s;	ns = s_new();	for(sp = s_to_c(s); *sp; sp++){		if(strchr(specialchars, *sp)){			s_append(ns, escape);			s_putc(ns, hexchar(*sp>>4));			s_putc(ns, hexchar(*sp));		} else			s_putc(ns, *sp);	}	s_terminate(ns);	s_free(s);	return ns;}uinthex2uint(char x){	if(x >= '0' && x <= '9')		return x - '0';	if(x >= 'A' && x <= 'F')		return (x - 'A') + 10;	if(x >= 'a' && x <= 'f')		return (x - 'a') + 10;	return -512;}/* *  rewrite a string to remove shell characters escapes */extern String*unescapespecial(String *s){	String *ns;	char *sp;	uint c, n;	if(strstr(s_to_c(s), escape) == 0)		return s;	n = strlen(escape);	ns = s_new();	for(sp = s_to_c(s); *sp; sp++){		if(strncmp(sp, escape, n) == 0){			c = (hex2uint(sp[n])<<4) + hex2uint(sp[n+1]);			if(c < 0)				s_putc(ns, *sp);			else {				s_putc(ns, c);				sp += n+2-1;			}		} else			s_putc(ns, *sp);	}	s_terminate(ns);	s_free(s);	return ns;}intreturnable(char *path){	return strcmp(path, "/dev/null") != 0;}

⌨️ 快捷键说明

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