Check for 8bpp

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2541 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2003-05-09 19:50:16 +00:00
parent e857a8927b
commit 65806e3b4b
2 changed files with 42 additions and 14 deletions

View file

@ -917,8 +917,22 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char
SCRIPT_MSG("CheckBitmap: \"%s\"\n",line.gettoken_str(1));
try {
init_res_editor();
if (update_bitmap(res_editor, IDB_BITMAP1, line.gettoken_str(1), 96, 16)) {
ERROR_MSG("Error: File doesn't exist, is an invalid bitmap, or has the wrong size\n");
int err = update_bitmap(res_editor, IDB_BITMAP1, line.gettoken_str(1), 96, 16, 8);
if (err) {
switch (err) {
case -1:
ERROR_MSG("Error: can't find bitmap\n");
break;
case -2:
ERROR_MSG("Error: invalid bitmap file - corrupted or not a bitmap\n");
break;
case -3:
ERROR_MSG("Error: bitmap isn't 96x16 in size\n");
break;
case -4:
ERROR_MSG("Error: bitmap has more than 8bpp\n");
break;
}
return PS_ERROR;
}
}

View file

@ -23,14 +23,17 @@ void dopause(void)
}
// Returns 0 if everything is OK
// Returns -1 the bitmap file is invalid or has the wrong size
int update_bitmap(CResourceEditor* re, WORD id, char* filename, int width/*=0*/, int height/*=0*/) {
// Returns -1 if can't find the file
// Returns -2 if the file is an invalid bitmap
// Returns -3 if the size doesn't match
// Returns -4 if the bpp doesn't match
int update_bitmap(CResourceEditor* re, WORD id, char* filename, int width/*=0*/, int height/*=0*/, int maxbpp/*=0*/) {
FILE *f = fopen(filename, "rb");
if (!f) return -1;
if (fgetc(f) != 'B' || fgetc(f) != 'M') {
fclose(f);
return -1;
return -2;
}
if (width != 0) {
@ -39,7 +42,7 @@ int update_bitmap(CResourceEditor* re, WORD id, char* filename, int width/*=0*/,
fread(&biWidth, sizeof(LONG), 1, f);
if (width != biWidth) {
fclose(f);
return -1;
return -3;
}
}
@ -47,9 +50,20 @@ int update_bitmap(CResourceEditor* re, WORD id, char* filename, int width/*=0*/,
LONG biHeight;
fseek(f, 22, SEEK_SET); // Seek to the height member of the header
fread(&biHeight, sizeof(LONG), 1, f);
// Bitmap height can be negative too...
if (height != abs(biHeight)) {
fclose(f);
return -1; // Bitmap height can be negative too...
return -3;
}
}
if (maxbpp != 0) {
WORD biBitCount;
fseek(f, 28, SEEK_SET); // Seek to the height member of the header
fread(&biBitCount, sizeof(WORD), 1, f);
if (biBitCount > maxbpp) {
fclose(f);
return -4;
}
}
@ -64,7 +78,7 @@ int update_bitmap(CResourceEditor* re, WORD id, char* filename, int width/*=0*/,
fseek(f, 14, SEEK_SET);
if (fread(bitmap, 1, dwSize, f) != dwSize) {
fclose(f);
return -1;
return -2;
}
fclose(f);
@ -316,16 +330,16 @@ BYTE* get_dlg(HINSTANCE hUIFile, WORD dlgId, char* filename) {
#endif //NSIS_CONFIG_VISIBLE_SUPPORT
void *operator new(size_t size) {
void *p = malloc(size);
if (!p)
throw bad_alloc();
return p;
void *p = malloc(size);
if (!p)
throw bad_alloc();
return p;
}
void operator delete(void *p) {
if (p) free(p);
if (p) free(p);
}
void operator delete [](void *p) {
if (p) free(p);
if (p) free(p);
}