mirror of
https://github.com/w23/xash3d-fwgs
synced 2024-12-15 21:50:59 +01:00
118 lines
1.8 KiB
C
118 lines
1.8 KiB
C
|
#if 0
|
||
|
#include "build.h"
|
||
|
#if XASH_LINUX
|
||
|
#include <sys/inotify.h>
|
||
|
#include <errno.h>
|
||
|
#include <string.h>
|
||
|
#endif
|
||
|
#include "filesystem_internal.h"
|
||
|
#include "common/com_strings.h"
|
||
|
|
||
|
#define MAX_FS_WATCHES 256
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
#if XASH_LINUX
|
||
|
int fd;
|
||
|
int count;
|
||
|
struct
|
||
|
{
|
||
|
fs_event_callback_t callback;
|
||
|
int fd;
|
||
|
} watch[MAX_FS_WATCHES];
|
||
|
#endif // XASH_LINUX
|
||
|
} fsnotify;
|
||
|
|
||
|
#if XASH_LINUX
|
||
|
static qboolean FS_InotifyInit( void )
|
||
|
{
|
||
|
int fd;
|
||
|
|
||
|
if(( fd = inotify_init1( IN_NONBLOCK )) < 0 )
|
||
|
{
|
||
|
Con_Printf( S_ERROR "inotify_init1 failed: %s", strerror( errno ));
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
fsnotify.fd = fd;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
static qboolean FS_InotifyWasInit( void )
|
||
|
{
|
||
|
return fsnotify.fd >= 0;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
===============
|
||
|
FS_AddWatch
|
||
|
|
||
|
Adds on-disk path to filesystem watcher list
|
||
|
Every file modification will call back
|
||
|
===============
|
||
|
*/
|
||
|
int FS_AddWatch( const char *path, fs_event_callback_t callback )
|
||
|
{
|
||
|
#if XASH_LINUX
|
||
|
int fd;
|
||
|
const uint mask = IN_CREATE | IN_DELETE | IN_MODIFY;
|
||
|
|
||
|
if( !FS_InotifyWasInit() && !FS_InotifyInit())
|
||
|
return false;
|
||
|
|
||
|
if(( fd = inotify_add_watch( fsnotify.fd, path, mask )) < 0 )
|
||
|
{
|
||
|
Con_Printf( S_ERROR "inotify_add_watch failed: %s", strerror( errno ));
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
fsnotify.watch[fsnotify.count].fd = fd;
|
||
|
fsnotify.watch[fsnotify.count].callback = callback;
|
||
|
|
||
|
return true;
|
||
|
#else
|
||
|
return false;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
===============
|
||
|
FS_WatchFrame
|
||
|
|
||
|
Polls any changes and runs call backs
|
||
|
===============
|
||
|
*/
|
||
|
void FS_WatchFrame( void )
|
||
|
{
|
||
|
#if XASH_LINUX
|
||
|
int i;
|
||
|
|
||
|
for( i = 0; i < fsnotify.count; i++ )
|
||
|
{
|
||
|
struct inotify_event events;
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
===============
|
||
|
FS_WatchInitialize
|
||
|
|
||
|
initializes filesystem watcher subsystem
|
||
|
===============
|
||
|
*/
|
||
|
qboolean FS_WatchInitialize( void )
|
||
|
{
|
||
|
#if XASH_LINUX
|
||
|
fsnotify.fd = -1; // only call inotify init when requested
|
||
|
fsnotify.count = 0;
|
||
|
|
||
|
return true;
|
||
|
#else
|
||
|
return false;
|
||
|
#endif
|
||
|
}
|
||
|
#endif // 0
|