permiss.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 154 行

C
154
字号
#ifndef lintstatic	char	*sccsid = "@(#)permiss.c	4.1	(ULTRIX)	7/17/90";#endif lint# include	"../hdr/defines.h"finduser(pkt)register struct packet *pkt;{	register char *p;	char *user, *logname();	char *strend(), *getline();	char groupid[6];	int none;	none = 1;	user = logname();	sprintf(groupid,"%d",getgid());	while ((p = getline(pkt)) != NULL && *p != CTLCHAR) {		none = 0;		repl(p,'\n','\0');	/* this is done for equal test below */		if (!pkt->p_user)			if (equal(user,p) || equal(groupid,p))				pkt->p_user = 1;		*(strend(p)) = '\n';	/* repl \0 end of line w/ \n again */	}	if (none)		pkt->p_user = 1;	if (p == NULL || p[1] != EUSERNAM)		fmterr(pkt);}char	*Sflags[NFLAGS];doflags(pkt)struct packet *pkt;{	register char *p;	register int k;	char *getline(), *fmalloc();	for (k = 0; k < NFLAGS; k++)		Sflags[k] = 0;	while ((p = getline(pkt)) != NULL && *p++ == CTLCHAR && *p++ == FLAG) {		NONBLANK(p);		k = *p++ - 'a';		NONBLANK(p);		Sflags[k] = fmalloc(size(p));		copy(p,Sflags[k]);		for (p = Sflags[k]; *p++ != '\n'; )			;		*--p = 0;	}}permiss(pkt)register struct packet *pkt;{	extern char *Sflags[];	register char *p;	register int n;	if (!pkt->p_user)		fatal("not authorized to make deltas (co14)");	if (p = Sflags[FLORFLAG - 'a']) {		if (((unsigned)pkt->p_reqsid.s_rel) < (n = patoi(p))) {			sprintf(Error,"release %u < %u (floor) (co15)",				pkt->p_reqsid.s_rel,n);			fatal(Error);		}	}	if (p = Sflags[CEILFLAG - 'a']) {		if (((unsigned)pkt->p_reqsid.s_rel) > (n = patoi(p))) {			sprintf(Error,"release %u > %u (ceiling) (co16)",				pkt->p_reqsid.s_rel,n);			fatal(Error);		}	}	/*	check to see if the file or any particular release is	locked against editing. (Only if the `l' flag is set)	*/	if ((p = Sflags[LOCKFLAG - 'a']))		ck_lock(p,pkt);}char	l_str[]    =    "SCCS file locked against editing (co23)";ck_lock(p,pkt)register char *p;register struct packet *pkt;{	int l_rel;	int locked;	locked = 0;	if (*p == 'a')		locked++;	else while(*p) {		p = satoi(p,&l_rel);		++p;		if (l_rel == pkt->p_gotsid.s_rel || l_rel == pkt->p_reqsid.s_rel) {			locked++;			sprintf(l_str,"release `%d' locked against editing (co23)",				l_rel);			break;		}	}	if (locked)		fatal(l_str);}ck_lockget(p,pkt)register char *p;register struct packet *pkt;{	int l_rel;	int locked;	locked = 0;	if (*p == 'a'){		printf("ck_lockget\n");		locked++;	}	else while(*p) {		p = satoi(p,&l_rel);		++p;		if (l_rel == pkt->p_gotsid.s_rel || l_rel == pkt->p_reqsid.s_rel) {			locked++;			sprintf(l_str,"release `%d' is get locked ",l_rel);			break;		}	}	if (locked) {/* We are doing things that fatal would do but we are having to do it   this way to allow make to continue on an sccs get SCCS when a file   is locked for getting at the level we are getting   */		Fflags = 0;		Fvalue = 0;		fprintf(stderr,"%s\n",l_str);		clean_up(0);		return(1);	}	return(0);}

⌨️ 快捷键说明

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