/*
* 2ooM: The Master of Orion II Reverse Engineering Project
* Library for working with LBX image files.
- * Copyright © 2006-2011 Nick Bowler
+ * Copyright © 2006-2011, 2013 Nick Bowler
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include <stdlib.h>
#include <string.h>
#include <assert.h>
+#include <inttypes.h>
#include <errno.h>
#include "pack.h"
FILE *f;
f = fopen(file, "rb");
- if (!f)
+ if (!f) {
+ lbx_error_raise(-errno);
return NULL;
+ }
if (fseek(f, 0, SEEK_CUR) == 0)
return lbx_img_open(f, &lbx_default_fops, file_close);
p = malloc(sizeof *p);
if (!p) {
+ lbx_error_raise(LBX_ENOMEM);
fclose(f);
return NULL;
}
unsigned char **new, *tmp;
size_t i;
+ if (height > SIZE_MAX / sizeof *new) {
+ lbx_error_raise(LBX_ENOMEM);
+ return NULL;
+ }
+
+ /* Ensure that there is at least one row in the framebuffer. */
+ if (height == 0 || width == 0)
+ width = height = 1;
+
tmp = calloc(height, width);
if (!tmp) {
lbx_error_raise(LBX_ENOMEM);
}
palette[i] = (struct lbx_colour) {
- .red = entry[1] << 2,
- .green = entry[2] << 2,
- .blue = entry[3] << 2,
+ .red = entry[1] & 0x3f,
+ .green = entry[2] & 0x3f,
+ .blue = entry[3] & 0x3f,
.active = 1,
};
}
}
palette[img->palstart + i] = (struct lbx_colour){
- .red = entry[1] << 2,
- .green = entry[2] << 2,
- .blue = entry[3] << 2,
+ .red = entry[1],
+ .green = entry[2],
+ .blue = entry[3],
.active = 1,
};
}