cuesheet, cleanup tag code with strncmp
Change-Id: I97076266103d20e59537e4e0959a70cc12b207f6
This commit is contained in:
parent
2352cef6d0
commit
6d122e3932
1 changed files with 56 additions and 11 deletions
|
@ -165,6 +165,38 @@ static unsigned long parse_cue_index(const char *line)
|
|||
return offset;
|
||||
}
|
||||
|
||||
enum eCS_SUPPORTED_TAGS {
|
||||
eCS_TRACK = 0, eCS_INDEX_01, eCS_TITLE,
|
||||
eCS_PERFORMER, eCS_SONGWRITER, eCS_FILE,
|
||||
eCS_COUNT_TAGS_COUNT, eCS_NOTFOUND = -1
|
||||
};
|
||||
|
||||
static enum eCS_SUPPORTED_TAGS cuesheet_tag_get_option(const char *option)
|
||||
{
|
||||
#define CS_OPTN(str) {str, sizeof(str)-1}
|
||||
static const struct cs_option_t {
|
||||
const char *str;
|
||||
const int len;
|
||||
} cs_options[eCS_COUNT_TAGS_COUNT + 1] = {
|
||||
[eCS_TRACK] = CS_OPTN("TRACK"),
|
||||
[eCS_INDEX_01] = CS_OPTN("INDEX_01"),
|
||||
[eCS_TITLE] =CS_OPTN("TITLE"),
|
||||
[eCS_PERFORMER] =CS_OPTN("PERFORMER"),
|
||||
[eCS_SONGWRITER] =CS_OPTN("SONGWRITER"),
|
||||
[eCS_FILE] =CS_OPTN("FILE"),
|
||||
[eCS_COUNT_TAGS_COUNT] = {NULL, 0} /*SENTINEL*/
|
||||
};
|
||||
|
||||
const struct cs_option_t *op;
|
||||
for (int i=0; ((op=&cs_options[i]))->str != NULL; i++)
|
||||
{
|
||||
if (strncmp(option, op->str, op->len) == 0)
|
||||
return i;
|
||||
}
|
||||
return eCS_NOTFOUND;
|
||||
#undef CS_OPTN
|
||||
}
|
||||
|
||||
/* parse cuesheet "cue_file" and store the information in "cue" */
|
||||
bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
|
||||
{
|
||||
|
@ -245,11 +277,16 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
|
|||
}
|
||||
s = skip_whitespace(line);
|
||||
|
||||
if (!strncmp(s, "TRACK", 5))
|
||||
/* RECOGNIZED TAGS ***********************
|
||||
* eCS_TRACK = 0, eCS_INDEX_01, eCS_TITLE,
|
||||
* eCS_PERFORMER, eCS_SONGWRITER, eCS_FILE,
|
||||
*/
|
||||
enum eCS_SUPPORTED_TAGS option = cuesheet_tag_get_option(s);
|
||||
if (option == eCS_TRACK)
|
||||
{
|
||||
cue->track_count++;
|
||||
}
|
||||
else if (!strncmp(s, "INDEX 01", 8))
|
||||
else if (option == eCS_INDEX_01)
|
||||
{
|
||||
#if 0
|
||||
s = strchr(s,' ');
|
||||
|
@ -265,10 +302,7 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
|
|||
cue->tracks[cue->track_count-1].offset = parse_cue_index(s);
|
||||
#endif
|
||||
}
|
||||
else if (!strncmp(s, "TITLE", 5)
|
||||
|| !strncmp(s, "PERFORMER", 9)
|
||||
|| !strncmp(s, "SONGWRITER", 10)
|
||||
|| !strncmp(s, "FILE", 4))
|
||||
else if (option != eCS_NOTFOUND)
|
||||
{
|
||||
char *dest = NULL;
|
||||
char *string = get_string(s);
|
||||
|
@ -278,24 +312,24 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
|
|||
size_t count = MAX_NAME*3 + 1;
|
||||
size_t count8859 = MAX_NAME;
|
||||
|
||||
switch (*s)
|
||||
switch (option)
|
||||
{
|
||||
case 'T': /* TITLE */
|
||||
case eCS_TITLE: /* TITLE */
|
||||
dest = (cue->track_count <= 0) ? cue->title :
|
||||
cue->tracks[cue->track_count-1].title;
|
||||
break;
|
||||
|
||||
case 'P': /* PERFORMER */
|
||||
case eCS_PERFORMER: /* PERFORMER */
|
||||
dest = (cue->track_count <= 0) ? cue->performer :
|
||||
cue->tracks[cue->track_count-1].performer;
|
||||
break;
|
||||
|
||||
case 'S': /* SONGWRITER */
|
||||
case eCS_SONGWRITER: /* SONGWRITER */
|
||||
dest = (cue->track_count <= 0) ? cue->songwriter :
|
||||
cue->tracks[cue->track_count-1].songwriter;
|
||||
break;
|
||||
|
||||
case 'F': /* FILE */
|
||||
case eCS_FILE: /* FILE */
|
||||
if (is_embedded || cue->track_count > 0)
|
||||
break;
|
||||
|
||||
|
@ -303,6 +337,16 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
|
|||
count = MAX_PATH;
|
||||
count8859 = MAX_PATH/3;
|
||||
break;
|
||||
case eCS_TRACK:
|
||||
/*Fall-Through*/
|
||||
case eCS_INDEX_01:
|
||||
/*Fall-Through*/
|
||||
case eCS_COUNT_TAGS_COUNT:
|
||||
/*Fall-Through*/
|
||||
case eCS_NOTFOUND: /*Shouldn't happen*/
|
||||
logf(HZ * 2, "Bad Tag %d @ %s", (int) option, __func__);
|
||||
dest = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (dest)
|
||||
|
@ -319,6 +363,7 @@ bool parse_cuesheet(struct cuesheet_file *cue_file, struct cuesheet *cue)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_embedded)
|
||||
{
|
||||
bytes_left -= line_len;
|
||||
|
|
Loading…
Reference in a new issue