Commit | Line | Data |
---|---|---|
460b9539 | 1 | /* |
2 | * This file is part of DisOrder. | |
8a886602 | 3 | * Copyright (C) 2004, 2005, 2007, 2008, 2010 Richard Kettlewell |
460b9539 | 4 | * |
e7eb3a27 | 5 | * This program is free software: you can redistribute it and/or modify |
460b9539 | 6 | * it under the terms of the GNU General Public License as published by |
e7eb3a27 | 7 | * the Free Software Foundation, either version 3 of the License, or |
460b9539 | 8 | * (at your option) any later version. |
9 | * | |
e7eb3a27 RK |
10 | * This program is distributed in the hope that it will be useful, |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | * GNU General Public License for more details. | |
14 | * | |
460b9539 | 15 | * You should have received a copy of the GNU General Public License |
e7eb3a27 | 16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
460b9539 | 17 | */ |
132a5a4a RK |
18 | /** @file plugins/tracklength.c |
19 | * @brief Plugin to compute track lengths | |
20 | * | |
21 | * Currently implements MP3, OGG, FLAC and WAV. | |
22 | */ | |
28e9141a | 23 | #include "tracklength.h" |
c57f1201 | 24 | |
460b9539 | 25 | static const struct { |
26 | const char *ext; | |
27 | long (*fn)(const char *path); | |
28 | } file_formats[] = { | |
c57f1201 | 29 | { ".FLAC", tl_flac }, |
460b9539 | 30 | { ".MP3", tl_mp3 }, |
31 | { ".OGG", tl_ogg }, | |
32 | { ".WAV", tl_wav }, | |
c57f1201 | 33 | { ".flac", tl_flac }, |
460b9539 | 34 | { ".mp3", tl_mp3 }, |
35 | { ".ogg", tl_ogg }, | |
36 | { ".wav", tl_wav } | |
37 | }; | |
38 | #define N_FILE_FORMATS (int)(sizeof file_formats / sizeof *file_formats) | |
39 | ||
40 | long disorder_tracklength(const char attribute((unused)) *track, | |
41 | const char *path) { | |
42 | const char *ext = strrchr(path, '.'); | |
43 | int l, r, m = 0, c = 0; /* quieten compiler */ | |
44 | ||
45 | if(ext) { | |
46 | l = 0; | |
47 | r = N_FILE_FORMATS - 1; | |
48 | while(l <= r && (c = strcmp(ext, file_formats[m = (l + r) / 2].ext))) | |
49 | if(c < 0) | |
50 | r = m - 1; | |
51 | else | |
52 | l = m + 1; | |
53 | if(!c) | |
54 | return file_formats[m].fn(path); | |
55 | } | |
56 | return 0; | |
57 | } | |
58 | ||
59 | /* | |
60 | Local Variables: | |
61 | c-basic-offset:2 | |
62 | comment-column:40 | |
63 | fill-column:79 | |
64 | End: | |
65 | */ |