Mercurial > mplayer.hg
annotate stream/stream_cddb.c @ 32734:cc58a1e919d9
Allow character in the font description file to be in UTF-8.
A character defined in the font description file can be either
an ASCII character, any character in the range of 0x80 to 0xFF
or - to avoid character set problems, and that is recommended -
a character in UTF-8 encoding now.
Non-ASCII characters will be stored in the nonASCIIidx array.
The indices 0..127 of this array correspond to the indices
128..255 of the Fnt array.
(This also settles the "Translate messages shown in the GUI window(s)
from UTF-8" issue.)
author | ib |
---|---|
date | Thu, 27 Jan 2011 18:04:19 +0000 |
parents | b39155e98ac3 |
children | bf3f244d7bc1 |
rev | line source |
---|---|
6474 | 1 /* |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
2 * CDDB HTTP protocol |
30426
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
3 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
4 * Copyright (C) 2002 Bertrand Baudet <bertrand_baudet@yahoo.com> |
6474 | 5 * |
6 * Implementation follow the freedb.howto1.06.txt specification | |
7 * from http://freedb.freedb.org | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
8 * |
6474 | 9 * discid computation by Jeremy D. Zawodny |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
10 * Copyright (c) 1998-2000 Jeremy D. Zawodny <Jeremy@Zawodny.com> |
30426
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
11 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
12 * This file is part of MPlayer. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
13 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
14 * MPlayer is free software; you can redistribute it and/or modify |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
15 * it under the terms of the GNU General Public License as published by |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
16 * the Free Software Foundation; either version 2 of the License, or |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
17 * (at your option) any later version. |
6474 | 18 * |
30426
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
19 * MPlayer is distributed in the hope that it will be useful, |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
22 * GNU General Public License for more details. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
23 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
24 * You should have received a copy of the GNU General Public License along |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
25 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
29263
diff
changeset
|
26 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
6474 | 27 */ |
28 | |
29 #include "config.h" | |
30 | |
31 #include <stdio.h> | |
32 #include <stdlib.h> | |
33 #include <fcntl.h> | |
34 #include <stdarg.h> | |
35 #include <errno.h> | |
36 #include <unistd.h> | |
37 #include <string.h> | |
25792 | 38 #include <limits.h> |
27727
48c1ae64255b
Replace preprocessor check for WIN32 with checks for __MINGW32__ and __CYGWIN__.
diego
parents:
27461
diff
changeset
|
39 #if defined(__MINGW32__) || defined(__CYGWIN__) |
16935
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
40 #ifdef __MINGW32__ |
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
41 #define mkdir(a,b) mkdir(a) |
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
42 #endif |
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
43 #include <windows.h> |
28402 | 44 #if HAVE_WINSOCK2_H |
16935
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
45 #include <winsock2.h> |
17446 | 46 #endif |
16935
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
47 #else |
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
48 #include <netdb.h> |
6474 | 49 #include <sys/ioctl.h> |
16935
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
50 #endif |
6474 | 51 #include <sys/types.h> |
52 #include <sys/stat.h> | |
53 | |
16967
32e2c59c8e86
[TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents:
16935
diff
changeset
|
54 #include "mp_msg.h" |
32e2c59c8e86
[TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents:
16935
diff
changeset
|
55 #include "help_mp.h" |
32e2c59c8e86
[TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents:
16935
diff
changeset
|
56 |
6474 | 57 #if defined(__linux__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
58 #include <linux/cdrom.h> |
21848 | 59 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
60 #include <sys/cdio.h> |
27727
48c1ae64255b
Replace preprocessor check for WIN32 with checks for __MINGW32__ and __CYGWIN__.
diego
parents:
27461
diff
changeset
|
61 #elif defined(__MINGW32__) || defined(__CYGWIN__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
62 #include <ddk/ntddcdrm.h> |
30613 | 63 #elif defined(__bsdi__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
64 #include <dvd.h> |
25393 | 65 #elif defined(__APPLE__) || defined(__DARWIN__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
66 #include <IOKit/storage/IOCDTypes.h> |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
67 #include <IOKit/storage/IOCDMediaBSDClient.h> |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
68 #include "mpbswap.h" |
6474 | 69 #endif |
70 | |
30746 | 71 #include "osdep/osdep.h" |
72 | |
6697
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
73 #include "cdd.h" |
31511
13ca93203358
Factorize MPlayer/MEncoder version string handling.
diego
parents:
31448
diff
changeset
|
74 #include "mpcommon.h" |
6474 | 75 #include "stream.h" |
76 #include "network.h" | |
25948
e8945e43a36f
#include just libavutil/common.h, not all of libavutil/intreadwrite.h.
diego
parents:
25796
diff
changeset
|
77 #include "libavutil/common.h" |
6474 | 78 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
79 #define DEFAULT_FREEDB_SERVER "freedb.freedb.org" |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
80 #define DEFAULT_CACHE_DIR "/.cddb/" |
6474 | 81 |
31448
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
82 typedef struct { |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
83 char cddb_hello[1024]; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
84 unsigned long disc_id; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
85 unsigned int tracks; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
86 char *cache_dir; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
87 char *freedb_server; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
88 int freedb_proto_level; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
89 int anonymous; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
90 char category[100]; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
91 char *xmcd_file; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
92 size_t xmcd_file_size; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
93 void *user_data; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
94 } cddb_data_t; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
95 |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
96 typedef struct { |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
97 unsigned int min, sec, frame; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
98 } cd_toc_t; |
80a4a25c24c5
Move cddb_data_t and cd_toc_t structs to the only place they are used.
diego
parents:
31444
diff
changeset
|
99 |
6697
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
100 static cd_toc_t cdtoc[100]; |
16524
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
101 static int cdtoc_last_track; |
6474 | 102 |
30693 | 103 static int read_toc(const char *dev) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
104 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
105 int first = 0, last = -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
106 int i; |
27727
48c1ae64255b
Replace preprocessor check for WIN32 with checks for __MINGW32__ and __CYGWIN__.
diego
parents:
27461
diff
changeset
|
107 #if defined(__MINGW32__) || defined(__CYGWIN__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
108 HANDLE drive; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
109 DWORD r; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
110 CDROM_TOC toc; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
111 char device[10]; |
20586
d9558d78179d
cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents:
20583
diff
changeset
|
112 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
113 sprintf(device, "\\\\.\\%s", dev); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
114 drive = CreateFile(device, GENERIC_READ, FILE_SHARE_READ, NULL, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
115 OPEN_EXISTING, 0, 0); |
20586
d9558d78179d
cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents:
20583
diff
changeset
|
116 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
117 if (!DeviceIoControl(drive, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
118 sizeof(CDROM_TOC), &r, 0)) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
119 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
120 return 0; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
121 } |
20586
d9558d78179d
cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents:
20583
diff
changeset
|
122 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
123 first = toc.FirstTrack - 1; last = toc.LastTrack; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
124 for (i = first; i <= last; i++) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
125 cdtoc[i].min = toc.TrackData[i].Address[1]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
126 cdtoc[i].sec = toc.TrackData[i].Address[2]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
127 cdtoc[i].frame = toc.TrackData[i].Address[3]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
128 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
129 CloseHandle(drive); |
20586
d9558d78179d
cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents:
20583
diff
changeset
|
130 |
30746 | 131 #elif defined(__OS2__) |
132 UCHAR auchParamDisk[4] = {'C', 'D', '0', '1'}; | |
133 | |
134 struct { | |
135 BYTE bFirstTrack; | |
136 BYTE bLastTrack; | |
137 BYTE bLeadOutF; | |
138 BYTE bLeadOutS; | |
139 BYTE bLeadOutM; | |
140 BYTE bLeadOutReserved; | |
141 } __attribute__((packed)) sDataDisk; | |
142 | |
143 struct { | |
144 UCHAR auchSign[4]; | |
145 BYTE bTrack; | |
146 } __attribute__((packed)) sParamTrack = {{'C', 'D', '0', '1'},}; | |
147 | |
148 struct { | |
149 BYTE bStartF; | |
150 BYTE bStartS; | |
151 BYTE bStartM; | |
152 BYTE bStartReserved; | |
153 BYTE bControlInfo; | |
154 } __attribute__((packed)) sDataTrack; | |
155 | |
156 HFILE hcd; | |
157 ULONG ulAction; | |
158 ULONG ulParamLen; | |
159 ULONG ulDataLen; | |
160 ULONG rc; | |
161 | |
162 rc = DosOpen(dev, &hcd, &ulAction, 0, FILE_NORMAL, | |
163 OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW, | |
164 OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE | OPEN_FLAGS_DASD, | |
165 NULL); | |
166 if (rc) { | |
167 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC); | |
168 return -1; | |
169 } | |
170 | |
171 rc = DosDevIOCtl(hcd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIODISK, | |
172 auchParamDisk, sizeof(auchParamDisk), &ulParamLen, | |
173 &sDataDisk, sizeof(sDataDisk), &ulDataLen); | |
174 if (!rc) { | |
175 first = sDataDisk.bFirstTrack - 1; | |
176 last = sDataDisk.bLastTrack; | |
177 for (i = first; i <= last; i++) { | |
178 if (i == last) { | |
179 sDataTrack.bStartM = sDataDisk.bLeadOutM; | |
180 sDataTrack.bStartS = sDataDisk.bLeadOutS; | |
181 sDataTrack.bStartF = sDataDisk.bLeadOutF; | |
182 } else { | |
183 sParamTrack.bTrack = i + 1; | |
184 rc = DosDevIOCtl(hcd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIOTRACK, | |
185 &sParamTrack, sizeof(sParamTrack), &ulParamLen, | |
186 &sDataTrack, sizeof(sDataTrack), &ulDataLen); | |
187 if (rc) | |
188 break; | |
189 } | |
190 | |
191 cdtoc[i].min = sDataTrack.bStartM; | |
192 cdtoc[i].sec = sDataTrack.bStartS; | |
193 cdtoc[i].frame = sDataTrack.bStartF; | |
194 } | |
195 } | |
196 | |
197 DosClose(hcd); | |
198 | |
199 if (rc) { | |
200 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC); | |
201 return -1; | |
202 } | |
20586
d9558d78179d
cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents:
20583
diff
changeset
|
203 #else |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
204 int drive; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
205 drive = open(dev, O_RDONLY | O_NONBLOCK); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
206 if (drive < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
207 return drive; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
208 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
209 |
20587 | 210 #if defined(__linux__) || defined(__bsdi__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
211 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
212 struct cdrom_tochdr tochdr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
213 ioctl(drive, CDROMREADTOCHDR, &tochdr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
214 first = tochdr.cdth_trk0 - 1; last = tochdr.cdth_trk1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
215 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
216 for (i = first; i <= last; i++) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
217 struct cdrom_tocentry tocentry; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
218 tocentry.cdte_track = (i == last) ? 0xAA : i + 1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
219 tocentry.cdte_format = CDROM_MSF; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
220 ioctl(drive, CDROMREADTOCENTRY, &tocentry); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
221 cdtoc[i].min = tocentry.cdte_addr.msf.minute; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
222 cdtoc[i].sec = tocentry.cdte_addr.msf.second; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
223 cdtoc[i].frame = tocentry.cdte_addr.msf.frame; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
224 } |
21848 | 225 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
226 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
227 struct ioc_toc_header tochdr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
228 ioctl(drive, CDIOREADTOCHEADER, &tochdr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
229 first = tochdr.starting_track - 1; last = tochdr.ending_track; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
230 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
231 for (i = first; i <= last; i++) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
232 struct ioc_read_toc_single_entry tocentry; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
233 tocentry.track = (i == last) ? 0xAA : i + 1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
234 tocentry.address_format = CD_MSF_FORMAT; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
235 ioctl(drive, CDIOREADTOCENTRY, &tocentry); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
236 cdtoc[i].min = tocentry.entry.addr.msf.minute; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
237 cdtoc[i].sec = tocentry.entry.addr.msf.second; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
238 cdtoc[i].frame = tocentry.entry.addr.msf.frame; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
239 } |
8962 | 240 #elif defined(__NetBSD__) || defined(__OpenBSD__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
241 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
242 struct ioc_toc_header tochdr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
243 ioctl(drive, CDIOREADTOCHEADER, &tochdr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
244 first = tochdr.starting_track - 1; last = tochdr.ending_track; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
245 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
246 for (i = first; i <= last; i++) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
247 struct ioc_read_toc_entry tocentry; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
248 struct cd_toc_entry toc_buffer; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
249 tocentry.starting_track = (i == last) ? 0xAA : i + 1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
250 tocentry.address_format = CD_MSF_FORMAT; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
251 tocentry.data = &toc_buffer; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
252 tocentry.data_len = sizeof(toc_buffer); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
253 ioctl(drive, CDIOREADTOCENTRYS, &tocentry); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
254 cdtoc[i].min = toc_buffer.addr.msf.minute; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
255 cdtoc[i].sec = toc_buffer.addr.msf.second; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
256 cdtoc[i].frame = toc_buffer.addr.msf.frame; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
257 } |
25393 | 258 #elif defined(__APPLE__) || defined(__DARWIN__) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
259 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
260 dk_cd_read_toc_t tochdr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
261 uint8_t buf[4]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
262 uint8_t buf2[100 * sizeof(CDTOCDescriptor) + sizeof(CDTOC)]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
263 memset(&tochdr, 0, sizeof(tochdr)); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
264 tochdr.bufferLength = sizeof(buf); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
265 tochdr.buffer = &buf; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
266 if (!ioctl(drive, DKIOCCDREADTOC, &tochdr) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
267 && tochdr.bufferLength == sizeof(buf)) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
268 first = buf[2] - 1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
269 last = buf[3]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
270 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
271 if (last >= 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
272 memset(&tochdr, 0, sizeof(tochdr)); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
273 tochdr.bufferLength = sizeof(buf2); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
274 tochdr.buffer = &buf2; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
275 tochdr.format = kCDTOCFormatTOC; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
276 if (ioctl(drive, DKIOCCDREADTOC, &tochdr) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
277 || tochdr.bufferLength < sizeof(CDTOC)) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
278 last = -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
279 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
280 if (last >= 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
281 CDTOC *cdToc = (CDTOC *)buf2; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
282 CDTrackInfo lastTrack; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
283 dk_cd_read_track_info_t trackInfoParams; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
284 for (i = first; i < last; ++i) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
285 CDMSF msf = CDConvertTrackNumberToMSF(i + 1, cdToc); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
286 cdtoc[i].min = msf.minute; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
287 cdtoc[i].sec = msf.second; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
288 cdtoc[i].frame = msf.frame; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
289 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
290 memset(&trackInfoParams, 0, sizeof(trackInfoParams)); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
291 trackInfoParams.addressType = kCDTrackInfoAddressTypeTrackNumber; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
292 trackInfoParams.bufferLength = sizeof(lastTrack); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
293 trackInfoParams.address = last; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
294 trackInfoParams.buffer = &lastTrack; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
295 if (!ioctl(drive, DKIOCCDREADTRACKINFO, &trackInfoParams)) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
296 CDMSF msf = CDConvertLBAToMSF(be2me_32(lastTrack.trackStartAddress) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
297 + be2me_32(lastTrack.trackSize)); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
298 cdtoc[last].min = msf.minute; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
299 cdtoc[last].sec = msf.second; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
300 cdtoc[last].frame = msf.frame; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
301 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
302 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
303 } |
20587 | 304 #endif |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
305 close(drive); |
20581
bfcc98ad59ba
Factor out common code in stream_cddb read_toc function.
reimar
parents:
20579
diff
changeset
|
306 #endif |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
307 for (i = first; i <= last; i++) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
308 cdtoc[i].frame += (cdtoc[i].min * 60 + cdtoc[i].sec) * 75; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
309 return last; |
7269
a5f1baaf7714
Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents:
6697
diff
changeset
|
310 } |
6474 | 311 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
312 /** |
16524
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
313 \brief Reads TOC from CD in the given device and prints the number of tracks |
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
314 and the length of each track in minute:second:frame format. |
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
315 \param *dev the device to analyse |
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
316 \return if the command line -identify is given, returns the last track of |
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
317 the TOC or -1 if the TOC can't be read, |
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
318 otherwise just returns 0 and let cddb_resolve the TOC |
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
319 */ |
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
320 int cdd_identify(const char *dev) |
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
321 { |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
322 cdtoc_last_track = 0; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
323 if (mp_msg_test(MSGT_IDENTIFY, MSGL_INFO)) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
324 int i, min, sec, frame; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
325 cdtoc_last_track = read_toc(dev); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
326 if (cdtoc_last_track < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
327 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToOpenDevice, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
328 dev); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
329 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
330 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
331 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_CDDA_TRACKS=%d\n", cdtoc_last_track); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
332 for (i = 1; i <= cdtoc_last_track; i++) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
333 frame = cdtoc[i].frame - cdtoc[i-1].frame; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
334 sec = frame / 75; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
335 frame -= sec * 75; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
336 min = sec / 60; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
337 sec -= min * 60; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
338 mp_msg(MSGT_IDENTIFY, MSGL_INFO, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
339 "ID_CDDA_TRACK_%d_MSF=%02d:%02d:%02d\n", i, min, sec, frame); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
340 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
341 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
342 return cdtoc_last_track; |
16524
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
343 } |
83d101e1bedb
Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents:
15566
diff
changeset
|
344 |
30693 | 345 static unsigned int cddb_sum(int n) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
346 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
347 unsigned int ret; |
6474 | 348 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
349 ret = 0; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
350 while (n > 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
351 ret += (n % 10); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
352 n /= 10; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
353 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
354 return ret; |
6474 | 355 } |
356 | |
30693 | 357 static unsigned long cddb_discid(int tot_trks) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
358 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
359 unsigned int i, t = 0, n = 0; |
6474 | 360 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
361 i = 0; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
362 while (i < (unsigned int)tot_trks) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
363 n = n + cddb_sum((cdtoc[i].min * 60) + cdtoc[i].sec); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
364 i++; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
365 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
366 t = ((cdtoc[tot_trks].min * 60) + cdtoc[tot_trks].sec) - |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
367 ((cdtoc[0].min * 60) + cdtoc[0].sec); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
368 return (n % 0xff) << 24 | t << 8 | tot_trks; |
6474 | 369 } |
370 | |
371 | |
372 | |
30693 | 373 static int cddb_http_request(char *command, |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
374 int (*reply_parser)(HTTP_header_t*, cddb_data_t*), |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
375 cddb_data_t *cddb_data) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
376 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
377 char request[4096]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
378 int fd, ret = 0; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
379 URL_t *url; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
380 HTTP_header_t *http_hdr; |
6474 | 381 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
382 if (reply_parser == NULL || command == NULL || cddb_data == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
383 return -1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
384 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
385 sprintf(request, "http://%s/~cddb/cddb.cgi?cmd=%s%s&proto=%d", |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
386 cddb_data->freedb_server, command, cddb_data->cddb_hello, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
387 cddb_data->freedb_proto_level); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
388 mp_msg(MSGT_OPEN, MSGL_INFO,"Request[%s]\n", request); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
389 |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
390 url = url_new(request); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
391 if (url == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
392 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NotAValidURL); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
393 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
394 } |
6474 | 395 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
396 fd = http_send_request(url,0); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
397 if (fd < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
398 mp_msg(MSGT_DEMUX, MSGL_ERR, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
399 MSGTR_MPDEMUX_CDDB_FailedToSendHTTPRequest); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
400 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
401 } |
6474 | 402 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
403 http_hdr = http_read_response(fd); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
404 if (http_hdr == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
405 mp_msg(MSGT_DEMUX, MSGL_ERR, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
406 MSGTR_MPDEMUX_CDDB_FailedToReadHTTPResponse); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
407 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
408 } |
6474 | 409 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
410 http_debug_hdr(http_hdr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
411 mp_msg(MSGT_OPEN, MSGL_INFO,"body=[%s]\n", http_hdr->body); |
6474 | 412 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
413 switch (http_hdr->status_code) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
414 case 200: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
415 ret = reply_parser(http_hdr, cddb_data); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
416 break; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
417 case 400: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
418 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_HTTPErrorNOTFOUND); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
419 break; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
420 default: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
421 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_HTTPErrorUnknown); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
422 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
423 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
424 http_free(http_hdr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
425 url_free(url); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
426 |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
427 return ret; |
6474 | 428 } |
429 | |
30693 | 430 static int cddb_read_cache(cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
431 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
432 char file_name[100]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
433 struct stat stats; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
434 int file_fd, ret; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
435 size_t file_size; |
6474 | 436 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
437 if (cddb_data == NULL || cddb_data->cache_dir == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
438 return -1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
439 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
440 sprintf(file_name, "%s%08lx", cddb_data->cache_dir, cddb_data->disc_id); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
441 |
30685 | 442 file_fd = open(file_name, O_RDONLY | O_BINARY); |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
443 if (file_fd < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
444 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NoCacheFound); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
445 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
446 } |
6474 | 447 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
448 ret = fstat(file_fd, &stats); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
449 if (ret < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
450 perror("fstat"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
451 file_size = 4096; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
452 } else { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
453 file_size = stats.st_size < UINT_MAX ? stats.st_size : UINT_MAX - 1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
454 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
455 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
456 cddb_data->xmcd_file = malloc(file_size + 1); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
457 if (cddb_data->xmcd_file == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
458 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
459 close(file_fd); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
460 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
461 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
462 cddb_data->xmcd_file_size = read(file_fd, cddb_data->xmcd_file, file_size); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
463 if (cddb_data->xmcd_file_size != file_size) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
464 mp_msg(MSGT_DEMUX, MSGL_WARN, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
465 MSGTR_MPDEMUX_CDDB_NotAllXMCDFileHasBeenRead); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
466 close(file_fd); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
467 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
468 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
469 cddb_data->xmcd_file[cddb_data->xmcd_file_size] = 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
470 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
471 close(file_fd); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
472 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
473 return 0; |
6474 | 474 } |
475 | |
30693 | 476 static int cddb_write_cache(cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
477 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
478 // We have the file, save it for cache. |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
479 struct stat file_stat; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
480 char file_name[100]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
481 int file_fd, ret; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
482 int wrote = 0; |
6474 | 483 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
484 if (cddb_data == NULL || cddb_data->cache_dir == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
485 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
486 |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
487 // Check if the CDDB cache dir exist |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
488 ret = stat(cddb_data->cache_dir, &file_stat); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
489 if (ret < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
490 // Directory not present, create it. |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
491 ret = mkdir(cddb_data->cache_dir, 0755); |
16935
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
492 #ifdef __MINGW32__ |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
493 if (ret < 0 && errno != EEXIST) { |
16935
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
494 #else |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
495 if (ret < 0) { |
16935
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
496 #endif |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
497 perror("mkdir"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
498 mp_msg(MSGT_DEMUX, MSGL_ERR, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
499 MSGTR_MPDEMUX_CDDB_FailedToCreateDirectory, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
500 cddb_data->cache_dir); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
501 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
502 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
503 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
504 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
505 sprintf(file_name, "%s%08lx", cddb_data->cache_dir, cddb_data->disc_id); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
506 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
507 file_fd = creat(file_name, S_IRUSR | S_IWUSR); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
508 if (file_fd < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
509 perror("create"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
510 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
511 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
512 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
513 wrote = write(file_fd, cddb_data->xmcd_file, cddb_data->xmcd_file_size); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
514 if (wrote < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
515 perror("write"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
516 close(file_fd); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
517 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
518 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
519 if ((unsigned int) wrote != cddb_data->xmcd_file_size) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
520 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_NotAllXMCDFileHasBeenWritten); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
521 close(file_fd); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
522 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
523 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
524 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
525 close(file_fd); |
6474 | 526 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
527 return 0; |
6474 | 528 } |
529 | |
30693 | 530 static int cddb_read_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
531 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
532 unsigned long disc_id; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
533 char category[100]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
534 char *ptr = NULL, *ptr2 = NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
535 int ret, status; |
6474 | 536 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
537 if (http_hdr == NULL || cddb_data == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
538 return -1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
539 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
540 ret = sscanf(http_hdr->body, "%d ", &status); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
541 if (ret != 1) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
542 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
543 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
544 } |
6474 | 545 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
546 switch (status) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
547 case 210: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
548 ret = sscanf(http_hdr->body, "%d %99s %08lx", &status, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
549 category, &disc_id); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
550 if (ret != 3) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
551 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
552 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
553 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
554 // Check if it's a xmcd database file |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
555 ptr = strstr(http_hdr->body, "# xmcd"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
556 if (ptr == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
557 mp_msg(MSGT_DEMUX, MSGL_ERR, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
558 MSGTR_MPDEMUX_CDDB_InvalidXMCDDatabaseReturned); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
559 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
560 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
561 ptr = strdup(ptr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
562 // Ok found the beginning of the file |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
563 // look for the end |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
564 ptr2 = strstr(ptr, "\n.\r\n"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
565 if (!ptr2) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
566 ptr2 = strstr(ptr, "\n.\n"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
567 if (ptr2) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
568 ptr2++; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
569 } else { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
570 mp_msg(MSGT_DEMUX, MSGL_FIXME, "Unable to find '.'\n"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
571 ptr2 = ptr + strlen(ptr); //return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
572 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
573 // Ok found the end |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
574 // do a sanity check |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
575 if (http_hdr->body_size < (unsigned int)(ptr2 - ptr)) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
576 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_UnexpectedFIXME); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
577 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
578 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
579 cddb_data->xmcd_file = ptr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
580 cddb_data->xmcd_file_size = ptr2 - ptr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
581 cddb_data->xmcd_file[cddb_data->xmcd_file_size] = '\0'; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
582 return cddb_write_cache(cddb_data); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
583 default: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
584 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
585 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
586 return 0; |
6474 | 587 } |
588 | |
30693 | 589 static int cddb_request_titles(cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
590 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
591 char command[1024]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
592 sprintf(command, "cddb+read+%s+%08lx", |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
593 cddb_data->category, cddb_data->disc_id); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
594 return cddb_http_request(command, cddb_read_parse, cddb_data); |
6474 | 595 } |
596 | |
30693 | 597 static int cddb_parse_matches_list(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
598 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
599 char album_title[100]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
600 char *ptr = NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
601 int ret; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
602 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
603 ptr = strstr(http_hdr->body, "\n"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
604 if (ptr == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
605 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_UnableToFindEOL); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
606 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
607 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
608 ptr++; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
609 // We have a list of exact/inexact matches, so which one do we use? |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
610 // So let's take the first one. |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
611 ret = sscanf(ptr, "%99s %08lx %99s", cddb_data->category, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
612 &(cddb_data->disc_id), album_title); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
613 if (ret != 3) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
614 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
615 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
616 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
617 ptr = strstr(http_hdr->body, album_title); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
618 if (ptr != NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
619 char *ptr2; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
620 int len; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
621 ptr2 = strstr(ptr, "\n"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
622 if (ptr2 == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
623 len = (http_hdr->body_size)-(ptr-(http_hdr->body)); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
624 } else { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
625 len = ptr2-ptr+1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
626 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
627 len = FFMIN(sizeof(album_title) - 1, len); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
628 strncpy(album_title, ptr, len); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
629 album_title[len]='\0'; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
630 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
631 mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
632 album_title); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
633 return 0; |
8746 | 634 } |
635 | |
30693 | 636 static int cddb_query_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
637 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
638 char album_title[100]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
639 char *ptr = NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
640 int ret, status; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
641 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
642 ret = sscanf(http_hdr->body, "%d ", &status); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
643 if (ret != 1) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
644 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
645 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
646 } |
6474 | 647 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
648 switch (status) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
649 case 200: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
650 // Found exact match |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
651 ret = sscanf(http_hdr->body, "%d %99s %08lx %99s", &status, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
652 cddb_data->category, &(cddb_data->disc_id), album_title); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
653 if (ret != 4) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
654 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
655 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
656 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
657 ptr = strstr(http_hdr->body, album_title); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
658 if (ptr != NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
659 char *ptr2; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
660 int len; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
661 ptr2 = strstr(ptr, "\n"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
662 if (ptr2 == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
663 len = (http_hdr->body_size)-(ptr-(http_hdr->body)); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
664 } else { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
665 len = ptr2-ptr+1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
666 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
667 len = FFMIN(sizeof(album_title) - 1, len); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
668 strncpy(album_title, ptr, len); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
669 album_title[len]='\0'; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
670 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
671 mp_msg(MSGT_DEMUX, MSGL_STATUS, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
672 MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
673 return cddb_request_titles(cddb_data); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
674 case 202: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
675 // No match found |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
676 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_AlbumNotFound); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
677 break; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
678 case 210: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
679 // Found exact matches, list follows |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
680 cddb_parse_matches_list(http_hdr, cddb_data); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
681 return cddb_request_titles(cddb_data); |
6474 | 682 /* |
683 body=[210 Found exact matches, list follows (until terminating `.') | |
684 misc c711930d Santana / Supernatural | |
685 rock c711930d Santana / Supernatural | |
686 blues c711930d Santana / Supernatural | |
687 .] | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
688 */ |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
689 case 211: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
690 // Found inexact matches, list follows |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
691 cddb_parse_matches_list(http_hdr, cddb_data); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
692 return cddb_request_titles(cddb_data); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
693 case 500: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
694 mp_msg(MSGT_DEMUX, MSGL_FIXME, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
695 MSGTR_MPDEMUX_CDDB_ServerReturnsCommandSyntaxErr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
696 break; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
697 default: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
698 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
699 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
700 return -1; |
6474 | 701 } |
702 | |
30693 | 703 static int cddb_proto_level_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
704 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
705 int max; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
706 int ret, status; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
707 char *ptr; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
708 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
709 ret = sscanf(http_hdr->body, "%d ", &status); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
710 if (ret != 1) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
711 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
712 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
713 } |
6474 | 714 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
715 switch (status) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
716 case 210: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
717 ptr = strstr(http_hdr->body, "max proto:"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
718 if (ptr == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
719 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
720 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
721 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
722 ret = sscanf(ptr, "max proto: %d", &max); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
723 if (ret != 1) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
724 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
725 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
726 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
727 cddb_data->freedb_proto_level = max; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
728 return 0; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
729 default: |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
730 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
731 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
732 return -1; |
6474 | 733 } |
734 | |
30693 | 735 static int cddb_get_proto_level(cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
736 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
737 return cddb_http_request("stat", cddb_proto_level_parse, cddb_data); |
6474 | 738 } |
739 | |
30693 | 740 static void cddb_create_hello(cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
741 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
742 char host_name[51]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
743 char *user_name; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
744 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
745 if (cddb_data->anonymous) { // Default is anonymous |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
746 /* Note from Eduardo Pérez Ureta <eperez@it.uc3m.es> : |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
747 * We don't send current user/host name in hello to prevent spam. |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
748 * Software that sends this is considered spyware |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
749 * that most people don't like. |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
750 */ |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
751 user_name = "anonymous"; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
752 strcpy(host_name, "localhost"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
753 } else { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
754 if (gethostname(host_name, 50) < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
755 strcpy(host_name, "localhost"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
756 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
757 user_name = getenv("LOGNAME"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
758 } |
31511
13ca93203358
Factorize MPlayer/MEncoder version string handling.
diego
parents:
31448
diff
changeset
|
759 sprintf(cddb_data->cddb_hello, "&hello=%s+%s+%s", |
13ca93203358
Factorize MPlayer/MEncoder version string handling.
diego
parents:
31448
diff
changeset
|
760 user_name, host_name, mplayer_version); |
6474 | 761 } |
762 | |
30693 | 763 static int cddb_retrieve(cddb_data_t *cddb_data) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
764 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
765 char offsets[1024], command[1024]; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
766 char *ptr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
767 unsigned int i, time_len; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
768 int ret; |
6474 | 769 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
770 ptr = offsets; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
771 for (i = 0; i < cddb_data->tracks ; i++) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
772 ptr += sprintf(ptr, "%d+", cdtoc[i].frame); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
773 if (ptr-offsets > sizeof offsets - 40) break; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
774 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
775 ptr[0] = 0; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
776 time_len = (cdtoc[cddb_data->tracks].frame)/75; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
777 |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
778 cddb_data->freedb_server = DEFAULT_FREEDB_SERVER; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
779 cddb_data->freedb_proto_level = 1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
780 cddb_data->xmcd_file = NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
781 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
782 cddb_create_hello(cddb_data); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
783 if (cddb_get_proto_level(cddb_data) < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
784 mp_msg(MSGT_DEMUX, MSGL_ERR, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
785 MSGTR_MPDEMUX_CDDB_FailedToGetProtocolLevel); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
786 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
787 } |
6474 | 788 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
789 sprintf(command, "cddb+query+%08lx+%d+%s%d", cddb_data->disc_id, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
790 cddb_data->tracks, offsets, time_len); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
791 ret = cddb_http_request(command, cddb_query_parse, cddb_data); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
792 if (ret < 0) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
793 return -1; |
6474 | 794 |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
31511
diff
changeset
|
795 free(cddb_data->cache_dir); |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
796 return 0; |
6474 | 797 } |
798 | |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
799 int cddb_resolve(const char *dev, char **xmcd_file) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
800 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
801 char cddb_cache_dir[] = DEFAULT_CACHE_DIR; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
802 char *home_dir = NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
803 cddb_data_t cddb_data; |
6474 | 804 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
805 if (cdtoc_last_track <= 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
806 cdtoc_last_track = read_toc(dev); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
807 if (cdtoc_last_track < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
808 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToOpenDevice, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
809 dev); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
810 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
811 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
812 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
813 cddb_data.tracks = cdtoc_last_track; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
814 cddb_data.disc_id = cddb_discid(cddb_data.tracks); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
815 cddb_data.anonymous = 1; // Don't send user info by default |
7746
15ce89ba92cf
Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents:
7721
diff
changeset
|
816 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
817 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDB_DISCID=%08lx\n", |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
818 cddb_data.disc_id); |
27174 | 819 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
820 // Check if there is a CD in the drive |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
821 // FIXME: That's not really a good way to check |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
822 if (cddb_data.disc_id == 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
823 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NoCDInDrive); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
824 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
825 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
826 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
827 home_dir = getenv("HOME"); |
16935
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
828 #ifdef __MINGW32__ |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
829 if (home_dir == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
830 home_dir = getenv("USERPROFILE"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
831 if (home_dir == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
832 home_dir = getenv("HOMEPATH"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
833 // Last resort, store the cddb cache in the mplayer directory |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
834 if (home_dir == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
835 home_dir = (char *)get_path(""); |
16935
60bd6aeed405
make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents:
16524
diff
changeset
|
836 #endif |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
837 if (home_dir == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
838 cddb_data.cache_dir = NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
839 } else { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
840 cddb_data.cache_dir = malloc(strlen(home_dir) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
841 + strlen(cddb_cache_dir) + 1); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
842 if (cddb_data.cache_dir == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
843 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
844 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
845 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
846 sprintf(cddb_data.cache_dir, "%s%s", home_dir, cddb_cache_dir); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
847 } |
6474 | 848 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
849 // Check for a cached file |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
850 if (cddb_read_cache(&cddb_data) < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
851 // No Cache found |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
852 if (cddb_retrieve(&cddb_data) < 0) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
853 return -1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
854 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
855 } |
6697
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
856 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
857 if (cddb_data.xmcd_file != NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
858 // printf("%s\n", cddb_data.xmcd_file); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
859 *xmcd_file = cddb_data.xmcd_file; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
860 return 0; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
861 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
862 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
863 return -1; |
6697
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
864 } |
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
865 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
866 /*************** |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
867 * xmcd parser * |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
868 ***************/ |
30693 | 869 static char *xmcd_parse_dtitle(cd_info_t *cd_info, char *line) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
870 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
871 char *ptr, *album; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
872 ptr = strstr(line, "DTITLE="); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
873 if (ptr != NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
874 ptr += 7; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
875 album = strstr(ptr, "/"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
876 if (album == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
877 return NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
878 cd_info->album = malloc(strlen(album + 2) + 1); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
879 if (cd_info->album == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
880 return NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
881 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
882 strcpy(cd_info->album, album + 2); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
883 album--; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
884 album[0] = '\0'; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
885 cd_info->artist = malloc(strlen(ptr) + 1); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
886 if (cd_info->artist == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
887 return NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
888 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
889 strcpy(cd_info->artist, ptr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
890 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
891 return ptr; |
6697
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
892 } |
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
893 |
30693 | 894 static char *xmcd_parse_dgenre(cd_info_t *cd_info, char *line) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
895 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
896 char *ptr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
897 ptr = strstr(line, "DGENRE="); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
898 if (ptr != NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
899 ptr += 7; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
900 cd_info->genre = malloc(strlen(ptr)+1); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
901 if (cd_info->genre == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
902 return NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
903 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
904 strcpy(cd_info->genre, ptr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
905 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
906 return ptr; |
6697
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
907 } |
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
908 |
30693 | 909 static char *xmcd_parse_ttitle(cd_info_t *cd_info, char *line) |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
910 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
911 unsigned int track_nb; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
912 unsigned long sec, off; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
913 char *ptr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
914 ptr = strstr(line, "TTITLE"); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
915 if (ptr != NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
916 ptr += 6; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
917 // Here we point to the track number |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
918 track_nb = atoi(ptr); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
919 ptr = strstr(ptr, "="); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
920 if (ptr == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
921 return NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
922 ptr++; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
923 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
924 sec = cdtoc[track_nb].frame; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
925 off = cdtoc[track_nb + 1].frame - sec + 1; |
6697
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
926 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
927 cd_info_add_track(cd_info, ptr, track_nb + 1, |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
928 (unsigned int) (off / (60 * 75)), |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
929 (unsigned int) ((off / 75) % 60), |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
930 (unsigned int) (off % 75), |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
931 sec, off); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
932 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
933 return ptr; |
6697
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
934 } |
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
935 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
936 cd_info_t *cddb_parse_xmcd(char *xmcd_file) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
937 { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
938 cd_info_t *cd_info = NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
939 int length, pos = 0; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
940 char *ptr, *ptr2; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
941 unsigned int audiolen; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
942 if (xmcd_file == NULL) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
943 return NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
944 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
945 cd_info = cd_info_new(); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
946 if (cd_info == NULL) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
947 return NULL; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
948 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
949 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
950 length = strlen(xmcd_file); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
951 ptr = xmcd_file; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
952 while (ptr != NULL && pos < length) { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
953 // Read a line |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
954 ptr2 = ptr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
955 while(ptr2[0] != '\0' && ptr2[0] != '\r' && ptr2[0] != '\n') |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
956 ptr2++; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
957 if (ptr2[0] == '\0') { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
958 break; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
959 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
960 ptr2[0] = '\0'; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
961 // Ignore comments |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
962 if (ptr[0] != '#') { |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
963 // Search for the album title |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
964 if (xmcd_parse_dtitle(cd_info, ptr)) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
965 ; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
966 // Search for the genre |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
967 else if (xmcd_parse_dgenre(cd_info, ptr)) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
968 ; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
969 // Search for a track title |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
970 else if (xmcd_parse_ttitle(cd_info, ptr)) |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
971 audiolen++; // <-- audiolen++ to shut up gcc warning |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
972 } |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
973 if (ptr2[1] == '\n') |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
974 ptr2++; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
975 pos = (ptr2 + 1) - ptr; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
976 ptr = ptr2 + 1; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
977 } |
6697
4cade272ce2b
Added a simple xmcd parser to retreive the tracks name.
bertrand
parents:
6475
diff
changeset
|
978 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
979 audiolen = cdtoc[cd_info->nb_tracks].frame-cdtoc[0].frame; |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
980 cd_info->min = (unsigned int) (audiolen / (60 * 75)); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
981 cd_info->sec = (unsigned int) ((audiolen / 75) % 60); |
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
982 cd_info->msec = (unsigned int) (audiolen % 75); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28402
diff
changeset
|
983 |
30629
16d7ef2f04e5
cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents:
30613
diff
changeset
|
984 return cd_info; |
6474 | 985 } |