X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsrc%2Ffunctions.h;h=35600ba2a82731ad2672766fae2a11891cc1b8ba;hb=6b5cbf740022f7f57a425d212499f156b1641d49;hp=0cd0a0d18d5c1c493ed6aa7912fc3ce1d26c2cbe;hpb=1a2e76e1676bf405a464a233950a95012533c227;p=exim.git diff --git a/src/src/functions.h b/src/src/functions.h index 0cd0a0d18..35600ba2a 100644 --- a/src/src/functions.h +++ b/src/src/functions.h @@ -13,6 +13,8 @@ are in in fact in separate headers. */ #ifndef _FUNCTIONS_H_ #define _FUNCTIONS_H_ +#include + #ifdef EXIM_PERL extern gstring *call_perl_cat(gstring *, uschar **, uschar *, @@ -46,6 +48,7 @@ extern uschar * tls_cert_fprt_md5(void *); extern uschar * tls_cert_fprt_sha1(void *); extern uschar * tls_cert_fprt_sha256(void *); +extern void tls_clean_env(void); extern BOOL tls_client_start(client_conn_ctx *, smtp_connect_args *, void *, tls_support *, uschar **); @@ -335,6 +338,7 @@ extern void moan_tell_someone(uschar *, address_item *, const uschar *, const char *, ...) PRINTF_FUNCTION(4,5); extern BOOL moan_to_sender(int, error_block *, header_line *, FILE *, BOOL); extern void moan_write_from(FILE *); +extern void moan_write_references(FILE *, uschar *); extern FILE *modefopen(const uschar *, const char *, mode_t); extern int open_cutthrough_connection( address_item * addr ); @@ -506,8 +510,6 @@ extern BOOL string_is_utf8(const uschar *); extern uschar *string_nextinlist(const uschar **, int *, uschar *, int); extern const uschar *string_printing2(const uschar *, BOOL); extern uschar *string_split_message(uschar *); -extern uschar *string_timediff(struct timeval *); -extern uschar *string_timesince(struct timeval *); extern uschar *string_unprinting(uschar *); #ifdef SUPPORT_I18N extern uschar *string_address_utf8_to_alabel(const uschar *, uschar **); @@ -540,7 +542,6 @@ extern uschar *strstric(uschar *, uschar *, BOOL); #ifdef EXIM_TFO_PROBE extern void tfo_probe(void); #endif -extern void timesince(struct timeval * diff, struct timeval * then); extern void tls_modify_variables(tls_support *); extern uschar *tod_stamp(int); @@ -892,7 +893,7 @@ return string_sprintf("%s/%s/%s/%s/%s%s", spool_directory, queue_name, purpose, subdir, fname, suffix); } -static void +static inline void set_subdir_str(uschar * subdir_str, const uschar * name, int search_sequence) { @@ -902,6 +903,59 @@ subdir_str[1] = '\0'; } /******************************************************************************/ +static inline void +timesince(struct timeval * diff, struct timeval * then) +{ +gettimeofday(diff, NULL); +diff->tv_sec -= then->tv_sec; +if ((diff->tv_usec -= then->tv_usec) < 0) + { + diff->tv_sec--; + diff->tv_usec += 1000*1000; + } +} + +static inline uschar * +string_timediff(struct timeval * diff) +{ +static uschar buf[sizeof("0.000s")]; + +if (diff->tv_sec >= 5 || !LOGGING(millisec)) + return readconf_printtime((int)diff->tv_sec); + +sprintf(CS buf, "%u.%03us", (uint)diff->tv_sec, (uint)diff->tv_usec/1000); +return buf; +} + + +static inline uschar * +string_timesince(struct timeval * then) +{ +struct timeval diff; +timesince(&diff, then); +return string_timediff(&diff); +} + +static inline void +report_time_since(struct timeval * t0, uschar * where) +{ +# ifdef MEASURE_TIMING +struct timeval diff; +timesince(&diff, t0); +fprintf(stderr, "%d %s:\t%ld.%06ld\n", + (uint)getpid(), where, (long)diff.tv_sec, (long)diff.tv_usec); +# endif +} + + +static inline void +testharness_pause_ms(int millisec) +{ +#ifndef MEASURE_TIMING +if (f.running_in_test_harness) millisleep(millisec); +#endif +} + #endif /* !MACRO_PREDEF */ #endif /* _FUNCTIONS_H_ */