summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/content.c2
-rw-r--r--riscos/sprite.c33
-rw-r--r--riscos/sprite.h3
3 files changed, 10 insertions, 28 deletions
diff --git a/content/content.c b/content/content.c
index b80d5de89..4b58e188f 100644
--- a/content/content.c
+++ b/content/content.c
@@ -195,7 +195,7 @@ static const struct handler_entry handler_map[] = {
0, nsmng_destroy, 0, nsmng_redraw, 0, 0, false},
#endif
#ifdef WITH_SPRITE
- {sprite_create, 0, sprite_convert,
+ {0, 0, sprite_convert,
0, sprite_destroy, 0, sprite_redraw, 0, 0, false},
#endif
#ifdef WITH_DRAW
diff --git a/riscos/sprite.c b/riscos/sprite.c
index 837dedfbe..27bc4f8af 100644
--- a/riscos/sprite.c
+++ b/riscos/sprite.c
@@ -31,28 +31,6 @@
/**
- * Create a new CONTENT_SPRITE.
- *
- * A new empty sprite area is allocated.
- */
-
-bool sprite_create(struct content *c, const char *params[])
-{
- union content_msg_data msg_data;
-
- c->data.sprite.data = malloc(4);
- if (!c->data.sprite.data) {
- msg_data.error = messages_get("NoMemory");
- content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
- warn_user("NoMemory", 0);
- return false;
- }
- c->data.sprite.length = 4;
- return true;
-}
-
-
-/**
* Convert a CONTENT_SPRITE for display.
*
* No conversion is necessary. We merely read the sprite dimensions.
@@ -68,6 +46,13 @@ bool sprite_convert(struct content *c, int width, int height)
source_data = ((char *)c->source_data) - 4;
osspriteop_area *area = (osspriteop_area*)source_data;
c->data.sprite.data = area;
+
+ /* check for bad data */
+ if ((int)c->source_size + 4 != area->used) {
+ msg_data.error = messages_get("BadSprite");
+ content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
+ return false;
+ }
error = xosspriteop_read_sprite_info(osspriteop_PTR,
(osspriteop_area *)0x100,
@@ -86,7 +71,7 @@ bool sprite_convert(struct content *c, int width, int height)
c->title = malloc(100);
if (c->title)
snprintf(c->title, 100, messages_get("SpriteTitle"), c->width,
- c->height, c->data.sprite.length);
+ c->height, c->source_size);
c->status = CONTENT_STATUS_DONE;
return true;
}
@@ -99,7 +84,7 @@ bool sprite_convert(struct content *c, int width, int height)
void sprite_destroy(struct content *c)
{
/* do not free c->data.sprite.data at it is simply a pointer to
- * 4 bytes before the c->data.source_data. */
+ * 4 bytes beforec->source_data. */
free(c->title);
}
diff --git a/riscos/sprite.h b/riscos/sprite.h
index 3824ace43..f360d2bb0 100644
--- a/riscos/sprite.h
+++ b/riscos/sprite.h
@@ -18,11 +18,8 @@ struct content;
struct content_sprite_data {
void *data;
- unsigned long length;
};
-bool sprite_create(struct content *c, const char *params[]);
-bool sprite_process_data(struct content *c, char *data, unsigned int size);
bool sprite_convert(struct content *c, int width, int height);
void sprite_destroy(struct content *c);
bool sprite_redraw(struct content *c, int x, int y,