allow Sys::Syslog test to fail gracefully
[p5sagit/p5-mst-13.2.git] / ext / Sys / Syslog / Syslog.xs
index 15eb64e..93f1272 100644 (file)
 #include <syslog.h>
 #endif
 
-#define PERL_constant_NOTFOUND 1
-#define PERL_constant_NOTDEF   2
-#define PERL_constant_ISIV     3
-#define PERL_constant_ISNV     4
-#define PERL_constant_ISPV     5
-#define PERL_constant_ISPVN    6
-#define PERL_constant_ISUV     7
-
-#ifndef NVTYPE
-typedef double NV; /* 5.6 and later define NVTYPE, and typedef NV to it.  */
-#endif
-
-static int
-constant_7 (const char *name, IV *iv_return) {
-  /* Names all of length 7.  */
-  /* When generated this function returned values for the list of names given
-     here.  However, subsequent manual editing may have added or removed some.
-     LOG_ERR LOG_FTP LOG_LPR LOG_PID */
-  /* Offset 4 gives the best switch position.  */
-  switch (name[4]) {
-  case 'E':
-    if (memEQ(name, "LOG_ERR", 7)) {
-    /*                   ^        */
-#ifdef LOG_ERR
-      *iv_return = LOG_ERR;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'F':
-    if (memEQ(name, "LOG_FTP", 7)) {
-    /*                   ^        */
-#ifdef LOG_FTP
-      *iv_return = LOG_FTP;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'L':
-    if (memEQ(name, "LOG_LPR", 7)) {
-    /*                   ^        */
-#ifdef LOG_LPR
-      *iv_return = LOG_LPR;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'P':
-    if (memEQ(name, "LOG_PID", 7)) {
-    /*                   ^        */
-#ifdef LOG_PID
-      *iv_return = LOG_PID;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  }
-  return PERL_constant_NOTFOUND;
-}
-
-static int
-constant_8 (const char *name, IV *iv_return) {
-  /* Names all of length 8.  */
-  /* When generated this function returned values for the list of names given
-     here.  However, subsequent manual editing may have added or removed some.
-     LOG_AUTH LOG_CONS LOG_CRIT LOG_CRON LOG_INFO LOG_KERN LOG_LFMT LOG_MAIL
-     LOG_NEWS LOG_USER LOG_UUCP */
-  /* Offset 6 gives the best switch position.  */
-  switch (name[6]) {
-  case 'C':
-    if (memEQ(name, "LOG_UUCP", 8)) {
-    /*                     ^       */
-#ifdef LOG_UUCP
-      *iv_return = LOG_UUCP;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'E':
-    if (memEQ(name, "LOG_USER", 8)) {
-    /*                     ^       */
-#ifdef LOG_USER
-      *iv_return = LOG_USER;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'F':
-    if (memEQ(name, "LOG_INFO", 8)) {
-    /*                     ^       */
-#ifdef LOG_INFO
-      *iv_return = LOG_INFO;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'I':
-    if (memEQ(name, "LOG_CRIT", 8)) {
-    /*                     ^       */
-#ifdef LOG_CRIT
-      *iv_return = LOG_CRIT;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    if (memEQ(name, "LOG_MAIL", 8)) {
-    /*                     ^       */
-#ifdef LOG_MAIL
-      *iv_return = LOG_MAIL;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'M':
-    if (memEQ(name, "LOG_LFMT", 8)) {
-    /*                     ^       */
-#ifdef LOG_LFMT
-      *iv_return = LOG_LFMT;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'N':
-    if (memEQ(name, "LOG_CONS", 8)) {
-    /*                     ^       */
-#ifdef LOG_CONS
-      *iv_return = LOG_CONS;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'O':
-    if (memEQ(name, "LOG_CRON", 8)) {
-    /*                     ^       */
-#ifdef LOG_CRON
-      *iv_return = LOG_CRON;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'R':
-    if (memEQ(name, "LOG_KERN", 8)) {
-    /*                     ^       */
-#ifdef LOG_KERN
-      *iv_return = LOG_KERN;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'T':
-    if (memEQ(name, "LOG_AUTH", 8)) {
-    /*                     ^       */
-#ifdef LOG_AUTH
-      *iv_return = LOG_AUTH;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'W':
-    if (memEQ(name, "LOG_NEWS", 8)) {
-    /*                     ^       */
-#ifdef LOG_NEWS
-      *iv_return = LOG_NEWS;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  }
-  return PERL_constant_NOTFOUND;
-}
-
-static int
-constant_9 (const char *name, IV *iv_return) {
-  /* Names all of length 9.  */
-  /* When generated this function returned values for the list of names given
-     here.  However, subsequent manual editing may have added or removed some.
-     LOG_ALERT LOG_DEBUG LOG_EMERG */
-  /* Offset 4 gives the best switch position.  */
-  switch (name[4]) {
-  case 'A':
-    if (memEQ(name, "LOG_ALERT", 9)) {
-    /*                   ^          */
-#ifdef LOG_ALERT
-      *iv_return = LOG_ALERT;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'D':
-    if (memEQ(name, "LOG_DEBUG", 9)) {
-    /*                   ^          */
-#ifdef LOG_DEBUG
-      *iv_return = LOG_DEBUG;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'E':
-    if (memEQ(name, "LOG_EMERG", 9)) {
-    /*                   ^          */
-#ifdef LOG_EMERG
-      *iv_return = LOG_EMERG;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  }
-  return PERL_constant_NOTFOUND;
-}
-
-static int
-constant_10 (const char *name, IV *iv_return) {
-  /* Names all of length 10.  */
-  /* When generated this function returned values for the list of names given
-     here.  However, subsequent manual editing may have added or removed some.
-     LOG_DAEMON LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4
-     LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_NDELAY LOG_NOTICE LOG_NOWAIT
-     LOG_ODELAY LOG_PERROR LOG_SYSLOG */
-  /* Offset 9 gives the best switch position.  */
-  switch (name[9]) {
-  case '0':
-    if (memEQ(name, "LOG_LOCAL0", 10)) {
-    /*                        ^       */
-#ifdef LOG_LOCAL0
-      *iv_return = LOG_LOCAL0;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case '1':
-    if (memEQ(name, "LOG_LOCAL1", 10)) {
-    /*                        ^       */
-#ifdef LOG_LOCAL1
-      *iv_return = LOG_LOCAL1;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case '2':
-    if (memEQ(name, "LOG_LOCAL2", 10)) {
-    /*                        ^       */
-#ifdef LOG_LOCAL2
-      *iv_return = LOG_LOCAL2;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case '3':
-    if (memEQ(name, "LOG_LOCAL3", 10)) {
-    /*                        ^       */
-#ifdef LOG_LOCAL3
-      *iv_return = LOG_LOCAL3;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case '4':
-    if (memEQ(name, "LOG_LOCAL4", 10)) {
-    /*                        ^       */
-#ifdef LOG_LOCAL4
-      *iv_return = LOG_LOCAL4;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case '5':
-    if (memEQ(name, "LOG_LOCAL5", 10)) {
-    /*                        ^       */
-#ifdef LOG_LOCAL5
-      *iv_return = LOG_LOCAL5;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case '6':
-    if (memEQ(name, "LOG_LOCAL6", 10)) {
-    /*                        ^       */
-#ifdef LOG_LOCAL6
-      *iv_return = LOG_LOCAL6;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case '7':
-    if (memEQ(name, "LOG_LOCAL7", 10)) {
-    /*                        ^       */
-#ifdef LOG_LOCAL7
-      *iv_return = LOG_LOCAL7;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'E':
-    if (memEQ(name, "LOG_NOTICE", 10)) {
-    /*                        ^       */
-#ifdef LOG_NOTICE
-      *iv_return = LOG_NOTICE;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'G':
-    if (memEQ(name, "LOG_SYSLOG", 10)) {
-    /*                        ^       */
-#ifdef LOG_SYSLOG
-      *iv_return = LOG_SYSLOG;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'N':
-    if (memEQ(name, "LOG_DAEMON", 10)) {
-    /*                        ^       */
-#ifdef LOG_DAEMON
-      *iv_return = LOG_DAEMON;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'R':
-    if (memEQ(name, "LOG_PERROR", 10)) {
-    /*                        ^       */
-#ifdef LOG_PERROR
-      *iv_return = LOG_PERROR;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'T':
-    if (memEQ(name, "LOG_NOWAIT", 10)) {
-    /*                        ^       */
-#ifdef LOG_NOWAIT
-      *iv_return = LOG_NOWAIT;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'Y':
-    if (memEQ(name, "LOG_NDELAY", 10)) {
-    /*                        ^       */
-#ifdef LOG_NDELAY
-      *iv_return = LOG_NDELAY;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    if (memEQ(name, "LOG_ODELAY", 10)) {
-    /*                        ^       */
-#ifdef LOG_ODELAY
-      *iv_return = LOG_ODELAY;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  }
-  return PERL_constant_NOTFOUND;
-}
-
-static int
-constant_11 (const char *name, IV *iv_return) {
-  /* Names all of length 11.  */
-  /* When generated this function returned values for the list of names given
-     here.  However, subsequent manual editing may have added or removed some.
-     LOG_FACMASK LOG_PRIMASK LOG_WARNING */
-  /* Offset 6 gives the best switch position.  */
-  switch (name[6]) {
-  case 'C':
-    if (memEQ(name, "LOG_FACMASK", 11)) {
-    /*                     ^           */
-#ifdef LOG_FACMASK
-      *iv_return = LOG_FACMASK;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'I':
-    if (memEQ(name, "LOG_PRIMASK", 11)) {
-    /*                     ^           */
-#ifdef LOG_PRIMASK
-      *iv_return = LOG_PRIMASK;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 'R':
-    if (memEQ(name, "LOG_WARNING", 11)) {
-    /*                     ^           */
-#ifdef LOG_WARNING
-      *iv_return = LOG_WARNING;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  }
-  return PERL_constant_NOTFOUND;
-}
-
-static int
-constant (const char *name, STRLEN len, IV *iv_return) {
-  /* Initially switch on the length of the name.  */
-  /* When generated this function returned values for the list of names given
-     in this section of perl code.  Rather than manually editing these functions
-     to add or remove constants, which would result in this comment and section
-     of code becoming inaccurate, we recommend that you edit this section of
-     code, and use it to regenerate a new set of constant functions which you
-     then use to replace the originals.
-
-     Regenerate these constant functions by feeding this entire source file to
-     perl -x
-
-#!perl -w
-use ExtUtils::Constant qw (constant_types C_constant XS_constant);
-
-my $types = {IV => 1};
-my @names = (qw(LOG_ALERT LOG_AUTH LOG_AUTHPRIV LOG_CONS LOG_CRIT LOG_CRON
-              LOG_DAEMON LOG_DEBUG LOG_EMERG LOG_ERR LOG_FACMASK LOG_FTP
-              LOG_INFO LOG_KERN LOG_LFMT LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2
-              LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_LPR
-              LOG_MAIL LOG_NDELAY LOG_NEWS LOG_NFACILITIES LOG_NOTICE
-              LOG_NOWAIT LOG_ODELAY LOG_PERROR LOG_PID LOG_PRIMASK LOG_SYSLOG
-              LOG_USER LOG_UUCP LOG_WARNING));
-
-print constant_types(); # macro defs
-foreach (C_constant ("Sys::Syslog", 'constant', 'IV', $types, undef, undef, @names) ) {
-    print $_, "\n"; # C constant subs
-}
-print "#### XS Section:\n";
-print XS_constant ("Sys::Syslog", $types);
-__END__
-   */
-
-  switch (len) {
-  case 7:
-    return constant_7 (name, iv_return);
-    break;
-  case 8:
-    return constant_8 (name, iv_return);
-    break;
-  case 9:
-    return constant_9 (name, iv_return);
-    break;
-  case 10:
-    return constant_10 (name, iv_return);
-    break;
-  case 11:
-    return constant_11 (name, iv_return);
-    break;
-  case 12:
-    if (memEQ(name, "LOG_AUTHPRIV", 12)) {
-#ifdef LOG_AUTHPRIV
-      *iv_return = LOG_AUTHPRIV;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  case 15:
-    if (memEQ(name, "LOG_NFACILITIES", 15)) {
-#ifdef LOG_NFACILITIES
-      *iv_return = LOG_NFACILITIES;
-      return PERL_constant_ISIV;
-#else
-      return PERL_constant_NOTDEF;
-#endif
-    }
-    break;
-  }
-  return PERL_constant_NOTFOUND;
-}
+#include "const-c.inc"
 
 MODULE = Sys::Syslog           PACKAGE = Sys::Syslog           
 
-char *
-_PATH_LOG()
-    CODE:
-#ifdef _PATH_LOG
-       RETVAL = _PATH_LOG;
-#else
-       RETVAL = "";
-#endif
-    OUTPUT:
-       RETVAL
+INCLUDE: const-xs.inc
 
 int
 LOG_FAC(p)
@@ -630,48 +82,3 @@ LOG_UPTO(pri)
 #endif
     OUTPUT:
        RETVAL
-
-
-void
-constant(sv)
-    PREINIT:
-#ifdef dXSTARG
-       dXSTARG; /* Faster if we have it.  */
-#else
-       dTARGET;
-#endif
-       STRLEN          len;
-        int            type;
-       IV              iv;
-       /* NV           nv;     Uncomment this if you need to return NVs */
-       /* const char   *pv;    Uncomment this if you need to return PVs */
-    INPUT:
-       SV *            sv;
-        const char *   s = SvPV(sv, len);
-    PPCODE:
-        /* Change this to constant(s, len, &iv, &nv);
-           if you need to return both NVs and IVs */
-       type = constant(s, len, &iv);
-      /* Return 1 or 2 items. First is error message, or undef if no error.
-           Second, if present, is found value */
-        switch (type) {
-        case PERL_constant_NOTFOUND:
-          sv = sv_2mortal(newSVpvf("%s is not a valid Sys::Syslog macro", s));
-          PUSHs(sv);
-          break;
-        case PERL_constant_NOTDEF:
-          sv = sv_2mortal(newSVpvf(
-           "Your vendor has not defined Sys::Syslog macro %s used", s));
-          PUSHs(sv);
-          break;
-        case PERL_constant_ISIV:
-          EXTEND(SP, 1);
-          PUSHs(&PL_sv_undef);
-          PUSHi(iv);
-          break;
-        default:
-          sv = sv_2mortal(newSVpvf(
-           "Unexpected return type %d while processing Sys::Syslog macro %s used",
-               type, s));
-          PUSHs(sv);
-        }