Blame Syslog.xs

Packit 972a07
/*
Packit 972a07
 * Syslog.xs
Packit 972a07
 * 
Packit 972a07
 * XS wrapper for the syslog(3) facility.
Packit 972a07
 * 
Packit 972a07
 */
Packit 972a07
Packit 972a07
#if defined(_WIN32)
Packit 972a07
#  include <windows.h>
Packit 972a07
#endif
Packit 972a07
Packit 972a07
#include "EXTERN.h"
Packit 972a07
#include "perl.h"
Packit 972a07
#include "XSUB.h"
Packit 972a07
#ifdef USE_PPPORT_H
Packit 972a07
#  include "ppport.h"
Packit 972a07
#endif
Packit 972a07
Packit 972a07
#ifndef HAVE_SYSLOG
Packit 972a07
#define HAVE_SYSLOG 1
Packit 972a07
#endif
Packit 972a07
Packit 972a07
#if defined(_WIN32) && !defined(__CYGWIN__)
Packit 972a07
#  undef HAVE_SYSLOG
Packit 972a07
#  include "fallback/syslog.h"
Packit 972a07
#else
Packit 972a07
#  if defined(I_SYSLOG) || PATCHLEVEL < 6
Packit 972a07
#    include <syslog.h>
Packit 972a07
#  else
Packit 972a07
#    undef HAVE_SYSLOG
Packit 972a07
#    include "fallback/syslog.h"
Packit 972a07
#  endif
Packit 972a07
#endif
Packit 972a07
Packit 972a07
static SV *ident_svptr;
Packit 972a07
Packit 972a07
Packit 972a07
#ifndef LOG_FAC
Packit 972a07
#define LOG_FACMASK     0x03f8
Packit 972a07
#define LOG_FAC(p)      (((p) & LOG_FACMASK) >> 3)
Packit 972a07
#endif
Packit 972a07
Packit 972a07
#ifndef LOG_PRIMASK
Packit 972a07
#define LOG_PRIMASK     0x07
Packit 972a07
#endif
Packit 972a07
Packit 972a07
#ifndef	LOG_PRI
Packit 972a07
#define	LOG_PRI(p)	((p) & LOG_PRIMASK)
Packit 972a07
#endif
Packit 972a07
Packit 972a07
#ifndef	LOG_MAKEPRI
Packit 972a07
#define	LOG_MAKEPRI(fac, pri)	(((fac) << 3) | (pri))
Packit 972a07
#endif
Packit 972a07
Packit 972a07
#ifndef LOG_MASK
Packit 972a07
#define	LOG_MASK(pri)	(1 << (pri))
Packit 972a07
#endif
Packit 972a07
Packit 972a07
#ifndef LOG_UPTO
Packit 972a07
#define	LOG_UPTO(pri)	((1 << ((pri)+1)) - 1)
Packit 972a07
#endif
Packit 972a07
Packit 972a07
#include "const-c.inc"
Packit 972a07
Packit 972a07
Packit 972a07
MODULE = Sys::Syslog		PACKAGE = Sys::Syslog		
Packit 972a07
Packit 972a07
INCLUDE: const-xs.inc
Packit 972a07
Packit 972a07
int
Packit 972a07
LOG_FAC(p)
Packit 972a07
    INPUT:
Packit 972a07
	int		p
Packit 972a07
Packit 972a07
int
Packit 972a07
LOG_PRI(p)
Packit 972a07
    INPUT:
Packit 972a07
	int		p
Packit 972a07
Packit 972a07
int
Packit 972a07
LOG_MAKEPRI(fac,pri)
Packit 972a07
    INPUT:
Packit 972a07
	int		fac
Packit 972a07
	int		pri
Packit 972a07
Packit 972a07
int
Packit 972a07
LOG_MASK(pri)
Packit 972a07
    INPUT:
Packit 972a07
	int		pri
Packit 972a07
Packit 972a07
int
Packit 972a07
LOG_UPTO(pri)
Packit 972a07
    INPUT:
Packit 972a07
	int		pri
Packit 972a07
Packit 972a07
#ifdef HAVE_SYSLOG
Packit 972a07
Packit 972a07
void
Packit 972a07
openlog_xs(ident, option, facility)
Packit 972a07
    INPUT:
Packit 972a07
        SV*   ident
Packit 972a07
        int   option
Packit 972a07
        int   facility
Packit 972a07
    PREINIT:
Packit 972a07
        STRLEN len;
Packit 972a07
        char*  ident_pv;
Packit 972a07
    CODE:
Packit 972a07
        ident_svptr = newSVsv(ident);
Packit 972a07
        ident_pv    = SvPV(ident_svptr, len);
Packit 972a07
        openlog(ident_pv, option, facility);
Packit 972a07
Packit 972a07
void
Packit 972a07
syslog_xs(priority, message)
Packit 972a07
    INPUT:
Packit 972a07
        int   priority
Packit 972a07
        const char * message
Packit 972a07
    CODE:
Packit 972a07
        syslog(priority, "%s", message);
Packit 972a07
Packit 972a07
int
Packit 972a07
setlogmask_xs(mask)
Packit 972a07
    INPUT:
Packit 972a07
        int mask
Packit 972a07
    CODE:
Packit 972a07
        RETVAL = setlogmask(mask);
Packit 972a07
    OUTPUT:
Packit 972a07
        RETVAL
Packit 972a07
Packit 972a07
void
Packit 972a07
closelog_xs()
Packit 972a07
    PREINIT:
Packit 972a07
        U32 refcnt;
Packit 972a07
    CODE:
Packit 972a07
        if (!ident_svptr)
Packit 972a07
            return;
Packit 972a07
        closelog();
Packit 972a07
        refcnt = SvREFCNT(ident_svptr);
Packit 972a07
        if (refcnt) {
Packit 972a07
            SvREFCNT_dec(ident_svptr);
Packit 972a07
            if (refcnt == 1)
Packit 972a07
                ident_svptr = NULL;
Packit 972a07
        }
Packit 972a07
Packit 972a07
#else  /* HAVE_SYSLOG */
Packit 972a07
Packit 972a07
void
Packit 972a07
openlog_xs(ident, option, facility)
Packit 972a07
    INPUT:
Packit 972a07
        SV*   ident
Packit 972a07
        int   option
Packit 972a07
        int   facility
Packit 972a07
    CODE:
Packit 972a07
Packit 972a07
void
Packit 972a07
syslog_xs(priority, message)
Packit 972a07
    INPUT:
Packit 972a07
        int   priority
Packit 972a07
        const char * message
Packit 972a07
    CODE:
Packit 972a07
Packit 972a07
int
Packit 972a07
setlogmask_xs(mask)
Packit 972a07
    INPUT:
Packit 972a07
        int mask
Packit 972a07
    CODE:
Packit 972a07
Packit 972a07
void
Packit 972a07
closelog_xs()
Packit 972a07
    CODE:
Packit 972a07
Packit 972a07
#endif /* HAVE_SYSLOG */