Alibek Omarov
2 years ago
4 changed files with 134 additions and 0 deletions
@ -0,0 +1,117 @@
@@ -0,0 +1,117 @@
|
||||
#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
|
Loading…
Reference in new issue