/*
- * "$Id: log.c,v 1.19.2.13 2003/07/19 21:57:49 mike Exp $"
+ * "$Id: log.c,v 1.19.2.14 2003/07/25 16:00:23 mike Exp $"
*
* Log file routines for the Common UNIX Printing System (CUPS).
*
...) /* I - Additional args as needed */
{
int len; /* Length of message */
+ char *ptr; /* Pointer to message */
va_list ap; /* Argument pointer */
static const char levels[] = /* Log levels... */
{
#endif /* HAVE_VSYSLOG */
static int linesize = 0; /* Size of line for output file */
static char *line = NULL; /* Line for output file */
+ static char sigbuf[1024]; /* Buffer for signal handlers */
/*
* Then the log message...
*/
- va_start(ap, message);
- len = vsnprintf(line, linesize, message, ap);
- va_end(ap);
-
- if (len >= linesize && !SignalCount)
+ if (SignalCount)
{
- len ++;
+ /*
+ * Processing a signal so use the static buffer...
+ */
- if (len < 8192)
- len = 8192;
- else if (len > 65536)
- len = 65536;
+ va_start(ap, message);
+ len = vsnprintf(sigbuf, sizeof(sigbuf), message, ap);
+ va_end(ap);
- if (!linesize)
- line = malloc(len);
- else
- line = realloc(line, len);
+ ptr = sigbuf;
- if (line)
- linesize = len;
- else
+ if (len >= sizeof(sigbuf))
+ len = sizeof(sigbuf) - 1;
+ }
+ else
+ {
+ /*
+ * Not processing a signal so use the dynamic buffer...
+ */
+
+ va_start(ap, message);
+ len = vsnprintf(line, linesize, message, ap);
+ va_end(ap);
+
+ if (len >= linesize)
{
- cupsFilePrintf(ErrorFile,
- "ERROR: Unable to allocate memory for line - %s\n",
- strerror(errno));
- cupsFileFlush(ErrorFile);
+ len ++;
- ReleaseSignals();
+ if (len < 8192)
+ len = 8192;
+ else if (len > 65536)
+ len = 65536;
- return (0);
+ if (!linesize)
+ line = malloc(len);
+ else
+ line = realloc(line, len);
+
+ if (line)
+ linesize = len;
+ else
+ {
+ cupsFilePrintf(ErrorFile,
+ "ERROR: Unable to allocate memory for line - %s\n",
+ strerror(errno));
+ cupsFileFlush(ErrorFile);
+
+ ReleaseSignals();
+
+ return (0);
+ }
+
+ va_start(ap, message);
+ len = vsnprintf(line, linesize, message, ap);
+ va_end(ap);
}
- va_start(ap, message);
- len = vsnprintf(line, linesize, message, ap);
- va_end(ap);
+ ptr = line;
+
+ if (len >= linesize)
+ len = linesize - 1;
}
/*
* Then a newline...
*/
- if (len >= linesize)
- len = linesize - 1;
-
cupsFilePuts(ErrorFile, line);
if (len > 0 && line[len - 1] != '\n')
/*
- * End of "$Id: log.c,v 1.19.2.13 2003/07/19 21:57:49 mike Exp $".
+ * End of "$Id: log.c,v 1.19.2.14 2003/07/25 16:00:23 mike Exp $".
*/