summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2011-06-20 20:12:15 +0000
committerThomas Martitz <kugel@rockbox.org>2011-06-20 20:12:15 +0000
commite0637255341a165e1e186e6f2836c614f0121c8b (patch)
tree248fb995e73cfb4b623a5d041e3e28b311fbafde
parent38da400e58b78f0fd399bdb8e52e1ba63aca75a7 (diff)
downloadrockbox-e0637255341a165e1e186e6f2836c614f0121c8b.zip
rockbox-e0637255341a165e1e186e6f2836c614f0121c8b.tar.gz
rockbox-e0637255341a165e1e186e6f2836c614f0121c8b.tar.bz2
rockbox-e0637255341a165e1e186e6f2836c614f0121c8b.tar.xz
Dircache: Return the size of the result string in dircache_copy_path() so that callers don't need to call strlen on it.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30034 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/playlist.c4
-rw-r--r--apps/tagcache.c4
-rw-r--r--firmware/common/dircache.c9
-rw-r--r--firmware/include/dircache.h2
4 files changed, 11 insertions, 8 deletions
diff --git a/apps/playlist.c b/apps/playlist.c
index 62f85ea..dcf2fe1 100644
--- a/apps/playlist.c
+++ b/apps/playlist.c
@@ -1353,8 +1353,8 @@ static int get_filename(struct playlist_info* playlist, int index, int seek,
{
if (playlist->filenames[index] != NULL)
{
- dircache_copy_path(playlist->filenames[index], tmp_buf, sizeof(tmp_buf)-1);
- max = strlen(tmp_buf);
+ max = dircache_copy_path(playlist->filenames[index],
+ tmp_buf, sizeof(tmp_buf)-1);
}
}
#else
diff --git a/apps/tagcache.c b/apps/tagcache.c
index 0c85fc5..080f419 100644
--- a/apps/tagcache.c
+++ b/apps/tagcache.c
@@ -1481,10 +1481,10 @@ static bool get_next(struct tagcache_search *tcs)
if (tcs->type == tag_filename && (flag & FLAG_DIRCACHE)
&& is_dircache_intact())
{
- dircache_copy_path((struct dircache_entry *)tcs->position,
+ size_t len = dircache_copy_path((struct dircache_entry *)tcs->position,
buf, sizeof buf);
+ tcs->result_len = len + 1;
tcs->result = buf;
- tcs->result_len = strlen(buf) + 1;
tcs->ramresult = false;
return true;
diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c
index dc662bb..3eae85e 100644
--- a/firmware/common/dircache.c
+++ b/firmware/common/dircache.c
@@ -932,16 +932,19 @@ static size_t copy_path_helper(const struct dircache_entry *entry, char *buf, si
/**
* Function to copy the full absolute path from dircache to the given buffer
* using the given dircache_entry pointer.
+ *
+ * Returns the size of the resulting string, or 0 if an error occured
*/
-void dircache_copy_path(const struct dircache_entry *entry, char *buf, int size)
+size_t dircache_copy_path(const struct dircache_entry *entry, char *buf, size_t size)
{
- if (size <= 0 || !buf)
- return ;
+ if (!size || !buf)
+ return 0;
buf[0] = '/';
size_t res = copy_path_helper(entry, buf, size);
/* fixup trailing '/' */
buf[res] = '\0';
+ return res;
}
/* --- Directory cache live updating functions --- */
diff --git a/firmware/include/dircache.h b/firmware/include/dircache.h
index 49e804c..716d1fb 100644
--- a/firmware/include/dircache.h
+++ b/firmware/include/dircache.h
@@ -100,7 +100,7 @@ int dircache_get_reserve_used(void);
int dircache_get_build_ticks(void);
void dircache_disable(void);
const struct dircache_entry *dircache_get_entry_ptr(const char *filename);
-void dircache_copy_path(const struct dircache_entry *entry, char *buf, int size);
+size_t dircache_copy_path(const struct dircache_entry *entry, char *buf, size_t size);
void dircache_bind(int fd, const char *path);
void dircache_update_filesize(int fd, long newsize, long startcluster);