LINUX.ORG.RU

История изменений

Исправление beastie, (текущая версия) :

Дай побрюзжать. =)

Приведена, но не совсем правильно (deb7):

       The sigaction structure is defined as something like:

           struct sigaction {
               void     (*sa_handler)(int);
               void     (*sa_sigaction)(int, siginfo_t *, void *);
               sigset_t   sa_mask;
               int        sa_flags;
               void     (*sa_restorer)(void);
           };

       On some architectures a union is involved: do not assign to both sa_handler and sa_sigaction.

Особенно доставляет «as something like». (В манах не место «как-то так»!)

Versus (*bsd):

SYNOPSIS
     #include <signal.h>

     struct sigaction {
             union {         /* signal handler */
                     void    (*__sa_handler)(int);
                     void    (*__sa_sigaction)(int, siginfo_t *, void *);
             } __sigaction_u;
             sigset_t sa_mask;          /* signal mask to apply */
             int      sa_flags;         /* see signal options below */
     };

     #define sa_handler  __sigaction_u.__sa_handler
     #define sa_sigaction     __sigaction_u.__sa_sigaction

Почувстуй разницу.

А в самой шапке за-ifdef-ино совсем другое и только в линуксе (sa_sigaction в пре-posix-93 может не быть).

Исходная версия beastie, :

Дай побрюзжать. =)

Приведена, но не совсем правильно (deb7):

       The sigaction structure is defined as something like:

           struct sigaction {
               void     (*sa_handler)(int);
               void     (*sa_sigaction)(int, siginfo_t *, void *);
               sigset_t   sa_mask;
               int        sa_flags;
               void     (*sa_restorer)(void);
           };

       On some architectures a union is involved: do not assign to both sa_handler and sa_sigaction.

Особенно доставляет «as something like».

Versus (*bsd):

SYNOPSIS
     #include <signal.h>

     struct sigaction {
             union {         /* signal handler */
                     void    (*__sa_handler)(int);
                     void    (*__sa_sigaction)(int, siginfo_t *, void *);
             } __sigaction_u;
             sigset_t sa_mask;          /* signal mask to apply */
             int      sa_flags;         /* see signal options below */
     };

     #define sa_handler  __sigaction_u.__sa_handler
     #define sa_sigaction     __sigaction_u.__sa_sigaction

Почувстуй разницу.

А в самой шапке за-ifdef-ино совсем другое и только в линуксе (sa_sigaction в пре-posix-93 может не быть).