51 #include <nsComponentManagerUtils.h>
52 #include <nsServiceManagerUtils.h>
55 #include <nsIBinaryInputStream.h>
56 #include <nsIFileStreams.h>
57 #include <nsIIOService.h>
60 #define LITTLE_TO_NATIVE16(x) (((((PRUint16) x) & 0xFF) << 8) | \
61 (((PRUint16) x) >> 8))
62 #define LITTLE_TO_NATIVE32(x) (((((PRUint32) x) & 0xFF) << 24) | \
63 (((((PRUint32) x) >> 8) & 0xFF) << 16) | \
64 (((((PRUint32) x) >> 16) & 0xFF) << 8) | \
65 (((PRUint32) x) >> 24))
67 #define LITTLE_TO_NATIVE16(x) x
68 #define LITTLE_TO_NATIVE32(x) x
96 nsCOMPtr<nsIFileInputStream> fileStream =
97 do_CreateInstance(
"@mozilla.org/network/file-input-stream;1", &rv);
98 NS_ENSURE_SUCCESS(rv, rv);
100 rv = fileStream->Init(aICOFile, -1, -1, 0);
101 NS_ENSURE_SUCCESS(rv, rv);
104 rv = fileStream->Available(&dataSize);
105 NS_ENSURE_SUCCESS(rv, rv);
107 nsCOMPtr<nsIBinaryInputStream> imageDataStream =
108 do_CreateInstance(
"@mozilla.org/binaryinputstream;1", &rv);
109 NS_ENSURE_SUCCESS(rv, rv);
111 rv = imageDataStream->SetInputStream(fileStream);
112 NS_ENSURE_SUCCESS(rv, rv);
114 rv = imageDataStream->ReadByteArray(dataSize, &data);
115 NS_ENSURE_SUCCESS(rv, rv);
117 rv = fileStream->Close();
118 NS_ENSURE_SUCCESS(rv, rv);
122 return NS_ERROR_UNEXPECTED;
125 if (!(data[0] == 0 && data[1] == 0 && data[2] == 1 && data[3] == 0))
126 return NS_ERROR_UNEXPECTED;
129 PRUint16 numIcons = 0;
130 memcpy(&numIcons, data+4, 2);
134 for (
unsigned int i=0;
i<numIcons;
i++) {
136 if (dataSize < (7 + (
i*16)))
137 return NS_ERROR_UNEXPECTED;
138 memcpy(&width, data + 6 + (
i*16), 1);
139 if (width == aSize) {
140 rv = GetIcon(
i, data, dataSize, _retval);
141 NS_ENSURE_SUCCESS(rv, rv);
145 if (_retval.IsEmpty()) {
146 return NS_ERROR_NOT_AVAILABLE;
162 sbImageParser::GetIcon(PRUint32 imageIndex,
165 nsAString& iconString)
171 if (dataSize < (6 + (imageIndex*16) + 12 + 4))
172 return NS_ERROR_UNEXPECTED;
173 memcpy(&size, data + 6 + (imageIndex*16) + 8, 4);
174 memcpy(&offset, data + 6 + (imageIndex*16) + 12, 4);
180 PRUint8* buffer =
static_cast<PRUint8*
>(NS_Alloc(size + 22));
181 NS_ENSURE_TRUE(buffer, NS_ERROR_OUT_OF_MEMORY);
185 buffer[0] = buffer[1] = buffer[3] = buffer[5] = 0;
186 buffer[2] = buffer[4] = 1;
189 memcpy(buffer+6, data + 6 + (imageIndex*16), 16);
193 buffer[19] = buffer[20] = buffer[21] = 0;
196 if (dataSize < (offset + size))
197 return NS_ERROR_UNEXPECTED;
198 memcpy(buffer+22, data + offset, size);
201 iconString.AssignLiteral(
"data:image/vnd.microsoft.icon;base64,");
202 iconString.AppendLiteral(PL_Base64Encode((
char*)buffer, size+22, NULL));
Songbird Image Parser Definitions.
#define LITTLE_TO_NATIVE16(x)
#define LITTLE_TO_NATIVE32(x)
NS_DECL_ISUPPORTS NS_DECL_SBIIMAGEPARSER sbImageParser()
_getSelectedPageStyle s i
NS_IMPL_THREADSAFE_ISUPPORTS1(sbImageParser, sbIImageParser) NS_IMETHODIMP sbImageParser