diff options
author | William Wilgus <wilgus.william@gmail.com> | 2022-03-03 07:37:03 -0500 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2022-03-03 18:58:07 -0500 |
commit | 9daacabd658508d2607a64b288c9bce7a635fb15 (patch) | |
tree | ce96538ea82a4176f00f8eb9531711db7dea5750 /firmware/include/dircache_redirect.h | |
parent | f88ea12bacf381ad4f39ba2328c806e772c0dda8 (diff) | |
download | rockbox-9daacabd658508d2607a64b288c9bce7a635fb15.tar.gz rockbox-9daacabd658508d2607a64b288c9bce7a635fb15.zip |
[RESTORED!] Allow mounting of any directory as the root directory.
Provide definitions for the macros:
* RB_ROOT_VOL_HIDDEN(v) to exclude certain items from the root.
* RB_ROOT_CONTENTS to return a string with the name of the
directory to mount in the root.
Defaults are in export/rbpaths.h
It's a bit much for those that don't need the full functionality.
Some conditional define can cut it back a lot to cut out things only
needed if alternate root mounts are required. I'm just not bothering
yet. The basic concept would be applied to all targets to keep file
code from forking too much.
Change-Id: I3b5a14c530ff4b10d97f67636237d96875eb8969
Author: Michael Sevakis
Diffstat (limited to 'firmware/include/dircache_redirect.h')
-rw-r--r-- | firmware/include/dircache_redirect.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/firmware/include/dircache_redirect.h b/firmware/include/dircache_redirect.h index 9fae16b551..d7b9626c01 100644 --- a/firmware/include/dircache_redirect.h +++ b/firmware/include/dircache_redirect.h | |||
@@ -20,7 +20,10 @@ | |||
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #ifndef _DIRCACHE_REDIRECT_H_ | 21 | #ifndef _DIRCACHE_REDIRECT_H_ |
22 | 22 | ||
23 | #include "rbpaths.h" | ||
24 | #include "pathfuncs.h" | ||
23 | #include "dir.h" | 25 | #include "dir.h" |
26 | #include "dircache.h" | ||
24 | 27 | ||
25 | /*** | 28 | /*** |
26 | ** Internal redirects that depend upon whether or not dircache is made | 29 | ** Internal redirects that depend upon whether or not dircache is made |
@@ -123,10 +126,20 @@ static inline void fileop_onsync_internal(struct filestr_base *stream) | |||
123 | 126 | ||
124 | static inline void volume_onmount_internal(IF_MV_NONVOID(int volume)) | 127 | static inline void volume_onmount_internal(IF_MV_NONVOID(int volume)) |
125 | { | 128 | { |
129 | #ifdef HAVE_MULTIVOLUME | ||
130 | char path[VOL_MAX_LEN+2]; | ||
131 | make_volume_root(volume, path); | ||
132 | #else | ||
133 | const char *path = PATH_ROOTSTR; | ||
134 | #endif | ||
135 | root_mount_path(path, RB_ROOT_VOL_HIDDEN(volume) ? NSITEM_HIDDEN : 0); | ||
136 | #ifdef HAVE_MULTIVOLUME | ||
137 | if (volume == path_strip_volume(RB_ROOT_CONTENTS_DIR, NULL, false)) | ||
138 | #endif | ||
139 | root_mount_path(RB_ROOT_CONTENTS_DIR, NSITEM_CONTENTS); | ||
126 | #ifdef HAVE_DIRCACHE | 140 | #ifdef HAVE_DIRCACHE |
127 | dircache_mount(); | 141 | dircache_mount(); |
128 | #endif | 142 | #endif |
129 | IF_MV( (void)volume; ) | ||
130 | } | 143 | } |
131 | 144 | ||
132 | static inline void volume_onunmount_internal(IF_MV_NONVOID(int volume)) | 145 | static inline void volume_onunmount_internal(IF_MV_NONVOID(int volume)) |
@@ -135,6 +148,7 @@ static inline void volume_onunmount_internal(IF_MV_NONVOID(int volume)) | |||
135 | /* First, to avoid update of something about to be destroyed anyway */ | 148 | /* First, to avoid update of something about to be destroyed anyway */ |
136 | dircache_unmount(IF_MV(volume)); | 149 | dircache_unmount(IF_MV(volume)); |
137 | #endif | 150 | #endif |
151 | root_unmount_volume(IF_MV(volume)); | ||
138 | fileobj_mgr_unmount(IF_MV(volume)); | 152 | fileobj_mgr_unmount(IF_MV(volume)); |
139 | } | 153 | } |
140 | 154 | ||
@@ -152,7 +166,7 @@ static inline void fileop_onunmount_internal(struct filestr_base *stream) | |||
152 | 166 | ||
153 | static inline int readdir_dirent(struct filestr_base *stream, | 167 | static inline int readdir_dirent(struct filestr_base *stream, |
154 | struct dirscan_info *scanp, | 168 | struct dirscan_info *scanp, |
155 | struct dirent *entry) | 169 | struct DIRENT *entry) |
156 | { | 170 | { |
157 | #ifdef HAVE_DIRCACHE | 171 | #ifdef HAVE_DIRCACHE |
158 | return dircache_readdir_dirent(stream, scanp, entry); | 172 | return dircache_readdir_dirent(stream, scanp, entry); |