diff --git a/src/lib/cd.c b/src/lib/cd.c index 67b2a23..516af09 100644 --- a/src/lib/cd.c +++ b/src/lib/cd.c @@ -126,7 +126,7 @@ Cdtext *cd_get_cdtext(Cd *cd) Track *cd_add_track(Cd *cd) { - if (MAXTRACK - 1 > cd->ntrack) { + if (MAXTRACK > cd->ntrack) { cd->ntrack++; } else { fprintf(stderr, "too many tracks\n"); @@ -146,7 +146,7 @@ int cd_get_ntrack(Cd *cd) Track *cd_get_track(Cd *cd, int i) { - if (0 < i <= cd->ntrack) { + if (0 < i && i <= cd->ntrack) { return cd->track[i - 1]; } @@ -266,7 +266,7 @@ Cdtext *track_get_cdtext(Track *track) void track_add_index(Track *track, long index) { - if (MAXTRACK - 1 > track->nindex) { + if (MAXINDEX > track->nindex) { track->nindex++; } else { fprintf(stderr, "too many indexes\n"); @@ -283,7 +283,7 @@ int track_get_nindex(Track *track) long track_get_index(Track *track, int i) { - if (0 <= i < track->nindex) { + if (0 <= i && i < track->nindex) { return track->index[i]; } diff --git a/src/lib/cuefile.c b/src/lib/cuefile.c index 66bf475..3975c72 100644 --- a/src/lib/cuefile.c +++ b/src/lib/cuefile.c @@ -18,7 +18,7 @@ Cd *cf_parse(char *name, int *format) if (UNKNOWN == *format) { if (UNKNOWN == (*format = cf_format_from_suffix(name))) { - fprintf(stderr, "%s: unknown format\n", name); + fprintf(stderr, "%s: unknown file suffix\n", name); return NULL; } } @@ -52,7 +52,7 @@ int cf_print(char *name, int *format, Cd *cd) if (UNKNOWN == *format) { if (UNKNOWN == (*format = cf_format_from_suffix(name))) { - fprintf(stderr, "%s: unknown format\n", name); + fprintf(stderr, "%s: unknown file suffix\n", name); return -1; } } diff --git a/src/lib/time.c b/src/lib/time.c index 9f38f25..d9b8845 100644 --- a/src/lib/time.c +++ b/src/lib/time.c @@ -34,7 +34,7 @@ void time_frame_to_msf(long frame, int *m, int *s, int *f) /* print frame in mm:ss:ff format */ char *time_frame_to_mmssff(long f) { - static char msf[9]; + static char msf[10]; int minutes, seconds, frames; msf_frame_to_msf(f, &minutes, &seconds, &frames); diff --git a/src/tools/cueprint.c b/src/tools/cueprint.c index 37d2db6..754e13d 100644 --- a/src/tools/cueprint.c +++ b/src/tools/cueprint.c @@ -264,7 +264,7 @@ void print_conv(char *start, int length, Cd *cd, int trackno) printf(conv, value.sval); break; default: - printf("%d: ", strlen(conv)); + printf("%zu: ", strlen(conv)); printf("%s", conv); } diff --git a/src/tools/cuetag.sh b/src/tools/cuetag.sh index 73f4660..19229e4 100755 --- a/src/tools/cuetag.sh +++ b/src/tools/cuetag.sh @@ -27,9 +27,13 @@ usage() # for FLAC and Ogg Vorbis files vorbis() { + trackno=$1; shift + file="$1"; shift + fields="$@" + # FLAC tagging # --remove-vc-all overwrites existing comments - METAFLAC="metaflac --remove-vc-all --import-vc-from=-" + METAFLAC="metaflac --remove-all-tags --import-tags-from=-" # Ogg Vorbis tagging # -w overwrites existing comments @@ -40,7 +44,7 @@ vorbis() # TODO: this also outputs to stdout TXTFILE="tee" - case "$2" in + case "$file" in *.[Ff][Ll][Aa][Cc]) VORBISTAG=$METAFLAC ;; @@ -55,8 +59,9 @@ vorbis() # space seperated list of recomended stardard field names # see http://www.xiph.org/ogg/vorbis/doc/v-comment.html # TRACKTOTAL is not in the Xiph recomendation, but is in common use - - fields='TITLE VERSION ALBUM TRACKNUMBER TRACKTOTAL ARTIST PERFORMER COPYRIGHT LICENSE ORGANIZATION DESCRIPTION GENRE DATE LOCATION CONTACT ISRC' + + [ -n "$fields" ] || + fields='TITLE VERSION ALBUM TRACKNUMBER TRACKTOTAL ARTIST PERFORMER COPYRIGHT LICENSE ORGANIZATION DESCRIPTION GENRE DATE LOCATION CONTACT ISRC' # fields' corresponding cueprint conversion characters # seperate alternates with a space @@ -64,8 +69,8 @@ vorbis() TITLE='%t' VERSION='' ALBUM='%T' - TRACKNUMBER='%n' - TRACKTOTAL='%N' + TRACKNUMBER='%02n' + TRACKTOTAL='%02N' ARTIST='%c %p' PERFORMER='%p' COPYRIGHT='' @@ -79,21 +84,31 @@ vorbis() ISRC='%i %u' (for field in $fields; do - value="" - for conv in $(eval echo \$$field); do - value=$($CUEPRINT -n $1 -t "$conv\n" $cue_file) - - if [ -n "$value" ]; then - echo "$field=$value" - break - fi - done - done) | $VORBISTAG "$2" + case "$field" in + (*=*) echo "$field";; + (*) + value="" + for conv in $(eval echo \$$field); do + value=$($CUEPRINT -n $trackno -t "$conv\n" "$cue_file") + + if [ -n "$value" ]; then + echo "$field=$value" + break + fi + done + ;; + esac + done) | $VORBISTAG "$file" } id3() { - MP3INFO=mp3info + MP3TAG=$(which mid3v2) \ + || MP3TAG=$(which id3v2) + if [ -z "${MP3TAG}" ]; then + echo "error: not found '(m)id3v2'." + exit 1 + fi # space seperated list of ID3 v1.1 tags # see http://id3lib.sourceforge.net/id3/idev1.html @@ -112,37 +127,42 @@ id3() TRACKNUMBER='%n' for field in $fields; do - value="" - for conv in $(eval echo \$$field); do - value=$($CUEPRINT -n $1 -t "$conv\n" $cue_file) - - if [ -n "$value" ]; then - break - fi - done + case "$field" in + *=*) value="${field#*=}";; + *) + value="" + for conv in $(eval echo \$$field); do + value=$($CUEPRINT -n $1 -t "$conv\n" "$cue_file") + + if [ -n "$value" ]; then + break + fi + done + ;; + esac if [ -n "$value" ]; then case $field in TITLE) - $MP3INFO -t "$value" "$2" + $MP3TAG -t "$value" "$2" ;; ALBUM) - $MP3INFO -l "$value" "$2" + $MP3TAG -A "$value" "$2" ;; ARTIST) - $MP3INFO -a "$value" "$2" + $MP3TAG -a "$value" "$2" ;; YEAR) - $MP3INFO -y "$value" "$2" + $MP3TAG -y "$value" "$2" ;; COMMENT) - $MP3INFO -c "$value" "$2" + $MP3TAG -c "$value" "$2" ;; GENRE) - $MP3INFO -g "$value" "$2" + $MP3TAG -g "$value" "$2" ;; TRACKNUMBER) - $MP3INFO -n "$value" "$2" + $MP3TAG -T "$value" "$2" ;; esac fi @@ -159,23 +179,32 @@ main() cue_file=$1 shift - ntrack=$(cueprint -d '%N' $cue_file) + ntrack=$(cueprint -d '%N' "$cue_file") trackno=1 + FILES= FIELDS= + for arg in "$@"; do + case "$arg" in + *.*) FILES="$FILES $arg";; + *) FIELDS="$FIELDS $arg";; + esac + done + + set -- $FILES if [ $# -ne $ntrack ]; then echo "warning: number of files does not match number of tracks" fi - for file in $@; do + for file in "$@"; do case $file in *.[Ff][Ll][Aa][Cc]) - vorbis $trackno "$file" + vorbis $trackno "$file" $FIELDS ;; *.[Oo][Gg][Gg]) - vorbis $trackno "$file" + vorbis $trackno "$file" $FIELDS ;; *.[Mm][Pp]3) - id3 $trackno "$file" + id3 $trackno "$file" $FIELDS ;; *.[Tt][Xx][Tt]) vorbis $trackno "$file"