summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--riscos/save.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/riscos/save.c b/riscos/save.c
index 956bb8c6a..0c4f8ea0b 100644
--- a/riscos/save.c
+++ b/riscos/save.c
@@ -704,9 +704,13 @@ bool ro_gui_save_content(struct content *c, char *path)
bool ro_gui_save_complete(struct content *c, char *path)
{
+ osspriteop_header *sprite;
+ char name[12];
char buf[256];
FILE *fp;
os_error *error;
+ size_t len;
+ char *dot;
/* Create dir */
error = xosfile_create_dir(path, 0);
@@ -735,6 +739,20 @@ bool ro_gui_save_complete(struct content *c, char *path)
return false;
}
+ /* Make sure the sprite name matches the directory name, because
+ the user may have renamed the directory since we created the
+ thumbnail sprite */
+
+ dot = strrchr(path, '.');
+ if (dot) dot++; else dot = path;
+ len = strlen(dot);
+ if (len >= 12) len = 12;
+
+ sprite = (osspriteop_header*)((byte*)saveas_area + saveas_area->first);
+ memcpy(name, sprite->name, 12); /* remember original name */
+ memcpy(sprite->name, dot, len);
+ memset(sprite->name + len, 0, 12 - len);
+
/* Create !Sprites */
snprintf(buf, sizeof buf, "%s.!Sprites", path);
@@ -746,6 +764,9 @@ bool ro_gui_save_complete(struct content *c, char *path)
return false;
}
+ /* restore sprite name in case the save fails and we need to try again */
+ memcpy(sprite->name, name, 12);
+
return save_complete(c, path);
}