summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2006-06-13 17:13:46 +0000
committerpeter1138 <peter1138@openttd.org>2006-06-13 17:13:46 +0000
commit642a3b4b22935dc9939456d6ddd4f47005a2cff7 (patch)
tree38c5f6a61b8aa174643c7743d815d4438dfd15e4
parent30c81ca9acf2b12d7cb1d3c738642e095b0a2406 (diff)
downloadopenttd-642a3b4b22935dc9939456d6ddd4f47005a2cff7.tar.xz
(svn r5249) - Add code to copy the palette to a temporary byte aligned array when making a PCX screenshot, if the palette array is not byte aligned.
-rw-r--r--screenshot.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/screenshot.c b/screenshot.c
index b384a591e..34acd1e62 100644
--- a/screenshot.c
+++ b/screenshot.c
@@ -285,6 +285,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
uint maxlines;
uint y;
PcxHeader pcx;
+ bool success;
if (pixelformat != 8 || w == 0)
return false;
@@ -388,14 +389,24 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
return false;
}
- {assert_compile(sizeof(*palette) == 3);}
- if (fwrite(palette, 256 * sizeof(*palette), 1, f) != 1) {
- fclose(f);
- return false;
+ if (sizeof(*palette) == 3) {
+ success = fwrite(palette, 256 * sizeof(*palette), 1, f) == 1;
+ } else {
+ /* If the palette is word-aligned, copy it to a temporary byte array */
+ byte *tmp = malloc(256 * 3);
+ uint i;
+ for (i = 0; i < 256; i++) {
+ tmp[i * 3 + 0] = palette[i].r;
+ tmp[i * 3 + 1] = palette[i].g;
+ tmp[i * 3 + 2] = palette[i].b;
+ }
+ success = fwrite(tmp, 256 * 3, 1, f) == 1;
+ free(tmp);
}
+
fclose(f);
- return true;
+ return success;
}
//************************************************