View | Details | Raw Unified | Return to bug 3376
Collapse All | Expand All

(-)a/configure.ac (-3 / +3 lines)
Lines 21-34 AC_LANG([C]) Link Here
21
AC_CONFIG_HEADERS([config.h])
21
AC_CONFIG_HEADERS([config.h])
22
AC_PROG_CC([cc gcc clang])
22
AC_PROG_CC([cc gcc clang])
23
23
24
# XXX relax this after reimplementing logit() etc.
25
AC_MSG_CHECKING([if $CC supports C99-style variadic macros])
24
AC_MSG_CHECKING([if $CC supports C99-style variadic macros])
26
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
25
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
27
int f(int a, int b, int c) { return a + b + c; }
26
int f(int a, int b, int c) { return a + b + c; }
28
#define F(a, ...) f(a, __VA_ARGS__)
27
#define F(a, ...) f(a, __VA_ARGS__)
29
]], [[return F(1, 2, -3);]])],
28
]], [[return F(1, 2, -3);]])],
30
	[ AC_MSG_RESULT([yes]) ],
29
	[ AC_MSG_RESULT([yes])
31
	[ AC_MSG_ERROR([*** OpenSSH requires support for C99-style variadic macros]) ]
30
	  AC_DEFINE([VARIADIC_MACROS], [1], [Supports C99 variadic macros]) ],
31
	[ AC_MSG_RESULT([no])]
32
)
32
)
33
33
34
AC_CANONICAL_HOST
34
AC_CANONICAL_HOST
(-)a/log.c (+134 lines)
Lines 498-500 sshlogdirect(LogLevel level, int forced, const char *fmt, ...) Link Here
498
	do_log(level, forced, NULL, fmt, args);
498
	do_log(level, forced, NULL, fmt, args);
499
	va_end(args);
499
	va_end(args);
500
}
500
}
501
502
#ifndef VARIADIC_MACROS
503
504
void
505
do_log2(int level, const char *fmt, ...)
506
{
507
	va_list args;
508
509
	va_start(args, fmt);
510
	sshlogv(__FILE__, "__func__", 0, 0, level, NULL, fmt, args);
511
	va_end(args);
512
}
513
514
void
515
do_log2_r(int r, int level, const char *fmt, ...)
516
{
517
	va_list args;
518
519
	va_start(args, fmt);
520
	sshlogv(__FILE__, "__func__", 0, 0, level, ssh_err(r), fmt, args);
521
	va_end(args);
522
}
523
524
void
525
fatal(const char *fmt, ...)
526
{
527
	va_list args;
528
529
	va_start(args, fmt);
530
	sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, NULL, fmt, args);
531
	va_end(args);
532
	cleanup_exit(255);
533
}
534
535
void
536
fatal_r(int r, const char *fmt, ...)
537
{
538
	va_list args;
539
540
	va_start(args, fmt);
541
	sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, ssh_err(r), fmt, args);
542
	va_end(args);
543
	cleanup_exit(255);
544
}
545
546
void
547
logdie(const char *fmt, ...)
548
{
549
	va_list args;
550
551
	va_start(args, fmt);
552
	sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, NULL, fmt, args);
553
	va_end(args);
554
	cleanup_exit(255);
555
}
556
557
void
558
logdie_r(int r, const char *fmt, ...)
559
{
560
	va_list args;
561
562
	va_start(args, fmt);
563
	sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, ssh_err(r), fmt, args);
564
	va_end(args);
565
	cleanup_exit(255);
566
}
567
568
void
569
sigdie(const char *fmt, ...)
570
{
571
	va_list args;
572
573
	va_start(args, fmt);
574
	sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, NULL, fmt, args);
575
	va_end(args);
576
	_exit(1);
577
}
578
579
void
580
sigdie_r(int r, const char *fmt, ...)
581
{
582
	va_list args;
583
584
	va_start(args, fmt);
585
	sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, ssh_err(r), fmt, args);
586
	va_end(args);
587
	_exit(1);
