1 # include "../hdr/defines.h" 2 3 SCCSID(@(#)sinit 2.1); 4 /* 5 Does initialization for sccs files and packet. 6 */ 7 8 sinit(pkt,file,openflag) 9 register struct packet *pkt; 10 register char *file; 11 { 12 extern char *satoi(); 13 register char *p; 14 15 bzero(pkt,sizeof(*pkt)); 16 if (size(file) > FILESIZE) 17 fatal("too long (co7)"); 18 if (!sccsfile(file)) 19 fatal("not an SCCS file (co1)"); 20 copy(file,pkt->p_file); 21 pkt->p_wrttn = 1; 22 pkt->do_chksum = 1; /* turn on checksum check for getline */ 23 if (openflag) { 24 pkt->p_iop = xfopen(file,0); 25 setbuf(pkt->p_iop,pkt->p_buf); 26 fstat(fileno(pkt->p_iop),&Statbuf); 27 if (Statbuf.st_nlink > 1) 28 fatal("more than one link (co3)"); 29 if ((p = getline(pkt)) == NULL || *p++ != CTLCHAR || *p++ != HEAD) { 30 fclose(pkt->p_iop); 31 fmterr(pkt); 32 } 33 p = satoi(p,&pkt->p_ihash); 34 if (*p != '\n') 35 fmterr(pkt); 36 } 37 pkt->p_chash = 0; 38 } 39