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)
92size_t dami::renderNumber(
uchar *buffer, uint32 val,
size_t size)
95 for (
size_t i = 0; i < size; i++)
103String dami::renderNumber(uint32 val,
size_t size)
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);
216size_t dami::ucslen(
const unicode_t *unicode)
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;
240ID3_Err dami::createFile(String name, fstream& file)
247 file.open(name.c_str(), ios::in | ios::out | ios::binary | ios::trunc);
256size_t dami::getFileSize(fstream& file)
261 streamoff curpos = file.tellg();
262 file.seekg(0, ios::end);
269size_t dami::getFileSize(ifstream& file)
274 streamoff curpos = file.tellg();
275 file.seekg(0, ios::end);
282size_t dami::getFileSize(ofstream& file)
287 streamoff curpos = file.tellp();
288 file.seekp(0, ios::end);
295ID3_Err dami::openWritableFile(String name, fstream& file)
306 file.open(name.c_str(), ios::in | ios::out | ios::binary |
NOCREATE);
315ID3_Err dami::openWritableFile(String name, ofstream& file)
326 file.open(name.c_str(), ios::in | ios::out | ios::binary |
NOCREATE);
335ID3_Err dami::openReadableFile(String name, fstream& file)
341 file.open(name.c_str(), ios::in | ios::binary |
NOCREATE);
350ID3_Err dami::openReadableFile(String name, ifstream& file)
356 file.open(name.c_str(), ios::in | ios::binary |
NOCREATE);
365String dami::toString(uint32 val)
375 char ch = (val % 10) +
'0';
383WString dami::toWString(
const unicode_t buf[],
size_t len)
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.
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)