annotate src/wavpack/tags.cxx @ 2233:0de647993c2a

- make use of AUDDBG - eliminate warnings
author Yoshiki Yazawa <yaz@cc.rim.or.jp>
date Sun, 16 Dec 2007 18:18:03 +0900
parents aa8bd7b56cda
children 4d6045c20cc5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
1 #include <stdlib.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
2 #include <stdio.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
3 #include <string.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
4 #include <unistd.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
5 #include <fcntl.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
6 #include <wchar.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
7 #include <audacious/util.h>
265
32de2fc2270a [svn] - use VFS here
nenolod
parents: 109
diff changeset
8 #include <audacious/vfs.h>
2001
aa8bd7b56cda make wavpack compile again.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1978
diff changeset
9 #include <audacious/plugin.h>
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
10 #include "tags.h"
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
11
2233
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
12 static const char* GenreList [] = {
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
13 "Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
14 "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", "Other", "Pop", "R&B",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
15 "Rap", "Reggae", "Rock", "Techno", "Industrial", "Alternative", "Ska",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
16 "Death Metal", "Pranks", "Soundtrack", "Euro-Techno", "Ambient",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
17 "Trip-Hop", "Vocal", "Jazz+Funk", "Fusion", "Trance", "Classical",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
18 "Instrumental", "Acid", "House", "Game", "Sound Clip", "Gospel", "Noise",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
19 "AlternRock", "Bass", "Soul", "Punk", "Space", "Meditative",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
20 "Instrumental Pop", "Instrumental Rock", "Ethnic", "Gothic", "Darkwave",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
21 "Techno-Industrial", "Electronic", "Pop-Folk", "Eurodance", "Dream",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
22 "Southern Rock", "Comedy", "Cult", "Gangsta", "Top 40", "Christian Rap",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
23 "Pop/Funk", "Jungle", "Native American", "Cabaret", "New Wave",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
24 "Psychadelic", "Rave", "Showtunes", "Trailer", "Lo-Fi", "Tribal",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
25 "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", "Rock & Roll",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
26 "Hard Rock", "Folk", "Folk/Rock", "National Folk", "Swing", "Fast-Fusion",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
27 "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
28 "Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
29 "Slow Rock", "Big Band", "Chorus", "Easy Listening", "Acoustic", "Humour",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
30 "Speech", "Chanson", "Opera", "Chamber Music", "Sonata", "Symphony",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
31 "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", "Club",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
32 "Tango", "Samba", "Folklore", "Ballad", "Power Ballad", "Rhythmic Soul",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
33 "Freestyle", "Duet", "Punk Rock", "Drum Solo", "A capella", "Euro-House",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
34 "Dance Hall", "Goa", "Drum & Bass", "Club House", "Hardcore", "Terror",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
35 "Indie", "BritPop", "NegerPunk", "Polsk Punk", "Beat", "Christian Gangsta",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
36 "Heavy Metal", "Black Metal", "Crossover", "Contemporary C",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
37 "Christian Rock", "Merengue", "Salsa", "Thrash Metal", "Anime", "JPop",
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
38 "SynthPop"
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
39 };
0de647993c2a - make use of AUDDBG
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2001
diff changeset
40
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
41 struct APETagFooterStruct {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
42 unsigned char ID[8];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
43 unsigned char Version[4];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
44 unsigned char Length[4];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
45 unsigned char TagCount[4];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
46 unsigned char Flags[4];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
47 unsigned char Reserved[8];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
48 };
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
49
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
50 typedef struct {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
51 char *key;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
52 size_t keylen;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
53 unsigned char *value;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
54 size_t valuelen;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
55 unsigned int flags;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
56 } TagItem;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
57
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
58 unsigned long
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
59 Read_LE_Uint32(const unsigned char *p)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
60 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
61 return ((unsigned long) p[0] << 0) |
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
62 ((unsigned long) p[1] << 8) |
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
63 ((unsigned long) p[2] << 16) | ((unsigned long) p[3] << 24);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
64 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
65
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
66 // Convert UTF-8 coded string to UNICODE
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
67 // Return number of characters converted
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
68 int
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
69 utf8ToUnicode(const char *lpMultiByteStr, wchar_t * lpWideCharStr,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
70 int cmbChars)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
71 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
72 const unsigned char *pmb = (unsigned char *) lpMultiByteStr;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
73 unsigned short *pwc = (unsigned short *) lpWideCharStr;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
74 const unsigned char *pmbe;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
75 size_t cwChars = 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
76
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
77 if (cmbChars >= 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
78 pmbe = pmb + cmbChars;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
79 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
80 else {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
81 pmbe = NULL;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
82 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
83
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
84 while ((pmbe == NULL) || (pmb < pmbe)) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
85 char mb = *pmb++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
86 unsigned int cc = 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
87 unsigned int wc;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
88
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
89 while ((cc < 7) && (mb & (1 << (7 - cc)))) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
90 cc++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
91 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
92
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
93 if (cc == 1 || cc > 6) // illegal character combination for UTF-8
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
94 continue;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
95
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
96 if (cc == 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
97 wc = mb;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
98 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
99 else {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
100 wc = (mb & ((1 << (7 - cc)) - 1)) << ((cc - 1) * 6);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
101 while (--cc > 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
102 if (pmb == pmbe) // reached end of the buffer
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
103 return cwChars;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
104 mb = *pmb++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
105 if (((mb >> 6) & 0x03) != 2) // not part of multibyte character
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
106 return cwChars;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
107 wc |= (mb & 0x3F) << ((cc - 1) * 6);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
108 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
109 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
110
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
111 if (wc & 0xFFFF0000)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
112 wc = L'?';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
113 *pwc++ = wc;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
114 cwChars++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
115 if (wc == L'\0')
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
116 return cwChars;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
117 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
118
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
119 return cwChars;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
120 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
121
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
122 void
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
123 tag_insert(char *buffer, const char *value, long unsigned int len,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
124 long unsigned int maxlen, bool decode_utf8)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
125 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
126 char *p;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
127 wchar_t wValue[MAX_LEN];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
128 char temp[MAX_LEN];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
129 long unsigned int c;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
130 const wchar_t *src = wValue;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
131
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
132 if (len >= maxlen)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
133 len = maxlen - 1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
134 if (decode_utf8) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
135 if ((c = utf8ToUnicode(value, wValue, len)) <= 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
136 return;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
137 if (wValue[c] != L'\0')
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
138 wValue[c++] = L'\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
139 if ((c = wcsrtombs(temp, &src, MAX_LEN, NULL)) == 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
140 return;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
141 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
142 else {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
143 c = len;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
144 strncpy(temp, value, len);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
145 while (temp[len - 1] == 0x20 || len < 1) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
146 len--;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
147 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
148 temp[len] = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
149 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
150
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
151 //if ( *buffer == '\0' ) { // new value
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
152 p = buffer;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
153 //} else { // append to existing value
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
154 // p = strchr (buffer, '\0' );
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
155 // p += sprintf ( p, ", " );
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
156 //}
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
157
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
158 if ((p - buffer) + c >= maxlen)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
159 c = maxlen - (p - buffer) - 1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
160 strncpy(p, temp, c);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
161 p[c] = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
162 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
163
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
164 // Returns the Type of Tag (Ape or ID3)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
165 int
265
32de2fc2270a [svn] - use VFS here
nenolod
parents: 109
diff changeset
166 GetTageType(VFSFile * fp)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
167 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
168 struct APETagFooterStruct T;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
169 unsigned char tagheader[3];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
170 int size;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
171
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
172 if (fp == NULL) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
173 return TAG_NONE;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
174 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
175
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
176 if (aud_vfs_fseek(fp, 0, SEEK_END) != 0)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
177 return TAG_NONE;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
178 size = aud_vfs_ftell(fp);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
179 if (aud_vfs_fseek(fp, size - sizeof T, SEEK_SET) != 0)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
180 return TAG_NONE;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
181 if (aud_vfs_fread(&T, 1, sizeof T, fp) != sizeof T)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
182 return TAG_NONE;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
183 if (memcmp(T.ID, "APETAGEX", sizeof T.ID) == 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
184 return TAG_APE;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
185 if (aud_vfs_fseek(fp, -128L, SEEK_END) != 0)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
186 return TAG_NONE;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
187 if (aud_vfs_fread(tagheader, 1, 3, fp) != 3)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
188 return TAG_NONE;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
189 if (0 == memcmp(tagheader, "TAG", 3))
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
190 return TAG_ID3;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
191 return TAG_NONE;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
192 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
193
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
194
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
195 int
265
32de2fc2270a [svn] - use VFS here
nenolod
parents: 109
diff changeset
196 ReadID3Tag(VFSFile * fp, ape_tag * Tag)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
197 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
198 char *tag;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
199 char *buff;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
200 unsigned int genre;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
201
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
202 buff = (char *) malloc(128);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
203
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
204 *(Tag->title) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
205 *(Tag->artist) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
206 *(Tag->album) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
207 *(Tag->comment) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
208 *(Tag->genre) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
209 *(Tag->track) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
210 *(Tag->year) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
211
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
212 if (aud_vfs_fseek(fp, -128L, SEEK_END) != 0)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
213 return 0;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
214 if (aud_vfs_fread(buff, 1, 128, fp) != 128)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
215 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
216 tag = buff;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
217 tag_insert(Tag->title, (tag + 3), 30, 32, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
218 tag_insert(Tag->artist, (tag + 33), 30, 32, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
219 tag_insert(Tag->album, (tag + 63), 30, 32, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
220 tag_insert(Tag->year, (tag + 93), 4, 32, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
221 tag_insert(Tag->comment, (tag + 97), 30, 32, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
222 genre = (unsigned char) tag[127];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
223 if (genre >= sizeof(GenreList) / sizeof(int))
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
224 genre = 12;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
225 tag_insert(Tag->genre, GenreList[genre], 30, 32, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
226 sprintf(tag, "%u", tag[126]);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
227 tag_insert(Tag->track, tag, 30, 32, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
228 free(buff);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
229 return 1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
230 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
231
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
232 // Reads APE v2.0 tag
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
233 int
265
32de2fc2270a [svn] - use VFS here
nenolod
parents: 109
diff changeset
234 ReadAPE2Tag(VFSFile * fp, ape_tag * Tag)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
235 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
236 unsigned long vsize;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
237 unsigned long isize;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
238 unsigned long flags;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
239 unsigned char *buff;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
240 unsigned char *p;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
241 unsigned char *end;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
242 struct APETagFooterStruct T;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
243 unsigned long TagLen;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
244 unsigned long TagCount;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
245 long size;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
246
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
247 *(Tag->title) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
248 *(Tag->artist) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
249 *(Tag->album) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
250 *(Tag->comment) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
251 *(Tag->genre) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
252 *(Tag->track) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
253 *(Tag->year) = '\0';
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
254
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
255 if (aud_vfs_fseek(fp, 0, SEEK_END) != 0)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
256 return 0;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
257 size = aud_vfs_ftell(fp);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
258 if (aud_vfs_fseek(fp, size - sizeof T, SEEK_SET) != 0)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
259 return 0;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
260 if (aud_vfs_fread(&T, 1, sizeof T, fp) != sizeof T)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
261 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
262 if (memcmp(T.ID, "APETAGEX", sizeof T.ID) != 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
263 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
264 if (Read_LE_Uint32(T.Version) != 2000)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
265 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
266 TagLen = Read_LE_Uint32(T.Length);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
267 if (TagLen < sizeof T)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
268 return 0;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
269 if (aud_vfs_fseek(fp, size - TagLen, SEEK_SET) != 0)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
270 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
271 if ((buff = (unsigned char *) malloc(TagLen)) == NULL)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
272 return 0;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
273 if (aud_vfs_fread(buff, 1, TagLen - sizeof T, fp) != TagLen - sizeof T) {
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
274 free(buff);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
275 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
276 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
277
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
278 TagCount = Read_LE_Uint32(T.TagCount);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
279 end = buff + TagLen - sizeof(T);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
280 for (p = buff; p < end && TagCount--;) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
281 vsize = Read_LE_Uint32(p);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
282 p += 4;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
283 flags = Read_LE_Uint32(p);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
284 p += 4;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
285 isize = strlen((char *) p);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
286
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
287 if (isize > 0 && vsize > 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
288 if (!(flags & 1 << 1)) { // insert UTF-8 string (skip binary values)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
289 if (!strcasecmp((char *) p, "Title")) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
290 tag_insert(Tag->title, (char *) (p + isize + 1), vsize,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
291 MAX_LEN, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
292 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
293 else if (!strcasecmp((char *) p, "Artist")) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
294 tag_insert(Tag->artist, (char *) (p + isize + 1), vsize,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
295 MAX_LEN, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
296 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
297 else if (!strcasecmp((char *) p, "Album")) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
298 tag_insert(Tag->album, (char *) (p + isize + 1), vsize,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
299 MAX_LEN, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
300 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
301 else if (!strcasecmp((char *) p, "Comment")) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
302 tag_insert(Tag->comment, (char *) (p + isize + 1), vsize,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
303 MAX_LEN, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
304 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
305 else if (!strcasecmp((char *) p, "Genre")) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
306 tag_insert(Tag->genre, (char *) (p + isize + 1), vsize,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
307 MAX_LEN, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
308 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
309 else if (!strcasecmp((char *) p, "Track")) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
310 tag_insert(Tag->track, (char *) (p + isize + 1), vsize,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
311 128, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
312 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
313 else if (!strcasecmp((char *) p, "Year")) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
314 tag_insert(Tag->year, (char *) (p + isize + 1), vsize,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
315 128, false);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
316 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
317 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
318 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
319 p += isize + 1 + vsize;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
320 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
321 free(buff);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
322 return 1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
323 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
324
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
325 int
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
326 DeleteTag(char *filename)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
327 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
328
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
329 VFSFile *fp = aud_vfs_fopen(filename, "rb+");
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
330 int tagtype;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
331 int fd;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
332 long filelength = 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
333 long dellength = -1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
334 char *tagheader;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
335 unsigned long *apelength;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
336 int res = -1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
337
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
338 if (fp == NULL) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
339 char text[256];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
340
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
341 sprintf(text, "File \"%s\" not found or is read protected!\n",
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
342 filename);
1677
f6f5603a0954 xmms_show_message() changed to audacious_info_dialog()
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
343 audacious_info_dialog("File-Error", (gchar *) text, "Ok", FALSE, NULL,
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
344 NULL);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
345 return -1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
346 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
347 tagtype = GetTageType(fp);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
348
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
349 // get Length of File
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
350 aud_vfs_fseek(fp, 0L, SEEK_END);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
351 filelength = aud_vfs_ftell(fp);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
352
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
353 apelength = (unsigned long *) malloc(4);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
354 tagheader = (char *) malloc(9);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
355
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
356 if (tagtype == TAG_ID3) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
357 dellength = 128L;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
358 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
359 else if (tagtype == TAG_APE) {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
360 aud_vfs_fseek(fp, -32L, SEEK_END);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
361 aud_vfs_fread(tagheader, 8, 1, fp);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
362 if (0 == memcmp(tagheader, "APETAGEX", 8)) {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
363 aud_vfs_fseek(fp, -20L, SEEK_END);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
364 aud_vfs_fread(apelength, 4, 1, fp);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
365 dellength = *apelength + 32;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
366 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
367 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
368
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
369
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
370 if (dellength > -1) //if TAG was found, delete it
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
371 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
372 fd = open(filename, O_RDWR);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
373 res = ftruncate(fd, (off_t) (filelength - dellength));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
374 close(fd);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
375 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
376
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
377 free(tagheader);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
378 free(apelength);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
379
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
380 //returns 0 if everything is ok
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
381 return res;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
382 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
383
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
384 // Returns bytes used in APE-Tag for this value
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
385 int
1044
b1128efde471 [svn] - get rid of all warnings gcc 4.2.0 emits with my build configuration.
yaz
parents: 265
diff changeset
386 addValue(TagItem * item, const char *key, char *value)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
387 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
388 item->keylen = strlen(key);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
389 item->valuelen = strlen(value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
390 item->key = (char *) malloc(item->keylen + 1);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
391 item->value = (unsigned char *) malloc(item->valuelen + 1);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
392 strcpy((char *) item->value, value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
393 strcpy(item->key, key);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
394 item->flags = 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
395 return (9 + item->keylen + item->valuelen);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
396 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
397
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
398 int
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
399 WriteAPE2Tag(char *filename, ape_tag * Tag)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
400 {
265
32de2fc2270a [svn] - use VFS here
nenolod
parents: 109
diff changeset
401 VFSFile *fp;
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
402 unsigned char H[32] = "APETAGEX";
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
403 unsigned long Version = 2000;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
404 unsigned char dw[8];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
405 unsigned long estimatedbytes = 32; // 32 byte footer + all items, these are the 32 bytes footer, the items are added later
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
406 long writtenbytes = -32; // actually writtenbytes-32, which should be equal to estimatedbytes (= footer + all items)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
407 unsigned int TagCount = 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
408 TagItem T[7];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
409
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
410
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
411 // Delete Tag if there is one
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
412 fp = aud_vfs_fopen(filename, "rb+");
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
413 if (fp == NULL) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
414 char text[256];
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
415
1159
a03aec49af4d [svn] Replace sprintf with snprintf.
js
parents: 1044
diff changeset
416 snprintf(text, 256, "File \"%s\" not found or is read protected!\n",
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
417 filename);
1677
f6f5603a0954 xmms_show_message() changed to audacious_info_dialog()
Matti Hamalainen <ccr@tnsp.org>
parents: 1159
diff changeset
418 audacious_info_dialog("File-Error", (gchar *) text, "Ok", FALSE, NULL,
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
419 NULL);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
420 return -1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
421 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
422
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
423 int tagtype = GetTageType(fp);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
424
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
425 if (tagtype != TAG_NONE)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
426 if (DeleteTag(filename) != 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
427 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
428
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
429 // Produce TagItem-Array
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
430 if (strlen(Tag->title) > 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
431 char *value = (char *) malloc(strlen(Tag->title) + 1);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
432
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
433 strcpy(value, Tag->title);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
434 int res = addValue(&T[TagCount], "Title", value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
435
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
436 estimatedbytes += res;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
437 if (res > 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
438 TagCount++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
439 free(value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
440 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
441
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
442 if (strlen(Tag->artist) > 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
443 char *value = (char *) malloc(strlen(Tag->artist) + 1);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
444
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
445 strcpy(value, Tag->artist);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
446 int res = addValue(&T[TagCount], "Artist", value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
447
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
448 estimatedbytes += res;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
449 if (res > 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
450 TagCount++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
451 free(value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
452 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
453
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
454 if (strlen(Tag->album) > 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
455 char *value = (char *) malloc(strlen(Tag->album) + 1);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
456
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
457 strcpy(value, Tag->album);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
458 int res = addValue(&T[TagCount], "Album", value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
459
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
460 estimatedbytes += res;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
461 if (res > 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
462 TagCount++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
463 free(value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
464 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
465
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
466 if (strlen(Tag->comment) > 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
467 char *value = (char *) malloc(strlen(Tag->comment) + 1);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
468
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
469 strcpy(value, Tag->comment);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
470 int res = addValue(&T[TagCount], "Comment", value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
471
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
472 estimatedbytes += res;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
473 if (res > 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
474 TagCount++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
475 free(value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
476 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
477
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
478 if (strlen(Tag->genre) > 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
479 char *value = (char *) malloc(strlen(Tag->genre) + 1);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
480
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
481 strcpy(value, Tag->genre);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
482 int res = addValue(&T[TagCount], "Genre", value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
483
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
484 estimatedbytes += res;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
485 if (res > 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
486 TagCount++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
487 free(value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
488 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
489
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
490 if (strlen(Tag->track) > 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
491 char *value = (char *) malloc(strlen(Tag->track) + 1);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
492
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
493 strcpy(value, Tag->track);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
494 int res = addValue(&T[TagCount], "Track", value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
495
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
496 estimatedbytes += res;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
497 if (res > 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
498 TagCount++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
499 free(value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
500 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
501
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
502 if (strlen(Tag->year) > 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
503 char *value = (char *) malloc(strlen(Tag->year) + 1);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
504
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
505 strcpy(value, Tag->year);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
506 int res = addValue(&T[TagCount], "Year", value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
507
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
508 estimatedbytes += res;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
509 if (res > 0)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
510 TagCount++;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
511 free(value);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
512 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
513 // Start writing the new Ape2 Tag
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
514 aud_vfs_fseek(fp, 0L, SEEK_END);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
515
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
516 if (TagCount == 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
517 printf("no tag to write");
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
518 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
519 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
520
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
521 if (estimatedbytes >= 8192 + 103) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
522 printf
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
523 ("\nTag is %.1f Kbyte long. This is longer than the maximum recommended 8 KByte.\n\a",
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
524 estimatedbytes / 1024.);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
525 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
526 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
527
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
528 H[8] = Version >> 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
529 H[9] = Version >> 8;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
530 H[10] = Version >> 16;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
531 H[11] = Version >> 24;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
532 H[12] = estimatedbytes >> 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
533 H[13] = estimatedbytes >> 8;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
534 H[14] = estimatedbytes >> 16;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
535 H[15] = estimatedbytes >> 24;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
536 H[16] = TagCount >> 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
537 H[17] = TagCount >> 8;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
538 H[18] = TagCount >> 16;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
539 H[19] = TagCount >> 24;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
540
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
541 H[23] = 0x80 | 0x20;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
542 writtenbytes += aud_vfs_fwrite(H, 1, 32, fp);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
543
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
544 for (unsigned int i = 0; i < TagCount; i++) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
545 dw[0] = T[i].valuelen >> 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
546 dw[1] = T[i].valuelen >> 8;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
547 dw[2] = T[i].valuelen >> 16;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
548 dw[3] = T[i].valuelen >> 24;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
549 dw[4] = T[i].flags >> 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
550 dw[5] = T[i].flags >> 8;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
551 dw[6] = T[i].flags >> 16;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
552 dw[7] = T[i].flags >> 24;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
553 writtenbytes += aud_vfs_fwrite(dw, 1, 8, fp);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
554 writtenbytes += aud_vfs_fwrite(T[i].key, 1, T[i].keylen, fp);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
555 writtenbytes += aud_vfs_fwrite("", 1, 1, fp);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
556 if (T[i].valuelen > 0)
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
557 writtenbytes += aud_vfs_fwrite(T[i].value, 1, T[i].valuelen, fp);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
558 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
559
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
560 H[23] = 0x80;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
561 writtenbytes += aud_vfs_fwrite(H, 1, 32, fp);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
562
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
563 if (estimatedbytes != (unsigned long) writtenbytes)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
564 printf("\nError writing APE tag.\n");
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1677
diff changeset
565 aud_vfs_fclose(fp);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
566 TagCount = 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
567 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
568 }