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