59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
/* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
|
|
/* Copyright (c) 1988 AT&T */
|
|
/* All Rights Reserved */
|
|
|
|
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
|
|
/* UNIX System Laboratories, Inc. */
|
|
/* The copyright notice above does not evidence any */
|
|
/* actual or intended publication of such source code. */
|
|
|
|
/* #ident "@(#)sccs:lib/comobj/getline.c 6.3" */
|
|
#ident "$Revision: 1.6 $"
|
|
#include "../../hdr/defines.h"
|
|
|
|
/*
|
|
Routine to read a line into the packet. The main reason for
|
|
it is to make sure that pkt->p_wrttn gets turned off,
|
|
and to increment pkt->p_slnno.
|
|
*/
|
|
|
|
char *
|
|
getline(pkt)
|
|
register struct packet *pkt;
|
|
{
|
|
char *n;
|
|
register char *p;
|
|
int fatal();
|
|
void putline();
|
|
|
|
if(pkt->p_wrttn==0)
|
|
putline(pkt,(char *) 0);
|
|
if ((n = fgets(pkt->p_line,sizeof(pkt->p_line),pkt->p_iop)) != NULL) {
|
|
pkt->p_slnno++;
|
|
pkt->p_wrttn = 0;
|
|
for (p = pkt->p_line; *p; )
|
|
pkt->p_chash += *p++;
|
|
}
|
|
else {
|
|
if (!pkt->p_reopen) {
|
|
(void) fclose(pkt->p_iop);
|
|
pkt->p_iop = 0;
|
|
}
|
|
if (!pkt->p_chkeof)
|
|
fatal("premature eof (co5)");
|
|
if (pkt->do_chksum && (pkt->p_chash ^ pkt->p_ihash)&0xFFFF)
|
|
fatal("corrupted file (co6)");
|
|
if (pkt->p_reopen) {
|
|
fseek(pkt->p_iop,0L,0);
|
|
pkt->p_reopen = 0;
|
|
pkt->p_slnno = 0;
|
|
pkt->p_ihash = 0;
|
|
pkt->p_chash = 0;
|
|
pkt->p_nhash = 0;
|
|
pkt->p_keep = 0;
|
|
pkt->do_chksum = 0;
|
|
}
|
|
}
|
|
return(n);
|
|
}
|