• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/minidlna/flac-1.2.1/src/test_grabbag/cuesheet/
1/* test_cuesheet - Simple tester for cuesheet routines in grabbag
2 * Copyright (C) 2002,2003,2004,2005,2006,2007  Josh Coalson
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17 */
18
19#if HAVE_CONFIG_H
20#  include <config.h>
21#endif
22
23#include <errno.h>
24#include <stdio.h>
25#include <stdlib.h>
26#include <string.h>
27#include "FLAC/assert.h"
28#include "FLAC/metadata.h"
29#include "share/grabbag.h"
30
31static int do_cuesheet(const char *infilename, FLAC__bool is_cdda, FLAC__uint64 lead_out_offset)
32{
33	FILE *fin, *fout;
34	const char *error_message;
35	char tmpfilename[4096];
36	unsigned last_line_read;
37	FLAC__StreamMetadata *cuesheet;
38
39	FLAC__ASSERT(strlen(infilename) + 2 < sizeof(tmpfilename));
40
41	/*
42	 * pass 1
43	 */
44	if(0 == strcmp(infilename, "-")) {
45		fin = stdin;
46	}
47	else if(0 == (fin = fopen(infilename, "r"))) {
48		fprintf(stderr, "can't open file %s for reading: %s\n", infilename, strerror(errno));
49		return 255;
50	}
51	if(0 != (cuesheet = grabbag__cuesheet_parse(fin, &error_message, &last_line_read, is_cdda, lead_out_offset))) {
52		if(fin != stdin)
53			fclose(fin);
54	}
55	else {
56		printf("pass1: parse error, line %u: \"%s\"\n", last_line_read, error_message);
57		if(fin != stdin)
58			fclose(fin);
59		return 1;
60	}
61	if(!FLAC__metadata_object_cuesheet_is_legal(cuesheet, is_cdda, &error_message)) {
62		printf("pass1: illegal cuesheet: \"%s\"\n", error_message);
63		FLAC__metadata_object_delete(cuesheet);
64		return 1;
65	}
66	sprintf(tmpfilename, "%s.1", infilename);
67	if(0 == (fout = fopen(tmpfilename, "w"))) {
68		fprintf(stderr, "can't open file %s for writing: %s\n", tmpfilename, strerror(errno));
69		FLAC__metadata_object_delete(cuesheet);
70		return 255;
71	}
72	grabbag__cuesheet_emit(fout, cuesheet, "\"dummy.wav\" WAVE");
73	FLAC__metadata_object_delete(cuesheet);
74	fclose(fout);
75
76	/*
77	 * pass 2
78	 */
79	if(0 == (fin = fopen(tmpfilename, "r"))) {
80		fprintf(stderr, "can't open file %s for reading: %s\n", tmpfilename, strerror(errno));
81		return 255;
82	}
83	if(0 != (cuesheet = grabbag__cuesheet_parse(fin, &error_message, &last_line_read, is_cdda, lead_out_offset))) {
84		if(fin != stdin)
85			fclose(fin);
86	}
87	else {
88		printf("pass2: parse error, line %u: \"%s\"\n", last_line_read, error_message);
89		if(fin != stdin)
90			fclose(fin);
91		return 1;
92	}
93	if(!FLAC__metadata_object_cuesheet_is_legal(cuesheet, is_cdda, &error_message)) {
94		printf("pass2: illegal cuesheet: \"%s\"\n", error_message);
95		FLAC__metadata_object_delete(cuesheet);
96		return 1;
97	}
98	sprintf(tmpfilename, "%s.2", infilename);
99	if(0 == (fout = fopen(tmpfilename, "w"))) {
100		fprintf(stderr, "can't open file %s for writing: %s\n", tmpfilename, strerror(errno));
101		FLAC__metadata_object_delete(cuesheet);
102		return 255;
103	}
104	grabbag__cuesheet_emit(fout, cuesheet, "\"dummy.wav\" WAVE");
105	FLAC__metadata_object_delete(cuesheet);
106	fclose(fout);
107
108	return 0;
109}
110
111int main(int argc, char *argv[])
112{
113	FLAC__uint64 lead_out_offset;
114	FLAC__bool is_cdda = false;
115	const char *usage = "usage: test_cuesheet cuesheet_file lead_out_offset [ cdda ]\n";
116
117	if(argc > 1 && 0 == strcmp(argv[1], "-h")) {
118		printf(usage);
119		return 0;
120	}
121
122	if(argc < 3 || argc > 4) {
123		fprintf(stderr, usage);
124		return 255;
125	}
126
127	lead_out_offset = (FLAC__uint64)strtoul(argv[2], 0, 10);
128	if(argc == 4) {
129		if(0 == strcmp(argv[3], "cdda"))
130			is_cdda = true;
131		else {
132			fprintf(stderr, usage);
133			return 255;
134		}
135	}
136
137	return do_cuesheet(argv[1], is_cdda, lead_out_offset);
138}
139