29#if (defined(__GNUC__) && __GNUC__ == 2)
30#define NOCREATE ios::nocreate
35#define NOCREATE ((std::ios_base::openmode)0)
40#if defined HAVE_ICONV_H
42#if (defined(ID3_ICONV_FORMAT_UTF16BE) && defined(ID3_ICONV_FORMAT_UTF16) && defined(ID3_ICONV_FORMAT_UTF8) && defined(ID3_ICONV_FORMAT_ASCII))
53 size_t size = data.size();
54 dami::String unicode(size * 2,
'\0');
55 for (
size_t i = 0; i < size; ++i)
57 unicode[i*2+1] = toascii(data[i]);
65 size_t size = data.size() / 2;
66 dami::String ascii(size,
'\0');
67 for (
size_t i = 0; i < size; ++i)
69 ascii[i] = toascii(data[i*2+1]);
77#define ID3_IS_ASCII(enc) ((enc) == ID3TE_ASCII || (enc) == ID3TE_ISO8859_1 || (enc) == ID3TE_UTF8)
78#define ID3_IS_UNICODE(enc) ((enc) == ID3TE_UNICODE || (enc) == ID3TE_UTF16 || (enc) == ID3TE_UTF16BE)
95 for (
size_t i = 0; i < size; i++)
105 String str(size,
'\0');
107 for (
size_t i = 0; i < size; i++)
116#if defined(HAVE_ICONV_H)
120 String convert_i(iconv_t cd, String source)
123 size_t source_size = source.size();
124#if defined(ID3LIB_ICONV_OLDSTYLE)
125 const char* source_str = source.data();
127 char *source_str =
new char[source.size()+1];
128 source.copy(source_str, String::npos);
129 source_str[source.length()] = 0;
132#define ID3LIB_BUFSIZ 1024
133 char buf[ID3LIB_BUFSIZ];
134 char* target_str = buf;
135 size_t target_size = ID3LIB_BUFSIZ;
140 size_t nconv = iconv(cd,
141 &source_str, &source_size,
142 &target_str, &target_size);
143 if (nconv == (
size_t) -1 && errno != EINVAL && errno != E2BIG)
148 target.append(buf, ID3LIB_BUFSIZ - target_size);
150 target_size = ID3LIB_BUFSIZ;
152 while (source_size > 0);
158 const char* format =
NULL;
162 format = ID3_ICONV_FORMAT_ASCII;
166 format = ID3_ICONV_FORMAT_UTF16;
170 format = ID3_ICONV_FORMAT_UTF16BE;
174 format = ID3_ICONV_FORMAT_UTF8;
188 if ((sourceEnc != targetEnc) && (data.size() > 0 ))
190#if !defined HAVE_ICONV_H
191 target =
oldconvert(data, sourceEnc, targetEnc);
193 const char* targetFormat = getFormat(targetEnc);
194 const char* sourceFormat = getFormat(sourceEnc);
196 iconv_t cd = iconv_open (targetFormat, sourceFormat);
197 if (cd != (iconv_t) -1)
199 target = convert_i(cd, data);
200 if (target.size() == 0)
203 target =
oldconvert(data, sourceEnc, targetEnc);
208 target =
oldconvert(data, sourceEnc, targetEnc);
220 for (
size_t size = 0;
true; size++)
233 bool exists(String name)
235 ifstream file(name.c_str(),
NOCREATE);
236 return file.is_open() != 0;
247 file.open(name.c_str(), ios::in | ios::out | ios::binary | ios::trunc);
261 streamoff curpos = streamoff(file.tellg());
262 file.seekg(0, ios::end);
263 size = streamoff(file.tellg());
274 streamoff curpos = streamoff(file.tellg());
275 file.seekg(0, ios::end);
276 size = streamoff(file.tellg());
287 streamoff curpos = streamoff(file.tellp());
288 file.seekp(0, ios::end);
289 size = streamoff(file.tellp());
306 file.open(name.c_str(), ios::in | ios::out | ios::binary |
NOCREATE);
326 file.open(name.c_str(), ios::in | ios::out | ios::binary |
NOCREATE);
341 file.open(name.c_str(), ios::in | ios::binary |
NOCREATE);
356 file.open(name.c_str(), ios::in | ios::binary |
NOCREATE);
375 char ch = (val % 10) +
'0';
388 for (
size_t i = 0; i < len; ++i)
390 str +=
static_cast<WString::value_type
>(buf[i]);
ID3_Err
Predefined id3lib error types.
@ ID3E_ReadOnly
Attempting to write to a read-only file.
@ ID3E_NoError
No error reported.
@ ID3E_NoFile
No file to parse.
ID3_TextEnc
Enumeration of the types of text encodings: ascii or unicode.
size_t ID3_C_EXPORT getFileSize(fstream &)
String ID3_C_EXPORT toString(uint32 val)
String ID3_C_EXPORT convert(String data, ID3_TextEnc, ID3_TextEnc)
ID3_Err ID3_C_EXPORT openWritableFile(String, fstream &)
size_t ID3_C_EXPORT renderNumber(uchar *buffer, uint32 val, size_t size=sizeof(uint32))
ID3_Err ID3_C_EXPORT createFile(String, fstream &)
WString ID3_C_EXPORT toWString(const unicode_t[], size_t)
size_t ID3_C_EXPORT ucslen(const unicode_t *unicode)
ID3_Err ID3_C_EXPORT openReadableFile(String, fstream &)
dami::String ucstombs(dami::String data)
dami::String mbstoucs(dami::String data)
#define ID3_IS_ASCII(enc)
dami::String oldconvert(dami::String data, ID3_TextEnc sourceEnc, ID3_TextEnc targetEnc)
#define ID3_IS_UNICODE(enc)