Bugzilla – Attachment 3560 Details for
Bug 3376
Documentation says C89 compiler required but C99 compiler is actually required
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Provide c89-compatible logging functions
openssh-c89-logging.patch (text/plain), 5.60 KB, created by
Darren Tucker
on 2021-12-31 12:54:47 AEDT
(
hide
)
Description:
Provide c89-compatible logging functions
Filename:
MIME Type:
Creator:
Darren Tucker
Created:
2021-12-31 12:54:47 AEDT
Size:
5.60 KB
patch
obsolete
>diff --git a/configure.ac b/configure.ac >index 1feb73ef..e49f6b41 100644 >--- a/configure.ac >+++ b/configure.ac >@@ -21,14 +21,14 @@ AC_LANG([C]) > AC_CONFIG_HEADERS([config.h]) > AC_PROG_CC([cc gcc clang]) > >-# XXX relax this after reimplementing logit() etc. > AC_MSG_CHECKING([if $CC supports C99-style variadic macros]) > AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ > int f(int a, int b, int c) { return a + b + c; } > #define F(a, ...) f(a, __VA_ARGS__) > ]], [[return F(1, 2, -3);]])], >- [ AC_MSG_RESULT([yes]) ], >- [ AC_MSG_ERROR([*** OpenSSH requires support for C99-style variadic macros]) ] >+ [ AC_MSG_RESULT([yes]) >+ AC_DEFINE([VARIADIC_MACROS], [1], [Supports C99 variadic macros]) ], >+ [ AC_MSG_RESULT([no])] > ) > > AC_CANONICAL_HOST >diff --git a/log.c b/log.c >index 99bf046a..7d895337 100644 >--- a/log.c >+++ b/log.c >@@ -498,3 +498,137 @@ sshlogdirect(LogLevel level, int forced, const char *fmt, ...) > do_log(level, forced, NULL, fmt, args); > va_end(args); > } >+ >+#ifndef VARIADIC_MACROS >+ >+void >+do_log2(int level, const char *fmt, ...) >+{ >+ va_list args; >+ >+ va_start(args, fmt); >+ sshlogv(__FILE__, "__func__", 0, 0, level, NULL, fmt, args); >+ va_end(args); >+} >+ >+void >+do_log2_r(int r, int level, const char *fmt, ...) >+{ >+ va_list args; >+ >+ va_start(args, fmt); >+ sshlogv(__FILE__, "__func__", 0, 0, level, ssh_err(r), fmt, args); >+ va_end(args); >+} >+ >+void >+fatal(const char *fmt, ...) >+{ >+ va_list args; >+ >+ va_start(args, fmt); >+ sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, NULL, fmt, args); >+ va_end(args); >+ cleanup_exit(255); >+} >+ >+void >+fatal_r(int r, const char *fmt, ...) >+{ >+ va_list args; >+ >+ va_start(args, fmt); >+ sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, ssh_err(r), fmt, args); >+ va_end(args); >+ cleanup_exit(255); >+} >+ >+void >+logdie(const char *fmt, ...) >+{ >+ va_list args; >+ >+ va_start(args, fmt); >+ sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, NULL, fmt, args); >+ va_end(args); >+ cleanup_exit(255); >+} >+ >+void >+logdie_r(int r, const char *fmt, ...) >+{ >+ va_list args; >+ >+ va_start(args, fmt); >+ sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, ssh_err(r), fmt, args); >+ va_end(args); >+ cleanup_exit(255); >+} >+ >+void >+sigdie(const char *fmt, ...) >+{ >+ va_list args; >+ >+ va_start(args, fmt); >+ sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, NULL, fmt, args); >+ va_end(args); >+ _exit(1); >+} >+ >+void >+sigdie_r(int r, const char *fmt, ...) >+{ >+ va_list args; >+ >+ va_start(args, fmt); >+ sshlogv(__FILE__, "__func__", 0, 0, SYSLOG_LEVEL_FATAL, ssh_err(r), fmt, args); >+ va_end(args); >+ _exit(1); >+} >+ >+#define LOGFUNC(name, level) void name(const char *fmt, ...) \ >+{ \ >+ va_list args; \ >+\ >+ va_start(args, fmt); \ >+ sshlogv(__FILE__, "__func__", 0, 0, level, NULL, fmt, args); \ >+ va_end(args); \ >+} >+#include "logfuncs.h" >+#undef LOGFUNC >+ >+#define LOGFUNC(name, level) void name ## _f(const char *fmt, ...) \ >+{ \ >+ va_list args; \ >+\ >+ va_start(args, fmt); \ >+ sshlogv(__FILE__, "__func__", 0, 0, level, NULL, fmt, args); \ >+ va_end(args); \ >+} >+#include "logfuncs.h" >+#undef LOGFUNC >+ >+#define LOGFUNC(name, level) void name ## _r(int r, const char *fmt, ...) \ >+{ \ >+ va_list args; \ >+\ >+ va_start(args, fmt); \ >+ sshlogv(__FILE__, "__func__", 0, 0, level, ssh_err(r), fmt, args); \ >+ va_end(args); \ >+} >+#include "logfuncs.h" >+#undef LOGFUNC >+ >+#define LOGFUNC(name, level) void name ## _fr(int r, const char *fmt, ...) \ >+{ \ >+ va_list args; \ >+\ >+ va_start(args, fmt); \ >+ sshlogv(__FILE__, "__func__", 0, 0, level, ssh_err(r), fmt, args); \ >+ va_end(args); \ >+} >+#include "logfuncs.h" >+#undef LOGFUNC >+ >+#endif /* VARIADIC_MACROS */ >diff --git a/log.h b/log.h >index 6218b417..f9a0ea0d 100644 >--- a/log.h >+++ b/log.h >@@ -84,6 +84,8 @@ void sshfatal(const char *, const char *, int, int, > void sshlogdirect(LogLevel, int, const char *, ...) > __attribute__((format(printf, 3, 4))); > >+# ifdef VARIADIC_MACROS >+ > #define do_log2(level, ...) sshlog(__FILE__, __func__, __LINE__, 0, level, NULL, __VA_ARGS__) > #define debug3(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG3, NULL, __VA_ARGS__) > #define debug2(...) sshlog(__FILE__, __func__, __LINE__, 0, SYSLOG_LEVEL_DEBUG2, NULL, __VA_ARGS__) >@@ -129,4 +131,39 @@ void sshlogdirect(LogLevel, int, const char *, ...) > #define logdie_fr(r, ...) sshlogdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__) > #define sigdie_fr(r, ...) sshsigdie(__FILE__, __func__, __LINE__, 1, SYSLOG_LEVEL_ERROR, ssh_err(r), __VA_ARGS__) > >+# else >+ >+void do_log2(int, const char *, ...); >+#define do_log2_f do_log2 >+void do_log2_r(int, int, const char *, ...); >+#define do_log2_fr do_log2_r >+ >+void fatal(const char *, ...); >+#define fatal_f fatal >+void fatal_r(int, const char *, ...); >+#define fatal_fr fatal_r >+ >+void logdie(const char *, ...); >+#define logdie_f logdie >+void logdie_r(int, const char *, ...); >+#define logdie_fr logdir_r >+ >+#define LOGFUNC(name, level) void name(const char *, ...) >+#include "logfuncs.h" >+#undef LOGFUNC >+ >+#define LOGFUNC(name, level) void name ## _f(const char *, ...) >+#include "logfuncs.h" >+#undef LOGFUNC >+ >+#define LOGFUNC(name, level) void name ## _r(int, const char *, ...) >+#include "logfuncs.h" >+#undef LOGFUNC >+ >+#define LOGFUNC(name, level) void name ## _fr(int, const char *, ...) >+#include "logfuncs.h" >+#undef LOGFUNC >+ >+# endif /* VARIADIC_MACROS */ >+ > #endif >diff --git a/logfuncs.h b/logfuncs.h >new file mode 100644 >index 00000000..b565a166 >--- /dev/null >+++ b/logfuncs.h >@@ -0,0 +1,6 @@ >+LOGFUNC(debug, SYSLOG_LEVEL_DEBUG1); >+LOGFUNC(debug2, SYSLOG_LEVEL_DEBUG2); >+LOGFUNC(debug3, SYSLOG_LEVEL_DEBUG3); >+LOGFUNC(logit, SYSLOG_LEVEL_INFO); >+LOGFUNC(error, SYSLOG_LEVEL_ERROR); >+LOGFUNC(verbose, SYSLOG_LEVEL_VERBOSE);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 3376
: 3560