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 + -
显示快捷键?