diff options
| author | Thomas Martitz <kugel@rockbox.org> | 2011-06-20 20:12:15 +0000 |
|---|---|---|
| committer | Thomas Martitz <kugel@rockbox.org> | 2011-06-20 20:12:15 +0000 |
| commit | e0637255341a165e1e186e6f2836c614f0121c8b (patch) | |
| tree | 248fb995e73cfb4b623a5d041e3e28b311fbafde | |
| parent | 38da400e58b78f0fd399bdb8e52e1ba63aca75a7 (diff) | |
| download | rockbox-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.c | 4 | ||||
| -rw-r--r-- | apps/tagcache.c | 4 | ||||
| -rw-r--r-- | firmware/common/dircache.c | 9 | ||||
| -rw-r--r-- | firmware/include/dircache.h | 2 |
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); |