Annotation of embedaddon/sudo/common/sudo_printf.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (c) 2010-2012 Todd C. Miller <Todd.Miller@courtesan.com>
3: *
4: * Permission to use, copy, modify, and distribute this software for any
5: * purpose with or without fee is hereby granted, provided that the above
6: * copyright notice and this permission notice appear in all copies.
7: *
8: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15: */
16:
17: #include <config.h>
18:
19: #include <sys/types.h>
20: #include <stdio.h>
21: #ifdef STDC_HEADERS
22: # include <stdlib.h>
23: # include <stddef.h>
24: #else
25: # ifdef HAVE_STDLIB_H
26: # include <stdlib.h>
27: # endif
28: #endif /* STDC_HEADERS */
29: #include <stdarg.h>
30: #include <errno.h>
31:
32: #include "missing.h"
33: #include "sudo_plugin.h"
34: #include "sudo_debug.h"
35:
36: int
37: _sudo_printf(int msg_type, const char *fmt, ...)
38: {
39: va_list ap;
40: char *buf;
41: int len = -1;
42:
43: switch (msg_type) {
44: case SUDO_CONV_INFO_MSG:
45: va_start(ap, fmt);
46: len = vfprintf(stdout, fmt, ap);
47: va_end(ap);
48: break;
49: case SUDO_CONV_ERROR_MSG:
50: va_start(ap, fmt);
51: len = vfprintf(stderr, fmt, ap);
52: va_end(ap);
53: break;
54: case SUDO_CONV_DEBUG_MSG:
55: /* XXX - add debug version of vfprintf()? */
56: va_start(ap, fmt);
57: len = vasprintf(&buf, fmt, ap);
58: va_end(ap);
59: if (len != -1)
60: sudo_debug_write(buf, len, 0);
61: break;
62: default:
63: errno = EINVAL;
64: break;
65: }
66:
67: return len;
68: }
69:
70: sudo_printf_t sudo_printf = _sudo_printf;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>