vsyslog.c
上传用户:zm130024
上传日期:2007-01-04
资源大小:432k
文件大小:3k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /* $Id: vsyslog.c,v 1.6 1999/08/30 17:28:14 karls Exp $ */
  2. #ifdef HAVE_CONFIG_H
  3. #include "autoconf.h"
  4. #endif  /* HAVE_CONFIG_H */
  5. #include "common.h"
  6. /* attempt to be clever; construct string and call syslog */
  7. #if !HAVE_VSYSLOG
  8. /*
  9.  * Copyright (c) 1983, 1988, 1993
  10.  * The Regents of the University of California.  All rights reserved.
  11.  *
  12.  * Redistribution and use in source and binary forms, with or without
  13.  * modification, are permitted provided that the following conditions
  14.  * are met:
  15.  * 1. Redistributions of source code must retain the above copyright
  16.  *    notice, this list of conditions and the following disclaimer.
  17.  * 2. Redistributions in binary form must reproduce the above copyright
  18.  *    notice, this list of conditions and the following disclaimer in the
  19.  *    documentation and/or other materials provided with the distribution.
  20.  * 3. All advertising materials mentioning features or use of this software
  21.  *    must display the following acknowledgement:
  22.  * This product includes software developed by the University of
  23.  * California, Berkeley and its contributors.
  24.  * 4. Neither the name of the University nor the names of its contributors
  25.  *    may be used to endorse or promote products derived from this software
  26.  *    without specific prior written permission.
  27.  *
  28.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  29.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  30.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  31.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  32.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  33.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  34.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  35.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  36.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  37.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  38.  * SUCH DAMAGE.
  39.  */
  40. #if defined(LIBC_SCCS) && !defined(lint)
  41. static char rcsid[] = "$OpenBSD: syslog.c,v 1.8 1998/03/19 00:30:03 millert Exp $";
  42. #endif /* LIBC_SCCS and not lint */
  43. void
  44. vsyslog(pri, fmt, ap)
  45. int pri;
  46. register const char *fmt;
  47. va_list ap;
  48. {
  49. register char ch, *t;
  50. int saved_errno;
  51. #define TBUF_LEN 2048
  52. #define FMT_LEN 1024
  53. char tbuf[TBUF_LEN], fmt_cpy[FMT_LEN];
  54. int fmt_left, prlen;
  55. saved_errno = errno;
  56. /* Build the message. */
  57. /*
  58.  * We wouldn't need this mess if printf handled %m, or if
  59.  * strerror() had been invented before syslog().
  60.  */
  61. for (t = fmt_cpy, fmt_left = FMT_LEN; (ch = *fmt); ++fmt) {
  62. if (ch == '%' && fmt[1] == 'm') {
  63. ++fmt;
  64. prlen = snprintf(t, fmt_left, "%s",
  65.     strerror(saved_errno));
  66. if (prlen >= fmt_left)
  67. prlen = fmt_left - 1;
  68. t += prlen;
  69. fmt_left -= prlen;
  70. } else {
  71. if (fmt_left > 1) {
  72. *t++ = ch;
  73. fmt_left--;
  74. }
  75. }
  76. }
  77. *t = '';
  78. prlen = vsnprintf(tbuf, TBUF_LEN, fmt_cpy, ap);
  79. syslog(pri, tbuf);
  80. return;
  81. }
  82. #else
  83. static void avoid_error __P((void));
  84. static void avoid_error()
  85. {
  86. avoid_error();
  87. }
  88. #endif /* !HAVE_VSYSLOG */