diff options
author | Michael Hohmuth <sideral@rockbox.org> | 2011-07-31 16:26:35 +0000 |
---|---|---|
committer | Michael Hohmuth <sideral@rockbox.org> | 2011-07-31 16:26:35 +0000 |
commit | eab7e747788bd633104019ab82bc75b384a95eff (patch) | |
tree | 6a2660b83b6b0448986b0f5813458e09ce0774f2 /apps/tagcache.c | |
parent | accea18ded5d2f1bb4db3118f9c7bfa994a2f77d (diff) | |
download | rockbox-eab7e747788bd633104019ab82bc75b384a95eff.tar.gz rockbox-eab7e747788bd633104019ab82bc75b384a95eff.zip |
FS#12132 patch 6, part 2: tagnavi.config: Add support for "basename"
in formats and conditions. The basename is the non-directory part of
a file's pathname.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30230 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/tagcache.c')
-rw-r--r-- | apps/tagcache.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/apps/tagcache.c b/apps/tagcache.c index 089bba13aa..e841d8e420 100644 --- a/apps/tagcache.c +++ b/apps/tagcache.c @@ -871,6 +871,10 @@ static long check_virtual_tags(int tag, int idx_id, - find_tag(tag_commitid, idx_id, idx) - 1; break; + case tag_virt_basename: + tag = tag_filename; /* return filename; caller handles basename */ + /* FALLTHRU */ + default: data = find_tag(tag, idx_id, idx); } @@ -1011,7 +1015,8 @@ static bool check_clauses(struct tagcache_search *tcs, if (!TAGCACHE_IS_NUMERIC(clause->tag)) { - if (clause->tag == tag_filename) + if (clause->tag == tag_filename + || clause->tag == tag_virt_basename) { retrieve(tcs, idx, tag_filename, buf, sizeof buf); } @@ -1029,7 +1034,11 @@ static bool check_clauses(struct tagcache_search *tcs, if (!TAGCACHE_IS_NUMERIC(clause->tag)) { - int fd = tcs->idxfd[clause->tag]; + int tag = clause->tag; + if (tag == tag_virt_basename) + tag = tag_filename; + + int fd = tcs->idxfd[tag]; lseek(fd, seek, SEEK_SET); ecread_tagfile_entry(fd, &tfe); if (tfe.tag_length >= (int)sizeof(buf)) @@ -1047,6 +1056,13 @@ static bool check_clauses(struct tagcache_search *tcs, } } + if (clause->tag == tag_virt_basename) + { + char *basename = strrchr(str, '/'); + if (basename) + str = basename + 1; + } + if (!check_against_clause(seek, str, clause)) { /* Clause failed -- try finding a logical-or clause */ |