#include <sys/param.h> /* for MAXPATHLEN */
# include "../hdr/defines.h"
static char Sccsid
[] = "@(#)get.c 4.8 %G%";
char *ilist
, *elist
, *lfile
;
long cutoff
= 0X7FFFFFFFL
; /* max positive long */
char Gfile
[MAXNAMLEN
+ 3];
char Mod
[MAXNAMLEN
+ 3]; /* should be as large as Gfile? */
Fflags
= FTLEXIT
| FTLMSG
| FTLCLN
;
if(argv
[i
][0] == '-' && (c
=argv
[i
][1])) {
chksid(sid_ab(p
,&sid
),&sid
);
fatal("bad date/time (cm5)");
fatal("unknown key letter (cm1)");
"value after %c arg (cm8)",c
));
fatal("key letter twice (cm2)");
fatal("missing file arg (cm3)");
fatal("e not allowed with m (ge3)");
if (HADE
|| HADI
|| HADX
)
extern char had_dir
, had_standinp
;
gpkt
.p_ixuser
= (HADI
| HADX
);
gpkt
.p_reqsid
.s_rel
= sid
.s_rel
;
gpkt
.p_reqsid
.s_lev
= sid
.s_lev
;
gpkt
.p_reqsid
.s_br
= sid
.s_br
;
gpkt
.p_reqsid
.s_seq
= sid
.s_seq
;
gpkt
.p_verbose
= verbosity
;
gpkt
.p_stdout
= (HADP
? stderr
: stdout
);
copy(auxf(gpkt
.p_file
,'g'),Gfile
);
if (gpkt
.p_verbose
&& (num_files
> 1 || had_dir
|| had_standinp
))
fprintf(gpkt
.p_stdout
,"\n%s:\n",gpkt
.p_file
);
if (dodelt(&gpkt
,&stats
,0,0) == 0)
if ((ser
= Ser
) > maxser(&gpkt
))
fatal("serial number too large (ge19)");
bcopy(&gpkt
.p_idel
[ser
].i_sid
, &gpkt
.p_gotsid
, sizeof(sid
));
if (HADR
&& sid
.s_rel
!= gpkt
.p_gotsid
.s_rel
) {
bzero(&gpkt
.p_reqsid
, sizeof(gpkt
.p_reqsid
));
gpkt
.p_reqsid
.s_rel
= sid
.s_rel
;
bcopy(&gpkt
.p_gotsid
, &gpkt
.p_reqsid
, sizeof(sid
));
doie(&gpkt
,ilist
,elist
,0);
if (!(Type
= Sflags
[TYPEFLAG
- 'a']))
if (!(HADP
|| HADG
) && writable(Gfile
))
fatal(sprintf(Error
,"writable `%s' exists (ge4)",Gfile
));
sid_ba(&gpkt
.p_gotsid
,str
);
fprintf(gpkt
.p_stdout
,"%s\n",str
);
bcopy(&gpkt
.p_gotsid
,&gpkt
.p_reqsid
,
newsid(&gpkt
,Sflags
[BRCHFLAG
- 'a'] && HADB
);
wrtpfile(&gpkt
,ilist
,elist
);
flushto(&gpkt
,EUSERTXT
,1);
gpkt
.p_gout
= xfcreat(Gfile
,HADK
? 0666 : 0444);
fprintf(gpkt
.p_gout
,"%s\t",Mod
);
sid_ba(&gpkt
.p_inssid
,str
);
fprintf(gpkt
.p_gout
,"%s\t",str
);
if (gpkt
.p_gout
&& gpkt
.p_gout
!= stdout
)
fprintf(gpkt
.p_stdout
,"%u lines\n",gpkt
.p_glnno
);
if (Sflags
[IDFLAG
- 'a'])
fatal("no id keywords (cm6)");
fprintf(stderr
,"No id keywords (cm7)\n");
return (stat(fn
, &s
) >= 0 && (s
.st_mode
& 0222) != 0);
register struct packet
*pkt
;
if (pkt
->p_reqsid
.s_br
== 0) {
pkt
->p_reqsid
.s_lev
+= 1;
if (sidtoser(&pkt
->p_reqsid
,pkt
) ||
pkt
->p_maxr
> pkt
->p_reqsid
.s_rel
|| branch
) {
pkt
->p_reqsid
.s_rel
= pkt
->p_gotsid
.s_rel
;
pkt
->p_reqsid
.s_lev
= pkt
->p_gotsid
.s_lev
;
pkt
->p_reqsid
.s_br
= pkt
->p_gotsid
.s_br
+ 1;
else if (pkt
->p_reqsid
.s_seq
== 0 && !branch
)
pkt
->p_reqsid
.s_seq
= pkt
->p_gotsid
.s_seq
+ 1;
pkt
->p_reqsid
.s_seq
+= 1;
if (branch
|| sidtoser(&pkt
->p_reqsid
,pkt
)) {
while (sidtoser(&pkt
->p_reqsid
,pkt
))
if (sidtoser(&pkt
->p_reqsid
,pkt
))
fatal("internal error in newsid()");
register struct apply
*ap
;
fprintf(pkt
->p_stdout
,"%s\n",str
);
condset(ap
,APPLY
,INCLUSER
);
condset(ap
,NOAPPLY
,EXCLUSER
);
fatal(sprintf(Error
,"%s already included (ge9)",str
));
fatal(sprintf(Error
,"%s already excluded (ge10)",str
));
fatal("internal error in get/enter() (ge11)");
register struct packet
*pkt
;
in
= xfopen(pkt
->p_file
,0);
out
= xfcreat(auxf(pkt
->p_file
,'l'),0444);
fgets(line
,sizeof(line
),in
);
while (fgets(line
,sizeof(line
),in
) != NULL
&& line
[0] == CTLCHAR
&& line
[1] == STATS
) {
fgets(line
,sizeof(line
),in
);
reason
= pkt
->p_apply
[dt
.d_serial
].a_reason
;
if (pkt
->p_apply
[dt
.d_serial
].a_code
== APPLY
) {
switch (reason
& (INCL
| EXCL
| CUTOFF
)) {
date_ba(&dt
.d_datetime
,str
);
fprintf(out
,"%s %s\n",str
,dt
.d_pgmr
);
while ((n
= fgets(line
,sizeof(line
),in
)) != NULL
)
fprintf(out
,"\t%s",&line
[3]);
if (n
== NULL
|| line
[0] != CTLCHAR
)
char Olddir
[MAXPATHLEN
+1];
char Pname
[MAXPATHLEN
+1];
register struct packet
*pkt
;
date_ba(&Timenow
,Curdate
);
fatal("getwd failed (ge20)");
fatal("cannot change directory (ge22)");
fatal("getwd failed (ge21)");
fatal("cannot change directory (ge23)");
for (n
= maxser(pkt
); n
; n
--)
if (pkt
->p_apply
[n
].a_code
== APPLY
)
date_ba(&pkt
->p_idel
[n
].i_datetime
,Chgdate
);
makgdate(Chgdate
,Gchgdate
);
makqdate(Gchgdate
,Qchgdate
);
sid_ba(&pkt
->p_gotsid
,Sid
);
if (p
= Sflags
[MODFLAG
- 'a'])
register char *old
, *new;
if ((*new = old
[3]) != '0')
if ((*new = old
[6]) != '0')
register char *old
, *new;
static char *months
[12] =
{ "January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December" };
strcpy(new, months
[atoi(old
)-1]);
*new++ = '1'; *new++ = '9'; /* works for this century at least */
static char Zkeywd
[5] = "@(#)";
register struct packet
*pkt
;
static char tline
[BUFSIZ
];
for(lp
=line
; *lp
!= 0; lp
++) {
if(lp
[0] == '%' && lp
[1] != 0 && lp
[2] == '%') {
sprintf(str
,"%u",pkt
->p_gotsid
.s_rel
);
sprintf(str
,"%u",pkt
->p_gotsid
.s_lev
);
sprintf(str
,"%u",pkt
->p_gotsid
.s_br
);
sprintf(str
,"%u",pkt
->p_gotsid
.s_seq
);
tp
= trans(tp
,(sname(pkt
->p_file
)));
tp
= trans(tp
,pkt
->p_file
);
sprintf(str
,"%u",pkt
->p_glnno
);
unlockit(auxf(gpkt
.p_file
,'z'),getpid());
register struct packet
*pkt
;
char line
[64], str1
[32], str2
[32];
if (lockit(auxf(pkt
->p_file
,'z'),2,getpid()))
fatal("cannot create lock file (cm4)");
if (exists(p
= auxf(pkt
->p_file
,'p'))) {
while (fgets(line
,sizeof(line
),in
) != NULL
) {
if ((pf
.pf_gsid
.s_rel
== pkt
->p_gotsid
.s_rel
&&
pf
.pf_gsid
.s_lev
== pkt
->p_gotsid
.s_lev
&&
pf
.pf_gsid
.s_br
== pkt
->p_gotsid
.s_br
&&
pf
.pf_gsid
.s_seq
== pkt
->p_gotsid
.s_seq
) ||
(pf
.pf_nsid
.s_rel
== pkt
->p_reqsid
.s_rel
&&
pf
.pf_nsid
.s_lev
== pkt
->p_reqsid
.s_lev
&&
pf
.pf_nsid
.s_br
== pkt
->p_reqsid
.s_br
&&
pf
.pf_nsid
.s_seq
== pkt
->p_reqsid
.s_seq
)) {
fatal(sprintf(Error
,"being edited: `%s' (ge17)",
if (!equal(pf
.pf_user
,user
))
fprintf(stderr
,"WARNING: being edited: `%s' (ge18)\n",line
);
out
= fdopen(dup(fd
),"w");
sid_ba(&pkt
->p_gotsid
,str1
);
sid_ba(&pkt
->p_reqsid
,str2
);
fprintf(out
,"%s %s %s %s",str1
,str2
,user
,line
);
fprintf(out
," -i%s",inc
);
fprintf(out
," -x%s",exc
);
fprintf(pkt
->p_stdout
,"new delta %s\n",str2
);
unlockit(auxf(pkt
->p_file
,'z'),getpid());
register struct packet
*pkt
;
register struct idel
*rdp
;
if (pkt
->p_reqsid
.s_rel
== 0) {
if (p
= Sflags
[DEFTFLAG
- 'a'])
chksid(sid_ab(p
, &pkt
->p_reqsid
), &pkt
->p_reqsid
);
pkt
->p_reqsid
.s_rel
= MAX
;
if (pkt
->p_reqsid
.s_lev
== 0) {
for (n
= maxser(pkt
); n
; n
--) {
if ((rdp
->i_sid
.s_br
== 0 || HADT
) &&
pkt
->p_reqsid
.s_rel
>= rdp
->i_sid
.s_rel
&&
rdp
->i_sid
.s_rel
> pkt
->p_gotsid
.s_rel
) {
pkt
->p_gotsid
.s_rel
= rdp
->i_sid
.s_rel
;
else if (pkt
->p_reqsid
.s_br
&& pkt
->p_reqsid
.s_seq
== 0) {
for (n
= maxser(pkt
); n
; n
--) {
if (rdp
->i_sid
.s_rel
== pkt
->p_reqsid
.s_rel
&&
rdp
->i_sid
.s_lev
== pkt
->p_reqsid
.s_lev
&&
rdp
->i_sid
.s_br
== pkt
->p_reqsid
.s_br
)
ser
= sidtoser(&pkt
->p_reqsid
,pkt
);
fatal("nonexistent sid (ge5)");
bcopy(&rdp
->i_sid
, &pkt
->p_gotsid
, sizeof(pkt
->p_gotsid
));
if (def
|| (pkt
->p_reqsid
.s_lev
== 0 && pkt
->p_reqsid
.s_rel
== pkt
->p_gotsid
.s_rel
))
bcopy(&pkt
->p_gotsid
, &pkt
->p_reqsid
, sizeof(pkt
->p_gotsid
));
/* Null routine to satisfy external reference from dodelt() */