/* This file is part of vmod-binlog Copyright (C) 2013 Sergey Poznyakoff Vmod-binlog is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Vmod-binlog is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with vmod-binlog. If not, see . */ #include #define SIZE_T_MAX ((size_t)~0) #ifndef BINLOG_SIZE # define BINLOG_SIZE (1024*1024*1024) #endif #ifndef BINLOG_PATTERN # define BINLOG_PATTERN "%Y/%m/%d.log" #endif #ifndef BINLOG_INTERVAL # define BINLOG_INTERVAL 86400 #endif #ifndef BINLOG_UMASK # define BINLOG_UMASK 0077 #endif struct binlog_record { long nid; /* node ID */ long aid; /* article ID */ time_t ts; /* timestamp */ }; #define BINLOG_MAGIC_STR "NXCBINLOG" #define BINLOG_MAGIC_LEN (sizeof(BINLOG_MAGIC_STR) - 1) #define BINLOG_VERSION 0x00010000UL struct binlog_file_header { char magic[BINLOG_MAGIC_LEN]; char pad[16 - BINLOG_MAGIC_LEN]; uint32_t version; size_t recsize; size_t recnum; }; #define BINLOG_HEADER_SIZE \ ((sizeof(struct binlog_file_header) + sizeof(struct binlog_record) - 1) / \ sizeof(struct binlog_record)) union binlog_header { struct binlog_file_header hdr; struct binlog_record pad[BINLOG_HEADER_SIZE]; }; #define binlog_size(conf) \ (sizeof(union binlog_header) + \ (conf)->recidx * sizeof(struct binlog_record)) #define binlog_recnum(conf) \ (((conf)->size - sizeof(union binlog_header)) / \ sizeof(struct binlog_record))