# include "../hdr/defines.h"
int num_files
, had_ffile
;
int F_Opened
, Opened
, Domrs
, First
;
char *Comments
, *Mrs
, *ffile
;
char Cstr
[BUFSIZ
], Mstr
[BUFSIZ
], Line
[BUFSIZ
], had
[26];
static char ifde
[] "initial file does not exists";
Fflags
= FTLEXIT
| FTLMSG
| FTLCLN
;
for (i
= 1; i
< argc
; i
++)
if (argv
[i
][0] == '-' && (c
= argv
[i
][1])) {
fatal("unknown key letter (cm1)");
fatal("key letter twice (cm2)");
fatal("missing file arg (cm3)");
Reset flags for 'fatal' so that it will return to 'main'
Invoke 'cmt' for each file argument.
for (i
= 1; i
< argc
; i
++)
static char s_warn
[] "WARNING: MR flag is set; `%s' should contain both MR line and comment line\n";
static char ns_warn
[] "WARNING: MR flag is not set; `%s' should only contain comment line\n";
extern char had_dir
, had_standinp
;
extern char Pgmr
[SZLNAM
];
int fowner
, downer
, user
;
Set up to return to caller ('main') from 'fatal'.
sinit(&gpkt
,file
,1); /* init packet and open file */
if (lockit(auxf(gpkt
.p_file
,'z'),2,getpid()))
fatal("cannot create lock file (cm4)");
if (num_files
> 1 || had_dir
|| had_standinp
)
printf("\n%s:\n",gpkt
.p_file
);
do_delt(&gpkt
); /* read delta table for First time */
doflags(&gpkt
); /* get flags (see if v flag is set) */
Check that user is either owner of file or
directory, or is one who made the initial delta
fstat(fileno(gpkt
.p_iop
),&Statbuf
);
fowner
= Statbuf
.st_uid
& 0377;
copy(gpkt
.p_file
,line
); /* temporary for dname() */
if (stat(dname(line
),&Statbuf
))
else downer
= Statbuf
.st_uid
& 0377;
if (user
!= fowner
|| user
!= downer
)
if (!equal(Pgmr
,logname()))
"you are neither owner nor '%s' (rc4)",Pgmr
));
if ((HADF
&& had_ffile
)) {
if (Sflags
[VALFLAG
- 'a'])
fprintf(stderr
,s_warn
,ffile
);
else fprintf(stderr
,ns_warn
,ffile
);
flushto(&gpkt
,EUSERTXT
,1);
gpkt
.p_chkeof
= 1; /* indicate that EOF is okay */
while (getline(&gpkt
)) /* this will read body checking for cor */
gpkt
.p_upd
= 1; /* x-file is to be used */
gpkt
.p_wrttn
= 1; /* prevent printing of header line */
getline(&gpkt
); /* skip over old header record */
putline(&gpkt
,sprintf(Line
,"%c%c00000\n",CTLCHAR
,HEAD
));
do_delt(&gpkt
); /* read delta table second time */
flushto(&gpkt
,EUSERNAM
,0);
flushto(&gpkt
,EUSERTXT
,0);
flushline(&gpkt
,0); /* flush buffer, fix header, and close */
rename(auxf(gpkt
.p_file
,'x'),gpkt
.p_file
);
unlockit(auxf(gpkt
.p_file
,'z'),getpid());
static char cle
[] "comment line for initial delta already exists";
register struct packet
*pkt
;
while(getstats(pkt
,&stats
)) {
if(getadel(pkt
,&dt
) != BDELTAB
)
if(dt
.d_type
== 'D' && dt
.d_pred
== 0) {
while((n
= getline(pkt
)) != NULL
)
if (pkt
->p_line
[0] != CTLCHAR
)
if (n
==NULL
|| pkt
->p_line
[0] != CTLCHAR
)
register struct packet
*pkt
;
register struct deltab
*dt
;
if (getline(pkt
) == NULL
)
return(del_ab(pkt
->p_line
,dt
,pkt
));
register struct packet
*pkt
;
register struct stats
*statp
;
if (getline(pkt
) == NULL
|| *p
++ != CTLCHAR
|| *p
++ != STATS
)
p
= satoi(p
,&statp
->s_ins
);
p
= satoi(++p
,&statp
->s_del
);
satoi(++p
,&statp
->s_unc
);
unlockit(auxf(gpkt
.p_file
,'z'),getpid());
if (exists(auxf(gpkt
.p_file
,'x')))
remove(auxf(gpkt
.p_file
,'x')); /* remove x-file */
iop
= F_Opened
= Opened
= 0;
if (!HADF
&& !had_ffile
) {
else if (HADF
&& had_ffile
) {
else if (HADF
&& !had_ffile
)
if ((p
= Sflags
[VALFLAG
- 'a'])) {
Mrs
= getinput(" ",Mstr
);
if (*p
&& valmrs(&gpkt
,p
))
fatal("invalid MRs (de9)");
else putline(&gpkt
,sprintf(Line
,CTLSTR
,CTLCHAR
,MRNUM
));
Comments
= getinput(sprintf(Line
,"\n%c%c ",CTLCHAR
,COMMENTS
),
putline(&gpkt
,sprintf(str
,"%c%c ",CTLCHAR
,COMMENTS
));
else putline(&gpkt
,sprintf(Line
,CTLSTR
,CTLCHAR
,COMMENTS
));
sz
= sizeof(line
) - size(repstr
);
while (!done
&& fgets(line
,sz
,iop
) != NULL
) {
fatal("line too long (co18)");
if ((size(line
) + size(result
)) > RESPSIZE
)
fatal("response too long (co19)");
for (argv
= &Varg
[VSTART
]; *argv
; argv
++)
putline(pkt
,sprintf(str
,"%c%c %s\n",CTLCHAR
,MRNUM
,*argv
));