Don't (partially) apply changes to max entries in the file browser immediately. The setting affects a buffer that is allocated during boot, so code using that buffer should use the value that was in effect during boot. Add a note to the manual that a reboot is needed for the changes to be applied.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29798 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Magnus Holmgren 2011-04-30 11:00:26 +00:00
parent 16e793f5d1
commit ed2cfb8c1d
5 changed files with 12 additions and 14 deletions

View file

@ -285,7 +285,7 @@ int ft_load(struct tree_context* c, const char* tempdir)
c->dirsindir = 0;
c->dirfull = false;
for ( i=0; i < global_settings.max_files_in_dir; i++ ) {
for ( i=0; i < c->dircache_count; i++ ) {
int len;
struct dirent *entry = readdir(dir);
struct dirinfo info;

View file

@ -1288,7 +1288,7 @@ static int retrieve_entries(struct tree_context *c, int offset, bool init)
dptr++;
current_entry_count++;
if (current_entry_count >= global_settings.max_files_in_dir)
if (current_entry_count >= c->dircache_count)
{
logf("chunk mode #3: %d", current_entry_count);
c->dirfull = true;

View file

@ -95,7 +95,6 @@ static char lastdir[MAX_PATH];
#ifdef HAVE_TAGCACHE
static int lasttable, lastextra, lastfirstpos;
#endif
static int max_files = 0;
static bool reload_dir = false;
@ -391,7 +390,7 @@ static int update_dir(void)
#ifdef HAVE_TAGCACHE
!id3db &&
#endif
(tc.dirfull || tc.filesindir == global_settings.max_files_in_dir) )
(tc.dirfull || tc.filesindir == tc.dircache_count) )
{
splash(HZ, ID2P(LANG_SHOWDIR_BUFFER_FULL));
}
@ -1005,20 +1004,18 @@ int rockbox_browse(struct browse_context *browse)
void tree_mem_init(void)
{
/* We copy the settings value in case it is changed by the user. We can't
use it until the next reboot. */
max_files = global_settings.max_files_in_dir;
/* initialize tree context struct */
memset(&tc, 0, sizeof(tc));
tc.dirfilter = &global_settings.dirfilter;
tc.sort_dir = global_settings.sort_dir;
tc.name_buffer_size = AVERAGE_FILENAME_LENGTH * max_files;
tc.name_buffer_size = AVERAGE_FILENAME_LENGTH *
global_settings.max_files_in_dir;
tc.name_buffer = buffer_alloc(tc.name_buffer_size);
tc.dircache_size = max_files * sizeof(struct entry);
tc.dircache = buffer_alloc(tc.dircache_size);
tc.dircache_count = global_settings.max_files_in_dir;
tc.dircache = buffer_alloc(global_settings.max_files_in_dir *
sizeof(struct entry));
tree_get_filetypes(&filetypes, &filetypes_count);
}

View file

@ -84,7 +84,7 @@ struct tree_context {
* contains all files and dirs in the current
* dir (with filters applied) */
void* dircache;
int dircache_size;
int dircache_count; /* Number of entries in dircache */
char* name_buffer;
int name_buffer_size;
int dentry_size;

View file

@ -129,7 +129,7 @@ Settings are either \setting{Off} or 1 to 10 minutes in 1 minute steps. Then
This sub menu relates to limits in the Rockbox operating system.
\begin{description}
\item [Max Entries in File Browser.] This setting controls the limit on
the number of files that you can put in any particular directory in the
the number of files that you can see in any particular directory in the
file browser. You can configure the size to be between 50 and
10,000 files in steps of 50. The default is 400. Higher values will shorten
the music buffer, so you should increase this setting \emph{only} if you have
@ -141,7 +141,8 @@ This sub menu relates to limits in the Rockbox operating system.
music buffer, so you should increase this setting \emph{only} if you
have very large playlists.
\end{description}
\note{You will need to restart your player for changes to these options
to take effect.}
% TODO: this needs to be rewritten in another style, it lets you mix sound from another source into the music
\opt{player}{
\subsection{Line In} This option activates the line-in port on \dap, which is