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

📄 local.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "common.h"#include "send.h"static voidmboxfile(dest *dp, String *user, String *path, char *file){	char *cp;	mboxpath(s_to_c(user), s_to_c(dp->addr), path, 0);	cp = strrchr(s_to_c(path), '/');	if(cp)		path->ptr = cp+1;	else		path->ptr = path->base;	s_append(path, file);}/* *  Check forwarding requests */extern dest*expand_local(dest *dp){	Biobuf *fp;	String *file, *line, *s;	dest *rv;	int forwardok;	char *user;	/* short circuit obvious security problems */	if(strstr(s_to_c(dp->addr), "/../")){		dp->status = d_unknown;		return 0;	}	/* isolate user's name if part of a path */	user = strrchr(s_to_c(dp->addr), '!');	if(user)		user++;	else		user = s_to_c(dp->addr);	/* if no replacement string, plug in user's name */	if(dp->repl1 == 0){		dp->repl1 = s_new();		mboxname(user, dp->repl1);	}	s = unescapespecial(s_clone(dp->repl1));	/*	 *  if this is the descendant of a `forward' file, don't	 *  look for a forward.	 */	forwardok = 1;	for(rv = dp->parent; rv; rv = rv->parent)		if(rv->status == d_cat){			forwardok = 0;			break;		}	file = s_new();	if(forwardok){		/*		 *  look for `forward' file for forwarding address(es)		 */		mboxfile(dp, s, file, "forward");		fp = sysopen(s_to_c(file), "r", 0);		if (fp != 0) {			line = s_new();			for(;;){				if(s_read_line(fp, line) == nil)					break;				if(*(line->ptr - 1) != '\n')					break;				if(*(line->ptr - 2) == '\\')					*(line->ptr-2) = ' ';				*(line->ptr-1) = ' ';			}			sysclose(fp);			if(debug)				fprint(2, "forward = %s\n", s_to_c(line));			rv = s_to_dest(s_restart(line), dp);			s_free(line);			if(rv){				s_free(file);				s_free(s);				return rv;			}		}	}	/*	 *  look for a 'pipe' file.  This won't work if there are	 *  special characters in the account name since the file	 *  name passes through a shell.  tdb.	 */	mboxfile(dp, dp->repl1, s_reset(file), "pipeto");	if(sysexist(s_to_c(file))){		if(debug)			fprint(2, "found a pipeto file\n");		dp->status = d_pipeto;		line = s_new();		s_append(line, "upasname='");		s_append(line, user);		s_append(line, "' ");		s_append(line, s_to_c(file));		s_append(line, " ");		s_append(line, s_to_c(dp->addr));		s_append(line, " ");		s_append(line, s_to_c(dp->repl1));		s_free(dp->repl1);		dp->repl1 = line;		s_free(file);		s_free(s);		return dp;	}	/*	 *  see if the mailbox directory exists	 */	mboxfile(dp, s, s_reset(file), ".");	if(sysexist(s_to_c(file)))		dp->status = d_cat;	else		dp->status = d_unknown;	s_free(file);	s_free(s);	return 0;}

⌨️ 快捷键说明

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