2 * $Id: file.c,v 1.12 2009-10-14 02:24:05 didg Exp $
4 * Copyright (c) 1990,1994 Regents of The University of Michigan.
5 * All Rights Reserved. See COPYRIGHT.
10 #endif /* HAVE_CONFIG_H */
12 #include <atalk/logger.h>
13 #include <sys/param.h>
22 int markline( struct papfile *pf, char **start, int *linelength, int *crlflength )
26 if ( pf->pf_datalen == 0 && ( pf->pf_state & PF_EOF )) {
33 for ( *linelength=0; *linelength < pf->pf_datalen; (*linelength)++) {
34 if (pf->pf_data[*linelength] == '\n' ||
35 pf->pf_data[*linelength] == '\r') {
40 if ( *linelength >= pf->pf_datalen ) {
41 if ( pf->pf_state & PF_EOF ) {
42 append( pf, "\n", 1 );
43 } else if (*linelength < 1024) {
48 p = pf->pf_data + *linelength;
51 while(*crlflength < pf->pf_datalen-*linelength &&
52 (p[*crlflength]=='\r' || p[*crlflength]=='\n')) {
57 /* line is way too long, something fishy is going on, give up */
58 LOG(log_error, logtype_papd, "markline: no crlf in comment, give up" );
62 /* success, return 1 */
66 void morespace(struct papfile *pf, const char *data, int len)
71 if ( pf->pf_data != pf->pf_buf ) { /* pull up */
72 bcopy( pf->pf_data, pf->pf_buf, pf->pf_datalen);
73 pf->pf_data = pf->pf_buf;
76 if ( pf->pf_datalen + len > pf->pf_bufsize ) { /* make more space */
77 nsize = (( pf->pf_bufsize + len ) / PF_MORESPACE +
78 (( pf->pf_bufsize + len ) % PF_MORESPACE != 0 )) * PF_MORESPACE;
80 if (( nbuf = (char *)realloc( pf->pf_buf, nsize )) == NULL ) {
84 if (( nbuf = (char *)malloc( nsize )) == NULL ) {
88 pf->pf_bufsize = nsize;
89 pf->pf_data = nbuf + ( pf->pf_data - pf->pf_buf );
93 bcopy( data, pf->pf_data + pf->pf_datalen, len );
94 pf->pf_datalen += len;
98 void append(struct papfile *pf, const char *data, int len)
100 if ((pf->pf_data + pf->pf_datalen + len) >
101 (pf->pf_buf + pf->pf_bufsize)) {
102 morespace(pf, data, len);
104 memcpy(pf->pf_data + pf->pf_datalen, data, len);
105 pf->pf_datalen += len;
110 void spoolerror(struct papfile *out, char *str)
112 char *pserr1 = "%%[ Error: ";
113 char *pserr2 = " ]%%\n";
116 str = "Spooler error.";
119 append( out, pserr1, strlen( pserr1 ));
120 append( out, str, strlen( str ));
121 append( out, pserr2, strlen( pserr2 ));