You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by Saxon Druce <sa...@blocksoftware.com> on 2003/05/13 10:42:47 UTC
Borland C++ Builder signals
Hi,
When compiling APR using Borland C++ Builder 6.0 (bcc32 5.6), I get about 37
of these warnings:
[C++ Warning] signal.h(65): W8017 Redefinition of 'SIGUSR1' is not identical
[C++ Warning] signal.h(66): W8017 Redefinition of 'SIGUSR2' is not identical
And about 14 of these:
[C++ Warning] apr_private.h(132): W8017 Redefinition of 'SIGUSR1' is not
identical
[C++ Warning] apr_private.h(134): W8017 Redefinition of 'SIGUSR2' is not
identical
The reason is that include\arch\win32\apr_private.h has this:
#define SIGHUP 1
/* 2 is used for SIGINT on windows */
#define SIGQUIT 3
/* 4 is used for SIGILL on windows */
#define SIGTRAP 5
#define SIGIOT 6
#define SIGBUS 7
/* 8 is used for SIGFPE on windows */
#define SIGKILL 9
#define SIGUSR1 10
/* 11 is used for SIGSEGV on windows */
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
/* 15 is used for SIGTERM on windows */
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
/* 21 is used for SIGBREAK on windows */
/* 22 is used for SIGABRT on windows */
#define SIGTTIN 23
#define SIGTTOU 24
#define SIGURG 25
#define SIGXCPU 26
#define SIGXFSZ 27
#define SIGVTALRM 28
#define SIGPROF 29
#define SIGWINCH 30
#define SIGIO 31
This is consistent with Microsoft Visual C++'s signal.h, which has this:
#define SIGINT 2
#define SIGILL 4
#define SIGFPE 8
#define SIGSEGV 11
#define SIGTERM 15
#define SIGBREAK 21
#define SIGABRT 22
But it *isn't* consistent with Borland C++ Builder's signal.h, which has
this:
#define SIGABRT 22
#define SIGFPE 8
#define SIGILL 4
#define SIGINT 2
#define SIGSEGV 11
#define SIGTERM 15
#define SIGUSR1 16
#define SIGUSR2 17
#define SIGUSR3 20
#define SIGBREAK 21
About a year ago I submitted a patch for apr_private.h, which swapped
SIGSTKFLT with SIGUSR1 and SIGCHLD with SIGUSR2, then wrapped the SIGUSR1
and SIGUSR2 in a #ifndef __BORLANDC__, ie like this:
[snip]
#define SIGKILL 9
#define SIGSTKFLT 10
/* 11 is used for SIGSEGV on windows */
#define SIGCHLD 12
#define SIGPIPE 13
#define SIGALRM 14
/* 15 is used for SIGTERM on windows */
#ifndef __BORLANDC__
/* SIGUSR1 and SIGUSR2 are 16 and 17 for Borland C */
#define SIGUSR1 16
#define SIGUSR2 17
#endif
#define SIGCONT 18
[snip]
At the time I received a response from Branko Cibej, suggesting that I
should use a conditional test on a symbol, not a tool (ie not on Borland's
__BORLANDC__ define). I replied asking if he meant this:
[snip]
#define SIGKILL 9
#define SIGSTKFLT 10
/* 11 is used for SIGSEGV on windows */
#define SIGCHLD 12
#define SIGPIPE 13
#define SIGALRM 14
/* 15 is used for SIGTERM on windows */
/* SIGUSR1 and SIGUSR2 are 16 and 17 for Borland C */
#ifndef SIGUSR1
#define SIGUSR1 16
#endif
#ifndef SIGUSR2
#define SIGUSR2 17
#endif
#define SIGCONT 18
[snip]
Although that would only work for the warnings where apr_private.h is
included after signal.h, ie these ones:
[C++ Warning] apr_private.h(132): W8017 Redefinition of 'SIGUSR1' is not
identical
[C++ Warning] apr_private.h(134): W8017 Redefinition of 'SIGUSR2' is not
identical
And not these ones:
[C++ Warning] signal.h(65): W8017 Redefinition of 'SIGUSR1' is not identical
[C++ Warning] signal.h(66): W8017 Redefinition of 'SIGUSR2' is not identical
Unless apr_private.h was made to include signal.h itself before making the
definitions.
I haven't had a chance until now to follow this up any further.
Another approach would be to define them unconditionally, eg:
[snip]
#define SIGKILL 9
#define SIGSTKFLT 10
/* 11 is used for SIGSEGV on windows */
#define SIGCHLD 12
#define SIGPIPE 13
#define SIGALRM 14
/* 15 is used for SIGTERM on windows */
/* SIGUSR1 and SIGUSR2 are 16 and 17 for Borland C */
#define SIGUSR1 16
#define SIGUSR2 17
#define SIGCONT 18
[snip]
Since Borland doesn't seem to mind having them re-defined to the same value.
If someone could let me know which way this should be solved, I'll supply a
proper 'diff -u' patch.
Thanks,
Saxon
Re: Borland C++ Builder signals
Posted by "William A. Rowe, Jr." <wr...@rowe-clan.net>.
Saxon, I have no problem if you need to add #include "signal.h"
to APR's internal include/arch/win32/apr_private.h. We will know
quickly enough if that is a problem. I agree with Brane here, we
want to test #ifndef SIGFOO \n #define SIGFOO. That is much
cleaner and assures you that it won't be broken just as soon as
you substitute a different signal.h from another version of either
VC or BCC.
Bill
At 03:42 AM 5/13/2003, Saxon Druce wrote:
>Hi,
>
>When compiling APR using Borland C++ Builder 6.0 (bcc32 5.6), I get about 37
>of these warnings:
>
>[C++ Warning] signal.h(65): W8017 Redefinition of 'SIGUSR1' is not identical
>[C++ Warning] signal.h(66): W8017 Redefinition of 'SIGUSR2' is not identical
>
>And about 14 of these:
>
>[C++ Warning] apr_private.h(132): W8017 Redefinition of 'SIGUSR1' is not
>identical
>[C++ Warning] apr_private.h(134): W8017 Redefinition of 'SIGUSR2' is not
>identical
>
>The reason is that include\arch\win32\apr_private.h has this:
>
>#define SIGHUP 1
>/* 2 is used for SIGINT on windows */
>#define SIGQUIT 3
>/* 4 is used for SIGILL on windows */
>#define SIGTRAP 5
>#define SIGIOT 6
>#define SIGBUS 7
>/* 8 is used for SIGFPE on windows */
>#define SIGKILL 9
>#define SIGUSR1 10
>/* 11 is used for SIGSEGV on windows */
>#define SIGUSR2 12
>#define SIGPIPE 13
>#define SIGALRM 14
>/* 15 is used for SIGTERM on windows */
>#define SIGSTKFLT 16
>#define SIGCHLD 17
>#define SIGCONT 18
>#define SIGSTOP 19
>#define SIGTSTP 20
>/* 21 is used for SIGBREAK on windows */
>/* 22 is used for SIGABRT on windows */
>#define SIGTTIN 23
>#define SIGTTOU 24
>#define SIGURG 25
>#define SIGXCPU 26
>#define SIGXFSZ 27
>#define SIGVTALRM 28
>#define SIGPROF 29
>#define SIGWINCH 30
>#define SIGIO 31
>
>This is consistent with Microsoft Visual C++'s signal.h, which has this:
>
>#define SIGINT 2
>#define SIGILL 4
>#define SIGFPE 8
>#define SIGSEGV 11
>#define SIGTERM 15
>#define SIGBREAK 21
>#define SIGABRT 22
>
>But it *isn't* consistent with Borland C++ Builder's signal.h, which has
>this:
>
>#define SIGABRT 22
>#define SIGFPE 8
>#define SIGILL 4
>#define SIGINT 2
>#define SIGSEGV 11
>#define SIGTERM 15
>#define SIGUSR1 16
>#define SIGUSR2 17
>#define SIGUSR3 20
>#define SIGBREAK 21
>
>About a year ago I submitted a patch for apr_private.h, which swapped
>SIGSTKFLT with SIGUSR1 and SIGCHLD with SIGUSR2, then wrapped the SIGUSR1
>and SIGUSR2 in a #ifndef __BORLANDC__, ie like this:
>
>[snip]
>#define SIGKILL 9
>#define SIGSTKFLT 10
>/* 11 is used for SIGSEGV on windows */
>#define SIGCHLD 12
>#define SIGPIPE 13
>#define SIGALRM 14
>/* 15 is used for SIGTERM on windows */
>#ifndef __BORLANDC__
>/* SIGUSR1 and SIGUSR2 are 16 and 17 for Borland C */
>#define SIGUSR1 16
>#define SIGUSR2 17
>#endif
>#define SIGCONT 18
>[snip]
>
>At the time I received a response from Branko Cibej, suggesting that I
>should use a conditional test on a symbol, not a tool (ie not on Borland's
>__BORLANDC__ define). I replied asking if he meant this:
>
>[snip]
>#define SIGKILL 9
>#define SIGSTKFLT 10
>/* 11 is used for SIGSEGV on windows */
>#define SIGCHLD 12
>#define SIGPIPE 13
>#define SIGALRM 14
>/* 15 is used for SIGTERM on windows */
>/* SIGUSR1 and SIGUSR2 are 16 and 17 for Borland C */
>#ifndef SIGUSR1
>#define SIGUSR1 16
>#endif
>#ifndef SIGUSR2
>#define SIGUSR2 17
>#endif
>#define SIGCONT 18
>[snip]
>
>Although that would only work for the warnings where apr_private.h is
>included after signal.h, ie these ones:
>
>[C++ Warning] apr_private.h(132): W8017 Redefinition of 'SIGUSR1' is not
>identical
>[C++ Warning] apr_private.h(134): W8017 Redefinition of 'SIGUSR2' is not
>identical
>
>And not these ones:
>
>[C++ Warning] signal.h(65): W8017 Redefinition of 'SIGUSR1' is not identical
>[C++ Warning] signal.h(66): W8017 Redefinition of 'SIGUSR2' is not identical
>
>Unless apr_private.h was made to include signal.h itself before making the
>definitions.
>
>I haven't had a chance until now to follow this up any further.
>
>Another approach would be to define them unconditionally, eg:
>
>[snip]
>#define SIGKILL 9
>#define SIGSTKFLT 10
>/* 11 is used for SIGSEGV on windows */
>#define SIGCHLD 12
>#define SIGPIPE 13
>#define SIGALRM 14
>/* 15 is used for SIGTERM on windows */
>/* SIGUSR1 and SIGUSR2 are 16 and 17 for Borland C */
>#define SIGUSR1 16
>#define SIGUSR2 17
>#define SIGCONT 18
>[snip]
>
>Since Borland doesn't seem to mind having them re-defined to the same value.
>
>If someone could let me know which way this should be solved, I'll supply a
>proper 'diff -u' patch.
>
>Thanks,
>Saxon