diff options
Diffstat (limited to 'firmware/include/dircache_redirect.h')
-rw-r--r-- | firmware/include/dircache_redirect.h | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/firmware/include/dircache_redirect.h b/firmware/include/dircache_redirect.h new file mode 100644 index 0000000000..15fb4bc38d --- /dev/null +++ b/firmware/include/dircache_redirect.h @@ -0,0 +1,198 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2014 by Michael Sevakis + * + * This program 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 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#ifndef _DIRCACHE_REDIRECT_H_ + +#include "dir.h" + +/*** + ** Internal redirects that depend upon whether or not dircache is made + **/ + +/** File binding **/ + +static inline void get_rootinfo_internal(struct file_base_info *infop) +{ +#ifdef HAVE_DIRCACHE + dircache_get_rootinfo(infop); +#else + (void)infop; +#endif +} + +static inline void fileobj_bind_file(struct file_base_binding *bindp) +{ +#ifdef HAVE_DIRCACHE + dircache_bind_file(bindp); +#else + file_binding_insert_last(bindp); +#endif +} + +static inline void fileobj_unbind_file(struct file_base_binding *bindp) +{ +#ifdef HAVE_DIRCACHE + dircache_unbind_file(bindp); +#else + file_binding_remove(bindp); +#endif +} + + +/** File event handlers **/ + +static inline void fileop_onopen_internal(struct filestr_base *stream, + struct file_base_info *srcinfop, + unsigned int callflags) +{ + fileobj_fileop_open(stream, srcinfop, callflags); +} + +static inline void fileop_onclose_internal(struct filestr_base *stream) +{ + fileobj_fileop_close(stream); +} + +static inline void fileop_oncreate_internal(struct filestr_base *stream, + struct file_base_info *srcinfop, + unsigned int callflags, + struct file_base_info *dirinfop, + const char *basename) +{ +#ifdef HAVE_DIRCACHE + dircache_dcfile_init(&srcinfop->dcfile); +#endif + fileobj_fileop_create(stream, srcinfop, callflags); +#ifdef HAVE_DIRCACHE + struct dirinfo_native din; + fill_dirinfo_native(&din); + dircache_fileop_create(dirinfop, stream->bindp, basename, &din); +#endif + (void)dirinfop; (void)basename; +} + +static inline void fileop_onremove_internal(struct filestr_base *stream, + struct file_base_info *oldinfop) +{ + fileobj_fileop_remove(stream, oldinfop); +#ifdef HAVE_DIRCACHE + dircache_fileop_remove(stream->bindp); +#endif +} + +static inline void fileop_onrename_internal(struct filestr_base *stream, + struct file_base_info *oldinfop, + struct file_base_info *dirinfop, + const char *basename) +{ + fileobj_fileop_rename(stream, oldinfop); +#ifdef HAVE_DIRCACHE + dircache_fileop_rename(dirinfop, stream->bindp, basename); +#endif + (void)dirinfop; (void)basename; +} + +static inline void fileop_onsync_internal(struct filestr_base *stream) +{ + fileobj_fileop_sync(stream); +#ifdef HAVE_DIRCACHE + struct dirinfo_native din; + fill_dirinfo_native(&din); + dircache_fileop_sync(stream->bindp, &din); +#endif +} + +static inline void fileop_ontruncate_internal(struct filestr_base *stream) +{ + fileobj_fileop_truncate(stream); +} + +static inline void volume_onmount_internal(IF_MV_NONVOID(int volume)) +{ +#ifdef HAVE_DIRCACHE + dircache_mount(); +#endif + IF_MV( (void)volume; ) +} + +static inline void volume_onunmount_internal(IF_MV_NONVOID(int volume)) +{ + fileobj_mgr_unmount(IF_MV(volume)); +#ifdef HAVE_DIRCACHE + dircache_unmount(IF_MV(volume)); +#endif +} + + +/** Directory reading **/ + +static inline int readdir_dirent(struct filestr_base *stream, + struct dirscan_info *scanp, + struct dirent *entry) +{ +#ifdef HAVE_DIRCACHE + return dircache_readdir_dirent(stream, scanp, entry); +#else + return uncached_readdir_dirent(stream, scanp, entry); +#endif +} + +static inline void rewinddir_dirent(struct dirscan_info *scanp) +{ +#ifdef HAVE_DIRCACHE + dircache_rewinddir_dirent(scanp); +#else + uncached_rewinddir_dirent(scanp); +#endif +} + +static inline int readdir_internal(struct filestr_base *stream, + struct file_base_info *infop, + struct fat_direntry *fatent) +{ +#ifdef HAVE_DIRCACHE + return dircache_readdir_internal(stream, infop, fatent); +#else + return uncached_readdir_internal(stream, infop, fatent); +#endif +} + +static inline void rewinddir_internal(struct file_base_info *infop) +{ +#ifdef HAVE_DIRCACHE + dircache_rewinddir_internal(infop); +#else + uncached_rewinddir_internal(infop); +#endif +} + + +/** Misc. stuff **/ + +static inline struct fat_direntry *get_dir_fatent_dircache(void) +{ +#ifdef HAVE_DIRCACHE + return get_dir_fatent(); +#else + return NULL; +#endif +} + +#endif /* _DIRCACHE_REDIRECT_H_ */ |