1 /*************************************************
2 * Exim - an Internet mail transport agent *
3 *************************************************/
5 /* Copyright (c) University of Cambridge 1995 - 2009 */
6 /* Copyright (c) The Exim Maintainers 2021 */
7 /* See the file NOTICE for conditions of use and distribution. */
8 /* SPDX-License-Identifier: GPL-2.0-or-later */
10 /* This file is not part of the main Exim code. There are little bits of test
11 code for some of Exim's modules, and when they are used, the module they are
12 testing may call other main Exim functions that are not available and/or
13 should not be used in a test. The classic case is log_write(). This module
14 contains dummy versions of such functions - well not really dummies, more like
22 /* We don't have the full Exim headers dragged in, but this function
23 is used for debugging output. */
25 extern gstring * string_vformat(gstring *, unsigned, const char *, va_list);
28 /*************************************************
29 * Handle calls to write the log *
30 *************************************************/
32 /* The message gets written to stderr when log_write() is called from a
33 utility. The message always gets '\n' added on the end of it.
36 selector not relevant when running a utility
37 flags not relevant when running a utility
38 format a printf() format
39 ... arguments for format
45 log_write(unsigned int selector, int flags, char *format, ...)
49 vfprintf(stderr, format, ap);
50 fprintf(stderr, "\n");
55 /*************************************************
56 * Handle calls to print debug output *
57 *************************************************/
59 /* The message just gets written to stderr.
60 We use tainted memory to format into just so that we can handle
64 format a printf() format
65 ... arguments for format
71 debug_printf(char *format, ...)
74 rmark reset_point = store_mark();
75 gstring * g = string_get_tainted(1024, TRUE);
79 if (!string_vformat(g, 0, format, ap))
81 char * s = "**** debug string overflowed buffer ****\n";
82 char * p = CS g->s + g->ptr;
83 int maxlen = g->size - (int)strlen(s) - 3;
84 if (p > g->s + maxlen) p = g->s + maxlen;
85 if (p > g->s && p[-1] != '\n') *p++ = '\n';
89 fprintf(stderr, "%s", string_from_gstring(g));
91 store_reset(reset_point);
97 /*************************************************
99 *************************************************/
101 extern int sigalrm_seen;
104 sigalrm_handler(int sig)
111 /*************************************************
113 *************************************************/
116 header_checkname(void *h, char *name, int len)
122 directory_make(char *parent, char *name, int mode, int panic)
127 host_build_sender_fullhost(void) { }
129 /* This one isn't needed for test_host */
133 host_ntoa(int type, const void *arg, char *buffer, int *portptr)
140 /* End of dummies.c */