Apache-LogFile
view release on metacpan or search on metacpan
array_header *format;
int log_fd;
#ifdef BUFFERED_LOGS
int outcnt;
char outbuf[LOG_BUFSIZE];
#endif
} config_log_state;
typedef config_log_state *Apache__LogFile;
/* when the startup pool is cleared, delete the caller's file
* from %INC so the log is re-opened
*/
static void inc_delete(void *data)
{
SV *file = (SV*)data;
/*fprintf(stderr, "removing %s from INC\n", SvPV(file,na));*/
(void)hv_delete_ent(GvHV(incgv), file, G_DISCARD, FALSE);
SvREFCNT_dec(file);
}
static void mark_for_inc_delete(SV *file)
{
pool *p = perl_get_startup_pool();
if(!p) croak("can't get startup pool!");
register_cleanup(p, (void*)SvREFCNT_inc(file),
inc_delete, inc_delete);
}
MODULE = Apache::LogFile PACKAGE = Apache::LogFile
Apache::LogFile
_new(self, file)
SV *self
char *file
PREINIT:
pool *p = perl_get_startup_pool();
CODE:
if(!p) croak("can't get startup pool!");
RETVAL = (config_log_state *)palloc(p, sizeof(config_log_state));
RETVAL->fname = file;
if (*RETVAL->fname == '|') {
char *pname = server_root_relative(p, (RETVAL->fname+1));
piped_log *pl = open_piped_log(p, pname);
if(pl == NULL) croak("can't open piped log `%s'", pname);
RETVAL->log_fd = piped_log_write_fd(pl);
}
else {
char *fname = server_root_relative(p, RETVAL->fname);
if ((RETVAL->log_fd = popenf(p, fname, xfer_flags, xfer_mode)) < 0) {
fprintf(stderr, "Apache::LogFile: could not open log file %s.\n",
fname);
exit(1);
}
}
OUTPUT:
RETVAL
int
print(self, ...)
Apache::LogFile self
ALIAS:
Apache::LogFile::PRINT = 1
PREINIT:
int i;
STRLEN len;
char *str;
CODE:
for(i=1; i<items; i++) {
str = SvPV(ST(i),len);
RETVAL += write(self->log_fd, str, len);
}
if(*(SvEND(ST(i-1)) - 1) != '\n')
RETVAL += write(self->log_fd, "\n", 1);
OUTPUT:
RETVAL
void
mark_for_inc_delete(file)
SV *file
( run in 1.747 second using v1.01-cache-2.11-cpan-13bb782fe5a )