Mercurial > audlegacy
annotate src/libid3tag/file.c @ 4299:a16edefb8836
- 1st attempt to integrate MPlayer's equalizer (will work in 24bit mode too).
Please, check sound quality! Let me know, if you will find it not
appropriate.
- EQ pregain doesn't work yet.
author | Eugene Zagidullin <e.asphyx@gmail.com> |
---|---|
date | Sat, 23 Feb 2008 16:34:10 +0300 |
parents | bb709f82068b |
children | 7bf7f83a217e |
rev | line source |
---|---|
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
1 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
2 * libid3tag - ID3 tag manipulation library |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc. |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
4 * |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
5 * This program is free software; you can redistribute it and/or modify |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
6 * it under the terms of the GNU General Public License as published by |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
7 * the Free Software Foundation; either version 2 of the License, or |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
8 * (at your option) any later version. |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
9 * |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
10 * This program is distributed in the hope that it will be useful, |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
13 * GNU General Public License for more details. |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
14 * |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
16 * along with this program; if not, write to the Free Software |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
18 * |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
19 * $Id: file.c,v 1.21 2004/01/23 09:41:32 rob Exp $ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
20 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
21 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
22 # ifdef HAVE_CONFIG_H |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
23 # include "config.h" |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
24 # endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
25 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
26 # include "global.h" |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
27 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
28 # include <stdio.h> |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
29 # include <stdlib.h> |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
30 # include <string.h> |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
31 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
32 # ifdef HAVE_UNISTD_H |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
33 # include <unistd.h> |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
34 # endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
35 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
36 # ifdef HAVE_ASSERT_H |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
37 # include <assert.h> |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
38 # endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
39 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
40 # include "id3tag.h" |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
41 # include "file.h" |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
42 # include "tag.h" |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
43 # include "field.h" |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
44 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
45 #define AUDACIOUS 1 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
46 //#undef AUDACIOUS |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
47 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
48 #ifdef AUDACIOUS |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
49 #include <audacious/plugin.h> |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
50 #else |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
51 #define VFSFile FILE |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
52 #define aud_vfs_fopen fopen |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
53 #define aud_vfs_fclose fclose |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
54 #define aud_vfs_fseek fseek |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
55 #define aud_vfs_ftell ftell |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
56 #define aud_vfs_rewind rewind |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
57 #define aud_vfs_fread fread |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
58 #define aud_vfs_fwrite fwrite |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
59 #define aud_vfs_truncate(x, y) ftruncate((fileno(x)), (y)) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
60 #endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
61 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
62 struct filetag { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
63 struct id3_tag *tag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
64 unsigned long location; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
65 id3_length_t length; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
66 }; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
67 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
68 struct id3_file { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
69 VFSFile *iofile; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
70 enum id3_file_mode mode; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
71 char *path; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
72 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
73 int flags; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
74 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
75 struct id3_tag *primary; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
76 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
77 unsigned int ntags; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
78 struct filetag *tags; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
79 }; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
80 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
81 enum { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
82 ID3_FILE_FLAG_ID3V1 = 0x0001 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
83 }; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
84 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
85 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
86 * NAME: query_tag() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
87 * DESCRIPTION: check for a tag at a file's current position |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
88 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
89 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
90 signed long query_tag(VFSFile *iofile) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
91 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
92 int save_position; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
93 id3_byte_t query[ID3_TAG_QUERYSIZE]; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
94 signed long size; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
95 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
96 save_position = aud_vfs_ftell(iofile); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
97 if (save_position == -1) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
98 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
99 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
100 size = id3_tag_query(query, aud_vfs_fread(query, 1, sizeof(query), iofile)); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
101 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
102 if(aud_vfs_fseek(iofile, save_position, SEEK_SET) == -1) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
103 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
104 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
105 return size; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
106 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
107 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
108 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
109 * NAME: read_tag() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
110 * DESCRIPTION: read and parse a tag at a file's current position |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
111 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
112 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
113 struct id3_tag *read_tag(VFSFile *iofile, id3_length_t size) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
114 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
115 id3_byte_t *data; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
116 struct id3_tag *tag = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
117 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
118 data = malloc(size); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
119 if (data) { |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
120 if (aud_vfs_fread(data, size, 1, iofile) == 1) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
121 tag = id3_tag_parse(data, size); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
122 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
123 free(data); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
124 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
125 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
126 return tag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
127 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
128 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
129 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
130 * NAME: update_primary() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
131 * DESCRIPTION: update the primary tag with data from a new tag |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
132 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
133 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
134 int update_primary(struct id3_tag *tag, struct id3_tag const *new) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
135 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
136 unsigned int i; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
137 struct id3_frame *frame; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
138 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
139 if (new) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
140 if (!(new->extendedflags & ID3_TAG_EXTENDEDFLAG_TAGISANUPDATE)) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
141 id3_tag_clearframes(tag); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
142 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
143 i = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
144 while ((frame = id3_tag_findframe(new, 0, i++))) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
145 if (id3_tag_attachframe(tag, frame) == -1) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
146 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
147 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
148 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
149 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
150 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
151 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
152 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
153 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
154 * NAME: tag_compare() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
155 * DESCRIPTION: tag sort function for qsort() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
156 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
157 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
158 int tag_compare(const void *a, const void *b) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
159 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
160 struct filetag const *tag1 = a, *tag2 = b; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
161 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
162 if (tag1->location < tag2->location) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
163 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
164 else if (tag1->location > tag2->location) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
165 return +1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
166 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
167 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
168 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
169 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
170 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
171 * NAME: add_filetag() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
172 * DESCRIPTION: add a new file tag entry |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
173 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
174 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
175 int add_filetag(struct id3_file *file, struct filetag const *filetag) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
176 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
177 struct filetag *tags; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
178 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
179 tags = realloc(file->tags, (file->ntags + 1) * sizeof(*tags)); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
180 if (tags == 0) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
181 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
182 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
183 file->tags = tags; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
184 file->tags[file->ntags++] = *filetag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
185 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
186 /* sort tags by location */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
187 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
188 if (file->ntags > 1) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
189 qsort(file->tags, file->ntags, sizeof(file->tags[0]), tag_compare); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
190 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
191 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
192 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
193 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
194 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
195 * NAME: del_filetag() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
196 * DESCRIPTION: delete a file tag entry |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
197 */ |
3693 | 198 /* |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
199 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
200 void del_filetag(struct id3_file *file, unsigned int index) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
201 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
202 assert(index < file->ntags); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
203 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
204 while (index < file->ntags - 1) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
205 file->tags[index] = file->tags[index + 1]; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
206 ++index; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
207 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
208 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
209 --file->ntags; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
210 } |
3693 | 211 */ |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
212 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
213 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
214 * NAME: add_tag() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
215 * DESCRIPTION: read, parse, and add a tag to a file structure |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
216 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
217 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
218 struct id3_tag *add_tag(struct id3_file *file, id3_length_t length) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
219 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
220 long location; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
221 unsigned int i; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
222 struct filetag filetag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
223 struct id3_tag *tag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
224 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
225 location = aud_vfs_ftell(file->iofile); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
226 if (location == -1) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
227 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
228 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
229 /* check for duplication/overlap */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
230 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
231 unsigned long begin1, end1, begin2, end2; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
232 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
233 begin1 = location; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
234 end1 = begin1 + length; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
235 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
236 for (i = 0; i < file->ntags; ++i) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
237 begin2 = file->tags[i].location; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
238 end2 = begin2 + file->tags[i].length; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
239 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
240 if (begin1 == begin2 && end1 == end2) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
241 return file->tags[i].tag; /* duplicate */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
242 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
243 if (begin1 < end2 && end1 > begin2) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
244 return 0; /* overlap */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
245 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
246 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
247 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
248 tag = read_tag(file->iofile, length); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
249 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
250 filetag.tag = tag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
251 filetag.location = location; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
252 filetag.length = length; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
253 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
254 if (add_filetag(file, &filetag) == -1 || |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
255 update_primary(file->primary, tag) == -1) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
256 if (tag) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
257 id3_tag_delete(tag); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
258 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
259 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
260 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
261 if (tag) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
262 id3_tag_addref(tag); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
263 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
264 return tag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
265 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
266 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
267 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
268 * NAME: search_tags() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
269 * DESCRIPTION: search for tags in a file |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
270 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
271 //static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
272 int search_tags(struct id3_file *file) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
273 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
274 int save_position; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
275 signed long size; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
276 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
277 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
278 * save the current seek position |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
279 * |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
280 * We also verify the stream is seekable by calling fsetpos(), since |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
281 * fgetpos() alone is not reliable enough for this purpose. |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
282 * |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
283 * [Apparently not even fsetpos() is sufficient under Win32.] |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
284 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
285 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
286 // if (fgetpos(file->iofile, &save_position) == -1 || |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
287 // fsetpos(file->iofile, &save_position) == -1) |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
288 // if (save_position = aud_vfs_ftell(file->iofile) == -1 || |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
289 // aud_vfs_fseek(file->iofile, save_position, SEEK_SET) == -1) |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
290 if((save_position = aud_vfs_ftell(file->iofile)) == -1) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
291 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
292 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
293 /* look for an ID3v1 tag */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
294 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
295 if (aud_vfs_fseek(file->iofile, -128, SEEK_END) == 0) { |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
296 size = query_tag(file->iofile); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
297 if (size > 0) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
298 struct id3_tag const *tag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
299 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
300 tag = add_tag(file, size); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
301 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
302 /* if this is indeed an ID3v1 tag, mark the file so */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
303 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
304 if (tag && (ID3_TAG_VERSION_MAJOR(id3_tag_version(tag)) == 1)) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
305 file->flags |= ID3_FILE_FLAG_ID3V1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
306 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
307 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
308 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
309 /* look for a tag at the beginning of the file */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
310 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
311 aud_vfs_rewind(file->iofile); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
312 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
313 size = query_tag(file->iofile); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
314 if (size > 0) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
315 struct id3_tag const *tag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
316 struct id3_frame const *frame; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
317 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
318 tag = add_tag(file, size); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
319 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
320 /* locate tags indicated by SEEK frames */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
321 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
322 while (tag && (frame = id3_tag_findframe(tag, "SEEK", 0))) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
323 long seek; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
324 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
325 seek = id3_field_getint(id3_frame_field(frame, 0)); |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
326 if (seek < 0 || aud_vfs_fseek(file->iofile, seek, SEEK_CUR) == -1) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
327 break; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
328 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
329 size = query_tag(file->iofile); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
330 tag = (size > 0) ? add_tag(file, size) : 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
331 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
332 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
333 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
334 /* look for a tag at the end of the file (before any ID3v1 tag) */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
335 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
336 if (aud_vfs_fseek(file->iofile, ((file->flags & ID3_FILE_FLAG_ID3V1) ? -128 : 0) + |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
337 -10, SEEK_END) == 0) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
338 size = query_tag(file->iofile); |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
339 if (size < 0 && aud_vfs_fseek(file->iofile, size, SEEK_CUR) == 0) { |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
340 size = query_tag(file->iofile); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
341 if (size > 0) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
342 add_tag(file, size); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
343 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
344 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
345 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
346 #ifndef AUDACIOUS |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
347 clearerr(file->iofile); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
348 #endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
349 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
350 /* restore seek position */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
351 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
352 if (aud_vfs_fseek(file->iofile, save_position, SEEK_SET) == -1) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
353 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
354 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
355 /* set primary tag options and target padded length for convenience */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
356 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
357 if ((file->ntags > 0 && !(file->flags & ID3_FILE_FLAG_ID3V1)) || |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
358 (file->ntags > 1 && (file->flags & ID3_FILE_FLAG_ID3V1))) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
359 if (file->tags[0].location == 0) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
360 id3_tag_setlength(file->primary, file->tags[0].length); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
361 else |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
362 id3_tag_options(file->primary, ID3_TAG_OPTION_APPENDEDTAG, ~0); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
363 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
364 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
365 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
366 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
367 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
368 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
369 * NAME: finish_file() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
370 * DESCRIPTION: release memory associated with a file |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
371 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
372 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
373 void finish_file(struct id3_file *file) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
374 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
375 unsigned int i; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
376 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
377 if (file->path) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
378 free(file->path); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
379 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
380 if (file->primary) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
381 id3_tag_delref(file->primary); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
382 id3_tag_delete(file->primary); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
383 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
384 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
385 for (i = 0; i < file->ntags; ++i) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
386 struct id3_tag *tag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
387 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
388 tag = file->tags[i].tag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
389 if (tag) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
390 id3_tag_delref(tag); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
391 id3_tag_delete(tag); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
392 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
393 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
394 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
395 if (file->tags) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
396 free(file->tags); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
397 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
398 free(file); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
399 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
400 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
401 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
402 * NAME: new_file() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
403 * DESCRIPTION: create a new file structure and load tags |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
404 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
405 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
406 struct id3_file *new_file(VFSFile *iofile, enum id3_file_mode mode, |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
407 char const *path) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
408 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
409 struct id3_file *file; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
410 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
411 file = malloc(sizeof(*file)); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
412 if (file == 0) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
413 goto fail; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
414 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
415 file->iofile = iofile; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
416 file->mode = mode; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
417 file->path = path ? strdup(path) : 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
418 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
419 file->flags = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
420 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
421 file->ntags = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
422 file->tags = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
423 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
424 file->primary = id3_tag_new(); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
425 if (file->primary == 0) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
426 goto fail; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
427 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
428 id3_tag_addref(file->primary); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
429 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
430 /* load tags from the file */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
431 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
432 if (search_tags(file) == -1) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
433 goto fail; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
434 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
435 id3_tag_options(file->primary, ID3_TAG_OPTION_ID3V1, |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
436 (file->flags & ID3_FILE_FLAG_ID3V1) ? ~0 : 0); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
437 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
438 if (0) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
439 fail: |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
440 if (file) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
441 finish_file(file); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
442 file = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
443 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
444 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
445 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
446 return file; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
447 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
448 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
449 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
450 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
451 * NAME: file->open() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
452 * DESCRIPTION: open a file given its pathname |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
453 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
454 struct id3_file *id3_file_open(char const *path, enum id3_file_mode mode) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
455 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
456 VFSFile *iofile; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
457 struct id3_file *file; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
458 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
459 assert(path); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
460 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
461 iofile = aud_vfs_fopen(path, (mode == ID3_FILE_MODE_READWRITE) ? "r+b" : "rb"); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
462 if (iofile == 0){ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
463 printf("id3_file_open: iofile failed\n"); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
464 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
465 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
466 file = new_file(iofile, mode, path); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
467 if (file == 0){ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
468 printf("id3_file_open: file failed\n"); |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
469 aud_vfs_fclose(iofile); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
470 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
471 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
472 return file; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
473 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
474 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
475 /* |
2563
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
476 * NAME: file->vfsopen() |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
477 * DESCRIPTION: open a file given its vfs |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
478 */ |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
479 struct id3_file *id3_file_vfsopen(VFSFile *iofile, enum id3_file_mode mode) |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
480 { |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
481 struct id3_file *file; |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
482 glong curpos; |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
483 gchar *path; |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
484 |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
485 assert(iofile); |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
486 |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
487 path = iofile->uri; |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
488 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
489 aud_vfs_dup(iofile); |
2563
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
490 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
491 curpos = aud_vfs_ftell(iofile); |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
492 aud_vfs_fseek(iofile, 0, SEEK_SET); |
2563
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
493 |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
494 file = new_file(iofile, mode, path); |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
495 if (file == 0){ |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
496 printf("id3_file_vfsopen: file failed\n"); |
4028
bb709f82068b
- Close dup()-ed file if ID3 file handling fails
Ralf Ertzinger <ralf@skytale.net>
parents:
3704
diff
changeset
|
497 aud_vfs_fclose(iofile); |
2563
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
498 } |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
499 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
500 aud_vfs_fseek(iofile, curpos, SEEK_SET); |
2563
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
501 |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
502 return file; |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
503 } |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
504 |
bdd0ee5888e0
[svn] - add support for opening id3 tags from a live vfs handle.
nenolod
parents:
2558
diff
changeset
|
505 /* |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
506 * NAME: file->fdopen() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
507 * DESCRIPTION: open a file using an existing file descriptor |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
508 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
509 #ifndef AUDACIOUS |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
510 struct id3_file *id3_file_fdopen(int fd, enum id3_file_mode mode) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
511 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
512 # if 1 || defined(HAVE_UNISTD_H) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
513 VFSFile *iofile; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
514 struct id3_file *file; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
515 |
2558 | 516 iofile = fdopen(fd, (mode == ID3_FILE_MODE_READWRITE) ? "r+b" : "rb"); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
517 if (iofile == 0) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
518 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
519 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
520 file = new_file(iofile, mode, 0); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
521 if (file == 0) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
522 int save_fd; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
523 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
524 /* close iofile without closing fd */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
525 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
526 save_fd = dup(fd); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
527 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
528 fclose(iofile); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
529 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
530 dup2(save_fd, fd); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
531 close(save_fd); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
532 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
533 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
534 return file; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
535 # else |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
536 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
537 # endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
538 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
539 #endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
540 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
541 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
542 * NAME: file->close() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
543 * DESCRIPTION: close a file and delete its associated tags |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
544 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
545 int id3_file_close(struct id3_file *file) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
546 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
547 int result = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
548 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
549 assert(file); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
550 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
551 if (aud_vfs_fclose(file->iofile) == EOF) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
552 result = -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
553 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
554 finish_file(file); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
555 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
556 return result; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
557 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
558 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
559 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
560 * NAME: file->tag() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
561 * DESCRIPTION: return the primary tag structure for a file |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
562 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
563 struct id3_tag *id3_file_tag(struct id3_file const *file) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
564 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
565 assert(file); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
566 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
567 return file->primary; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
568 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
569 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
570 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
571 * NAME: v1_write() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
572 * DESCRIPTION: write ID3v1 tag modifications to a file |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
573 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
574 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
575 int v1_write(struct id3_file *file, |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
576 id3_byte_t const *data, id3_length_t length) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
577 { |
2513 | 578 // assert(!data || length == 128); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
579 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
580 if (data) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
581 long location; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
582 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
583 if (aud_vfs_fseek(file->iofile, (file->flags & ID3_FILE_FLAG_ID3V1) ? -128 : 0, |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
584 SEEK_END) == -1 || |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
585 (location = aud_vfs_ftell(file->iofile)) == -1 || |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
586 #ifdef AUDACIOUS |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
587 aud_vfs_fwrite(data, 128, 1, file->iofile) != 1 ) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
588 #else |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
589 aud_vfs_fwrite(data, 128, 1, file->iofile) != 1 || |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
590 fflush(file->iofile) == EOF) //XXX |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
591 #endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
592 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
593 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
594 /* add file tag reference */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
595 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
596 if (!(file->flags & ID3_FILE_FLAG_ID3V1)) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
597 struct filetag filetag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
598 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
599 filetag.tag = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
600 filetag.location = location; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
601 filetag.length = 128; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
602 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
603 if (add_filetag(file, &filetag) == -1) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
604 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
605 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
606 file->flags |= ID3_FILE_FLAG_ID3V1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
607 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
608 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
609 # if defined(HAVE_FTRUNCATE) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
610 else if (file->flags & ID3_FILE_FLAG_ID3V1) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
611 long length; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
612 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
613 if (aud_vfs_fseek(file->iofile, 0, SEEK_END) == -1) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
614 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
615 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
616 length = aud_vfs_ftell(file->iofile); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
617 if (length == -1 || |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
618 (length >= 0 && length < 128)) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
619 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
620 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
621 if (aud_vfs_truncate(file->iofile, length - 128) == -1) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
622 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
623 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
624 /* delete file tag reference */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
625 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
626 del_filetag(file, file->ntags - 1); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
627 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
628 file->flags &= ~ID3_FILE_FLAG_ID3V1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
629 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
630 # endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
631 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
632 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
633 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
634 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
635 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
636 * NAME: v2_write() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
637 * DESCRIPTION: write ID3v2 tag modifications to a file |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
638 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
639 static |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
640 int v2_write(struct id3_file *file, |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
641 id3_byte_t const *data, id3_length_t length) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
642 { |
2513 | 643 // assert(!data || length > 0); |
644 | |
645 // delete tag request | |
646 if(!data && length == 0){ | |
647 int file_size; | |
648 int remainder_size; | |
649 char *remainder; | |
650 | |
651 /* read in the remainder of the file */ | |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
652 aud_vfs_fseek(file->iofile, 0, SEEK_END); |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
653 file_size = aud_vfs_ftell(file->iofile); |
2513 | 654 remainder_size = file_size - file->tags[0].location - file->tags[0].length; |
655 remainder = (char*)malloc(remainder_size); | |
656 | |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
657 if (aud_vfs_fseek(file->iofile, file->tags[0].location + file->tags[0].length, SEEK_SET) == -1 || |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
658 aud_vfs_fread(remainder, remainder_size, 1, file->iofile) != 1) { |
2513 | 659 free(remainder); |
660 return -1; | |
661 } | |
662 | |
663 /* write the remainder where the old tag was */ | |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
664 if (aud_vfs_fseek(file->iofile, file->tags[0].location, SEEK_SET) == -1 || |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
665 aud_vfs_fwrite(remainder, remainder_size, 1, file->iofile) != 1) { |
2513 | 666 free(remainder); |
667 return -1; | |
668 } | |
669 | |
670 free(remainder); | |
671 | |
672 /* flush the FILE */ | |
673 #ifndef AUDACIOUS | |
674 if (fflush(file->iofile) == EOF) | |
675 return -1; | |
676 #endif | |
677 /* truncate if required */ | |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
678 if (aud_vfs_ftell(file->iofile) < file_size) |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
679 aud_vfs_truncate(file->iofile, aud_vfs_ftell(file->iofile)); |
2513 | 680 |
681 } | |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
682 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
683 // append a new id3v2 tag to the file which doesn't have any tag or only have v1tag. |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
684 if(data && |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
685 ((file->ntags == 0) || // no tag |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
686 (file->ntags == 1 && (file->flags & ID3_FILE_FLAG_ID3V1))) ) { // only v1 tag exists |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
687 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
688 struct filetag filetag; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
689 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
690 printf("append v2tag\n"); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
691 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
692 filetag.tag = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
693 filetag.location = 0; // begining of the file. |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
694 filetag.length = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
695 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
696 if(add_filetag(file, &filetag) == -1) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
697 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
698 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
699 if(file->ntags == 1) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
700 file->flags = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
701 if(file->ntags == 2) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
702 file->flags |= ID3_FILE_FLAG_ID3V1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
703 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
704 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
705 if (!data |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
706 || (!(file->ntags == 1 && !(file->flags & ID3_FILE_FLAG_ID3V1)) && |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
707 !(file->ntags == 2 && (file->flags & ID3_FILE_FLAG_ID3V1)))) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
708 /* no v2 tag. nothing to do */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
709 goto done; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
710 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
711 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
712 if (file->tags[0].length == length) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
713 /* easy special case: rewrite existing tag in-place */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
714 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
715 if (aud_vfs_fseek(file->iofile, file->tags[0].location, SEEK_SET) == -1 || |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
716 #ifdef AUDACIOUS |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
717 aud_vfs_fwrite(data, length, 1, file->iofile) != 1) |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
718 #else |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
719 aud_vfs_fwrite(data, length, 1, file->iofile) != 1 || |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
720 fflush(file->iofile) == EOF) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
721 #endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
722 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
723 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
724 goto done; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
725 } else { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
726 /* the new tag has a different size */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
727 int file_size; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
728 int remainder_size; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
729 char *remainder; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
730 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
731 /* read in the remainder of the file */ |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
732 aud_vfs_fseek(file->iofile, 0, SEEK_END); |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
733 file_size = aud_vfs_ftell(file->iofile); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
734 remainder_size = file_size - file->tags[0].location - file->tags[0].length; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
735 remainder = (char*)malloc(remainder_size); |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
736 if (aud_vfs_fseek(file->iofile, file->tags[0].location + file->tags[0].length, SEEK_SET) == -1 || |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
737 aud_vfs_fread(remainder, remainder_size, 1, file->iofile) != 1) { |
2513 | 738 free(remainder); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
739 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
740 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
741 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
742 /* write the tag where the old one was */ |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
743 if (aud_vfs_fseek(file->iofile, file->tags[0].location, SEEK_SET) == -1 || |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
744 aud_vfs_fwrite(data, length, 1, file->iofile) != 1) { |
2513 | 745 free(remainder); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
746 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
747 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
748 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
749 /* write the reaminder */ |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
750 if (aud_vfs_fwrite(remainder, remainder_size, 1, file->iofile) != 1) { |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
751 free(remainder); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
752 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
753 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
754 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
755 free(remainder); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
756 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
757 /* flush the FILE */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
758 #ifndef AUDACIOUS |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
759 if (fflush(file->iofile) == EOF) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
760 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
761 #endif |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
762 /* truncate if required */ |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
763 if (aud_vfs_ftell(file->iofile) < file_size) |
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
764 aud_vfs_truncate(file->iofile, aud_vfs_ftell(file->iofile)); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
765 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
766 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
767 done: |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
768 return 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
769 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
770 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
771 /* |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
772 * NAME: file->update() |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
773 * DESCRIPTION: rewrite tag(s) to a file |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
774 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
775 int id3_file_update(struct id3_file *file) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
776 { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
777 int options, result = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
778 id3_length_t v1size = 0, v2size = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
779 id3_byte_t id3v1_data[128], *id3v1 = 0, *id3v2 = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
780 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
781 assert(file); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
782 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
783 if (file->mode != ID3_FILE_MODE_READWRITE) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
784 return -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
785 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
786 options = id3_tag_options(file->primary, 0, 0); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
787 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
788 /* render ID3v1 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
789 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
790 if (options & ID3_TAG_OPTION_ID3V1) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
791 v1size = id3_tag_render(file->primary, 0); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
792 if (v1size) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
793 assert(v1size == sizeof(id3v1_data)); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
794 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
795 v1size = id3_tag_render(file->primary, id3v1_data); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
796 if (v1size) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
797 assert(v1size == sizeof(id3v1_data)); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
798 id3v1 = id3v1_data; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
799 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
800 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
801 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
802 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
803 /* render ID3v2 */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
804 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
805 id3_tag_options(file->primary, ID3_TAG_OPTION_ID3V1, 0); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
806 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
807 v2size = id3_tag_render(file->primary, 0); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
808 if (v2size) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
809 id3v2 = malloc(v2size); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
810 if (id3v2 == 0) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
811 goto fail; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
812 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
813 v2size = id3_tag_render(file->primary, id3v2); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
814 if (v2size == 0) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
815 free(id3v2); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
816 id3v2 = 0; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
817 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
818 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
819 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
820 /* write tags */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
821 |
2513 | 822 if (v2_write(file, id3v2, v2size) == -1 && |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
823 v1_write(file, id3v1, v1size) == -1) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
824 goto fail; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
825 |
3704
fa3d2a62a066
use vtable functors for VFS access
William Pitcock <nenolod@atheme.org>
parents:
3693
diff
changeset
|
826 aud_vfs_rewind(file->iofile); |
2503
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
827 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
828 /* update file tags array? ... */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
829 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
830 if (0) { |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
831 fail: |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
832 result = -1; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
833 } |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
834 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
835 /* clean up; restore tag options */ |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
836 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
837 if (id3v2) |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
838 free(id3v2); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
839 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
840 id3_tag_options(file->primary, ~0, options); |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
841 |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
842 return result; |
10692383c103
[svn] first try for libid3tag integration. this improved libid3tag supports vfs operations and is capable of adding id3v2 tag to files which doesn't have id3v2 tag ever.
yaz
parents:
diff
changeset
|
843 } |