On 06/09/2010 09:36 PM, Stefan Fritsch wrote:
> On Wed, 9 Jun 2010, Ruediger Pluem wrote:
>> On 06/06/2010 06:54 PM, s...@apache.org wrote:
>>> Author: sf
>>> Date: Sun Jun  6 16:54:51 2010
>>> New Revision: 951893
>>>
>>> URL: http://svn.apache.org/viewvc?rev=951893&view=rev
>>> Log:
>>> - Introduce log levels trace1/.../trace8
>>> - Add macro wrappers for ap_log_*error. On C99, this will save argument
>>>   preparation and function call overhead when a message is not logged
>>>   because of the configured loglevel.
>>> - Introduce per-module loglevel configuration.
>>>
> 
>>>  /**
>>>   * ap_log_perror() - log messages which are not related to a particular
>>> @@ -188,10 +288,20 @@ AP_DECLARE(void) ap_log_error(const char
>>>   * simple format string like "%s", followed by the string containing
>>> the
>>>   * untrusted data.
>>>   */
>>> -AP_DECLARE(void) ap_log_perror(const char *file, int line, int level,
>>> -                             apr_status_t status, apr_pool_t *p,
>>> -                             const char *fmt, ...)
>>> -                __attribute__((format(printf,6,7)));
>>> +#if __STDC_VERSION__ >= 199901L && defined(APLOG_MAX_LOGLEVEL)
>>> +/* need additional step to expand APLOG_MARK first */
>>> +#define ap_log_perror(...) ap_log_perror__(__VA_ARGS__)
>>> +#define ap_log_perror__(file, line, mi, level, status, p,
>>> ...)            \
>>> +    do { if ((level) <= APLOG_MAX_LOGLEVEL
>>> )                              \
>>> +             ap_do_log_perror(file, line, mi, level, status,
>>> p,           \
>>> +                             __VA_ARGS__); } while(0)
>>
>> Why ap_do_log_perror and not ap_log_perror_?
> 
> There is no ap_log_perror_ because the pool p does not have a per-module
> loglevel configuration.

+#if __STDC_VERSION__ >= 199901L && defined(APLOG_MAX_LOGLEVEL)
+/* need additional step to expand APLOG_MARK first */
+#define ap_log_perror(...) ap_log_perror__(__VA_ARGS__)
+#define ap_log_perror__(file, line, mi, level, status, p, ...)            \
+    do { if ((level) <= APLOG_MAX_LOGLEVEL )                              \
+             ap_do_log_perror(file, line, mi, level, status, p,           \
+                             __VA_ARGS__); } while(0)
+#else
+#define ap_log_perror ap_log_perror_
+#endif
+AP_DECLARE(void) ap_log_perror_(const char *file, int line, int module_index,
+                                int level, apr_status_t status, apr_pool_t *p,
+                                const char *fmt, ...)
+                               __attribute__((format(printf,7,8)));


I am still confused then.
Why having AP_DECLARE(void) ap_log_perror_ then?
Why define ap_log_perror to ap_log_perror_ on non C99 compilers then?
ap_do_log_perror only shows up in the definition of ap_log_perror__ nowhere 
else.
What does it do?

> 
> All the other things you pointed out in this mail have been fixed in
> r953125.

Thanks.

Regards

RĂ¼diger


Reply via email to