[Swfdec-commits] swfdec/swfdec_buffer.c swfdec/swfdec_buffer.h swfdec/swfdec_loader.c swfdec/swfdec_loader_internal.h swfdec/swfdec_load_object.c swfdec/swfdec_policy_file.c
Benjamin Otte
company at kemper.freedesktop.org
Thu Jan 31 06:36:59 PST 2008
swfdec/swfdec_buffer.c | 71 +++++++++++++++++++++++++++++++++++++
swfdec/swfdec_buffer.h | 1
swfdec/swfdec_load_object.c | 6 +--
swfdec/swfdec_loader.c | 75 ----------------------------------------
swfdec/swfdec_loader_internal.h | 2 -
swfdec/swfdec_policy_file.c | 2 -
6 files changed, 75 insertions(+), 82 deletions(-)
New commits:
commit d53c8bd193725efdafcc6bdf95d6222db5ad2f22
Author: Benjamin Otte <otte at gnome.org>
Date: Thu Jan 31 15:36:32 2008 +0100
swfdec_loader_get_text() => swfdec_buffer_queue_pull_text()
We need that API for different cases. But I'm not sure we want to keep this
function. We might want swfdec_buffer_to_string() or similar.
diff --git a/swfdec/swfdec_buffer.c b/swfdec/swfdec_buffer.c
index 3420d10..9ad80fb 100644
--- a/swfdec/swfdec_buffer.c
+++ b/swfdec/swfdec_buffer.c
@@ -639,3 +639,74 @@ swfdec_buffer_queue_unref (SwfdecBufferQueue * queue)
}
}
+typedef struct {
+ const char *name;
+ guint length;
+ guchar data[4];
+} ByteOrderMark;
+
+static ByteOrderMark boms[] = {
+ { "UTF-8", 3, {0xEF, 0xBB, 0xBF, 0} },
+ { "UTF-16BE", 2, {0xFE, 0xFF, 0, 0} },
+ { "UTF-16LE", 2, {0xFF, 0xFE, 0, 0} },
+ { "UTF-8", 0, {0, 0, 0, 0} }
+};
+
+char *
+swfdec_buffer_queue_pull_text (SwfdecBufferQueue *queue, guint version)
+{
+ SwfdecBuffer *buffer;
+ char *text;
+ guint size, i, j;
+
+ size = swfdec_buffer_queue_get_depth (queue);
+ if (size == 0) {
+ SWFDEC_LOG ("empty loader, returning empty string");
+ return g_strdup ("");
+ }
+
+ buffer = swfdec_buffer_queue_pull (queue, size);
+ g_assert (buffer);
+
+ if (version > 5) {
+ for (i = 0; boms[i].length > 0; i++) {
+ // FIXME: test what happens if we have BOM and nothing else
+ if (size < boms[i].length)
+ continue;
+
+ for (j = 0; j < boms[i].length; j++) {
+ if (buffer->data[j] != boms[i].data[j])
+ break;
+ }
+ if (j == boms[i].length)
+ break;
+ }
+
+ if (!strcmp (boms[i].name, "UTF-8")) {
+ if (!g_utf8_validate ((char *)buffer->data + boms[i].length,
+ size - boms[i].length, NULL)) {
+ SWFDEC_ERROR ("downloaded data is not valid UTF-8");
+ text = NULL;
+ } else {
+ text =
+ g_strndup ((char *)buffer->data + boms[i].length,
+ size - boms[i].length);
+ }
+ } else {
+ text = g_convert ((char *)buffer->data + boms[i].length,
+ size - boms[i].length, "UTF-8", boms[i].name, NULL, NULL, NULL);
+ if (text == NULL)
+ SWFDEC_ERROR ("downloaded data is not valid %s", boms[i].name);
+ }
+ } else {
+ text = g_convert ((char *)buffer->data, size, "UTF-8", "LATIN1", NULL,
+ NULL, NULL);
+ if (text == NULL)
+ SWFDEC_ERROR ("downloaded data is not valid LATIN1");
+ }
+
+ swfdec_buffer_unref (buffer);
+
+ return text;
+}
+
diff --git a/swfdec/swfdec_buffer.h b/swfdec/swfdec_buffer.h
index 248f425..84e4bd6 100644
--- a/swfdec/swfdec_buffer.h
+++ b/swfdec/swfdec_buffer.h
@@ -77,6 +77,7 @@ void swfdec_buffer_queue_push (SwfdecBufferQueue * queue,
SwfdecBuffer * buffer);
SwfdecBuffer *swfdec_buffer_queue_pull (SwfdecBufferQueue * queue, guint length);
SwfdecBuffer *swfdec_buffer_queue_pull_buffer (SwfdecBufferQueue * queue);
+char *swfdec_buffer_queue_pull_text (SwfdecBufferQueue *queue, guint version);
SwfdecBuffer *swfdec_buffer_queue_peek (SwfdecBufferQueue * queue, guint length);
SwfdecBuffer *swfdec_buffer_queue_peek_buffer (SwfdecBufferQueue * queue);
SwfdecBufferQueue *swfdec_buffer_queue_ref (SwfdecBufferQueue * queue);
diff --git a/swfdec/swfdec_load_object.c b/swfdec/swfdec_load_object.c
index 0e6e58d..d18a372 100644
--- a/swfdec/swfdec_load_object.c
+++ b/swfdec/swfdec_load_object.c
@@ -80,18 +80,16 @@ static void
swfdec_load_object_stream_target_close (SwfdecStreamTarget *target,
SwfdecStream *stream)
{
- SwfdecLoader *loader = SWFDEC_LOADER (stream);
SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);
char *text;
// get text
- text =
- swfdec_loader_get_text (loader, load_object->version);
+ text = swfdec_buffer_queue_pull_text (swfdec_stream_get_queue (stream), load_object->version);
/* break reference to the loader */
swfdec_stream_set_target (stream, NULL);
load_object->loader = NULL;
- g_object_unref (loader);
+ g_object_unref (stream);
/* call finish */
swfdec_sandbox_use (load_object->sandbox);
diff --git a/swfdec/swfdec_loader.c b/swfdec/swfdec_loader.c
index 9868eac..9b96681 100644
--- a/swfdec/swfdec_loader.c
+++ b/swfdec/swfdec_loader.c
@@ -366,78 +366,3 @@ swfdec_loader_data_type_get_extension (SwfdecLoaderDataType type)
}
}
-typedef struct {
- const char *name;
- guint length;
- guchar data[4];
-} ByteOrderMark;
-
-static ByteOrderMark boms[] = {
- { "UTF-8", 3, {0xEF, 0xBB, 0xBF, 0} },
- { "UTF-16BE", 2, {0xFE, 0xFF, 0, 0} },
- { "UTF-16LE", 2, {0xFF, 0xFE, 0, 0} },
- { "UTF-8", 0, {0, 0, 0, 0} }
-};
-
-char *
-swfdec_loader_get_text (SwfdecLoader *loader, guint version)
-{
- SwfdecBufferQueue *queue;
- SwfdecBuffer *buffer;
- char *text;
- guint size, i, j;
-
- /* get the text from the loader */
- queue = swfdec_stream_get_queue (SWFDEC_STREAM (loader));
- size = swfdec_buffer_queue_get_depth (queue);
- if (size == 0) {
- SWFDEC_LOG ("empty loader, returning empty string");
- return g_strdup ("");
- }
-
- buffer = swfdec_buffer_queue_peek (queue, size);
- if (!buffer)
- return NULL;
-
- if (version > 5) {
- for (i = 0; boms[i].length > 0; i++) {
- // FIXME: test what happens if we have BOM and nothing else
- if (size < boms[i].length)
- continue;
-
- for (j = 0; j < boms[i].length; j++) {
- if (buffer->data[j] != boms[i].data[j])
- break;
- }
- if (j == boms[i].length)
- break;
- }
-
- if (!strcmp (boms[i].name, "UTF-8")) {
- if (!g_utf8_validate ((char *)buffer->data + boms[i].length,
- size - boms[i].length, NULL)) {
- SWFDEC_ERROR ("downloaded data is not valid UTF-8");
- text = NULL;
- } else {
- text =
- g_strndup ((char *)buffer->data + boms[i].length,
- size - boms[i].length);
- }
- } else {
- text = g_convert ((char *)buffer->data + boms[i].length,
- size - boms[i].length, "UTF-8", boms[i].name, NULL, NULL, NULL);
- if (text == NULL)
- SWFDEC_ERROR ("downloaded data is not valid %s", boms[i].name);
- }
- } else {
- text = g_convert ((char *)buffer->data, size, "UTF-8", "LATIN1", NULL,
- NULL, NULL);
- if (text == NULL)
- SWFDEC_ERROR ("downloaded data is not valid LATIN1");
- }
-
- swfdec_buffer_unref (buffer);
-
- return text;
-}
-
diff --git a/swfdec/swfdec_loader_internal.h b/swfdec/swfdec_loader_internal.h
index c19ba9f..88d4dbf 100644
--- a/swfdec/swfdec_loader_internal.h
+++ b/swfdec/swfdec_loader_internal.h
@@ -35,8 +35,6 @@ void swfdec_stream_set_target (SwfdecStream * stream,
/* swfdec_loader.c */
void swfdec_loader_set_data_type (SwfdecLoader * loader,
SwfdecLoaderDataType type);
-char * swfdec_loader_get_text (SwfdecLoader * loader,
- guint version);
/* swfdec_socket.c */
void swfdec_socket_send (SwfdecSocket * sock,
diff --git a/swfdec/swfdec_policy_file.c b/swfdec/swfdec_policy_file.c
index 890494d..842091a 100644
--- a/swfdec/swfdec_policy_file.c
+++ b/swfdec/swfdec_policy_file.c
@@ -174,7 +174,7 @@ swfdec_policy_file_target_close (SwfdecStreamTarget *target,
char *text;
if (SWFDEC_IS_LOADER (stream)) {
- text = swfdec_loader_get_text (SWFDEC_LOADER (stream), 8);
+ text = swfdec_buffer_queue_pull_text (swfdec_stream_get_queue (stream), 8);
} else {
SWFDEC_FIXME ("rewrite swfdec_loader_get_text() to swfdec_buffer_queue_get_text()");
text = NULL;
More information about the Swfdec-commits
mailing list