extern BOOL queue_action(uschar *, int, uschar **, int, int);
extern void queue_check_only(void);
+extern unsigned queue_count(void);
+extern unsigned queue_count_cached(void);
extern void queue_list(int, uschar **, int);
-extern void queue_count(void);
+#ifdef EXPERIMENTAL_QUEUE_RAMP
+extern void queue_notify_daemon(const uschar * hostname);
+#endif
extern void queue_run(uschar *, uschar *, BOOL);
extern int random_number(int);
uschar **);
extern int route_address(address_item *, address_item **, address_item **,
address_item **, address_item **, int);
-extern int route_check_prefix(const uschar *, const uschar *);
-extern int route_check_suffix(const uschar *, const uschar *);
+extern int route_check_prefix(const uschar *, const uschar *, unsigned *);
+extern int route_check_suffix(const uschar *, const uschar *, unsigned *);
extern BOOL route_findgroup(uschar *, gid_t *);
extern BOOL route_finduser(const uschar *, struct passwd **, uid_t *);
extern BOOL route_find_expanded_group(uschar *, uschar *, uschar *, gid_t *,
return g;
}
+
+/* Copy the content of a string to tainted memory */
+
+static inline void
+gstring_rebuffer(gstring * g)
+{
+uschar * s = store_get(g->size, TRUE);
+memcpy(s, g->s, g->ptr);
+g->s = s;
+}
+
+
/******************************************************************************/
#define store_get_dns_answer() store_get_dns_answer_trc(CUS __FUNCTION__, __LINE__)
testharness_pause_ms(int millisec)
{
#ifndef MEASURE_TIMING
-if (f.running_in_test_harness) millisleep(millisec);
+if (f.running_in_test_harness && f.testsuite_delays) millisleep(millisec);
#endif
}