588
}
589
590
#define LOGFUNC(name, level) void name(const char *fmt, ...) \
591
{ \
592
	va_list args; \
593
\
594
	va_start(args, fmt); \
595
	sshlogv(__FILE__, "__func__", 0, 0, level, NULL, fmt, args); \
596
	va_end(args); \
597
}
598
#include "logfuncs.h"
599
#undef LOGFUNC
600
601
#define LOGFUNC(name, level) void name ## _f(const char *fmt, ...) \
602
{ \
603
	va_list args; \
604
\
605
	va_start(args, fmt); \
606
	sshlogv(__FILE__, "__func__", 0, 0, level, NULL, fmt, args); \
607
	va_end(args); \
608
}
609
#include "logfuncs.h"
610
#undef LOGFUNC
611
612
#define LOGFUNC(name, level) void name ## _r(int r, const char *fmt, ...) \
613
{ \
614
	va_list args; \
615
\
616
	va_start(args, fmt); \
617
	sshlogv(__FILE__, "__func__", 0, 0, level, ssh_err(r), fmt, args); \
618
	va_end(args); \
619
}
620
#include "logfuncs.h"
621
#undef LOGFUNC
622
623
#define LOGFUNC(name, level) void name ## _fr(int r, const char *fmt, ...) \
624
{ \
625
	va_list args; \
626
\
627
	va_start(args, fmt); \
628
	sshlogv(__FILE__, "__func__", 0, 0, level, ssh_err(r), fmt, args); \
629
	va_end(args); \
630
}
631
#include "logfuncs.h"
632
#undef LOGFUNC
633
634
#endif /* VARIADIC_MACROS */
(-)a/log.h (+37 lines)
Lines 84-89 void sshfatal(const char *, const char *, int, int, Link Here
84
void	 sshlogdirect(LogLevel, int, const char *, ...)
84
void	 sshlogdirect(LogLevel, int, const char *, ...)
85
    __attribute__((format(printf, 3, 4)));
85
    __attribute__((format(printf, 3, 4)));
86
86
87
# ifdef VARIADIC_MACROS
88
87
#define do_log2(level, ...)	sshlog(__FILE__, __func__, __LINE__, 0, level, NULL, __VA_ARGS__)
89
#define do_log2(level, ...)	sshlog(__FILE__, __func__, __LINE__, 0, level, NULL, __VA_ARGS__)
88
#define debug3(...)		sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, NULL, __VA_ARGS__)
90
#define debug3(...)		sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, NULL, __VA_ARGS__)
89
#define debug2(...)		sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, NULL, __VA_ARGS__)
91
#define debug2(...)		sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, NULL, __VA_ARGS__)
Lines 129-132 void sshlogdirect(LogLevel, int, const char *, ...) Link Here
129
#define logdie_fr(r, ...)	sshlogdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__)
131
#define logdie_fr(r, ...)	sshlogdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__)
130
#define sigdie_fr(r, ...)	sshsigdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__)
132
#define sigdie_fr(r, ...)	sshsigdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__)
131
133
134
# else
135
136
void do_log2(int, const char *, ...);
137
#define do_log2_f	do_log2
138
void do_log2_r(int, int, const char *, ...);
139
#define do_log2_fr	do_log2_r
140
141
void fatal(const char *, ...);
142
#define fatal_f		fatal
143
void fatal_r(int, const char *, ...);
144
#define fatal_fr	fatal_r
145
146
void logdie(const char *, ...);
147
#define logdie_f	logdie
148
void logdie_r(int, const char *, ...);
149
#define logdie_fr	logdir_r
150
151
#define LOGFUNC(name, level) void name(const char *, ...)
152
#include "logfuncs.h"
153
#undef LOGFUNC
154
155
#define LOGFUNC(name, level) void name ## _f(const char *, ...)
156
#include "logfuncs.h"
157
#undef LOGFUNC
158
159
#define LOGFUNC(name, level) void name ## _r(int, const char *, ...)
160
#include "logfuncs.h"
161
#undef LOGFUNC
162
163
#define LOGFUNC(name, level) void name ## _fr(int, const char *, ...)
164
#include "logfuncs.h"
165
#undef LOGFUNC
166
167
# endif /* VARIADIC_MACROS */
168
132
#endif
169
#endif
(-)a/logfuncs.h (+6 lines)
Line 0 Link Here
1
LOGFUNC(debug, SYSLOG_LEVEL_DEBUG1);
2
LOGFUNC(debug2, SYSLOG_LEVEL_DEBUG2);
3
LOGFUNC(debug3, SYSLOG_LEVEL_DEBUG3);
4
LOGFUNC(logit, SYSLOG_LEVEL_INFO);
5
LOGFUNC(error, SYSLOG_LEVEL_ERROR);
6
LOGFUNC(verbose, SYSLOG_LEVEL_VERBOSE);

Return to bug 3376