lsyncd/core/lsyncd.h

128 lines
2.9 KiB
C
Raw Normal View History

2012-02-15 19:10:50 +00:00
/**
* lsyncd.h Live (Mirror) Syncing Demon
*
* Interface between the core modules.
*
* License: GPLv2 (see COPYING) or any later version
* Authors: Axel Kittenberger <axkibe@gmail.com>
*
*/
2010-11-22 14:54:50 +00:00
#ifndef LSYNCD_H
#define LSYNCD_H
2012-02-15 19:10:50 +00:00
// some older machines need this to see pselect
#define _DEFAULT_SOURCE 1
#define _XOPEN_SOURCE 700
#define _DARWIN_C_SOURCE 1
2012-09-25 15:29:12 +00:00
#define LUA_COMPAT_ALL
2016-11-24 14:44:08 +00:00
#define LUA_COMPAT_5_1
2012-09-25 15:29:12 +00:00
2012-02-15 19:10:50 +00:00
// includes needed for headerfile
2010-11-22 14:54:50 +00:00
#include "config.h"
2010-11-22 21:06:02 +00:00
#include <signal.h>
#include <stdbool.h>
2010-11-22 14:54:50 +00:00
#include <stdlib.h>
#define LUA_USE_APICHECK 1
#include <lua.h>
#define LSYNCD_CORE_LIBNAME "core"
2018-03-13 11:29:43 +00:00
#define LSYNCD_INOTIFY_LIBNAME "inotify"
2016-11-24 14:44:08 +00:00
/*
| Workaround to register a library for different lua versions.
*/
#if LUA_VERSION_NUM > 502
#define lua_compat_register( L, name, lib ) \
{ \
lua_newtable((L)); \
luaL_setfuncs((L), (lib), 0); \
}
#else
#define lua_compat_register( L, name, lib ) \
{luaL_register( (L), (name), (lib) );}
#endif
/*
* Lsyncd runtime configuration
*/
2010-11-22 21:06:02 +00:00
extern struct settings {
2012-02-15 19:10:50 +00:00
char * log_file; // If not NULL Lsyncd logs into this file.
bool log_syslog; // If true Lsyncd sends log messages to syslog
char * log_ident; // If not NULL the syslog identity (otherwise "Lsyncd")
int log_facility; // The syslog facility
int log_level; // -1 logs everything, 0 normal mode, LOG_ERROR errors only.
2010-11-22 21:06:02 +00:00
} settings;
/*
* time comparisons - wrap around safe
*/
2010-11-22 14:54:50 +00:00
#define time_after(a,b) ((long)(b) - (long)(a) < 0)
#define time_before(a,b) time_after(b,a)
#define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0)
#define time_before_eq(a,b) time_after_eq(b,a)
2012-02-15 19:10:50 +00:00
// returns (on Lua stack) the current kernels * clock state (jiffies)
extern int l_now(lua_State *L);
2010-11-22 14:54:50 +00:00
2012-02-15 19:10:50 +00:00
// pushes a runner function and the runner error handler onto Lua stack
extern void load_mci(lua_State *L, const char *name);
2010-11-22 21:06:02 +00:00
2012-02-15 19:10:50 +00:00
// set to 1 on hup signal or term signal
2010-11-22 21:06:02 +00:00
extern volatile sig_atomic_t hup;
extern volatile sig_atomic_t term;
/*
2018-03-23 08:34:33 +00:00
| File-descriptor helpers
*/
2012-02-15 19:10:50 +00:00
// Sets the non-blocking flag for a file descriptor.
2010-11-22 14:54:50 +00:00
extern void non_block_fd(int fd);
2012-02-15 19:10:50 +00:00
// Sets the close-on-exit flag for a file descriptor.
2010-11-22 14:54:50 +00:00
extern void close_exec_fd(int fd);
/**
* An observance to be called when a file descritor becomes
* read-ready or write-ready.
*/
struct observance {
2012-02-15 19:10:50 +00:00
// The file descriptor to observe.
int fd;
2012-02-15 19:10:50 +00:00
// Function to call when read becomes ready.
void (*ready)(lua_State *, struct observance *);
2012-02-15 19:10:50 +00:00
// Function to call when write becomes ready.
void (*writey)(lua_State *, struct observance *);
2012-02-15 19:10:50 +00:00
// Function to call to clean up
void (*tidy)(struct observance *);
2012-02-15 19:10:50 +00:00
// Extra tokens to pass to the functions.
void *extra;
};
2012-02-15 19:10:50 +00:00
// makes the core observe a file descriptor
extern void observe_fd(
2012-02-15 19:10:50 +00:00
int fd,
void (*ready) (lua_State *, struct observance *),
void (*writey)(lua_State *, struct observance *),
void (*tidy) (struct observance *),
void *extra
);
2010-11-22 21:06:02 +00:00
2012-02-15 19:10:50 +00:00
// stops the core to observe a file descriptor
extern void nonobserve_fd(int fd);
2010-11-22 21:06:02 +00:00
2010-11-22 14:54:50 +00:00
#endif