-
Notifications
You must be signed in to change notification settings - Fork 42
Description
Describe the bug
Name the application that includes windows.h as WinApp.
In WinApp, boolean is defined as unsigned char, so its size is 1 byte. However, in jpegli, due to the following code in third_party/libjpeg-turbo/jmorecfg.h, it becomes 4 bytes:
#ifndef HAVE_BOOLEAN
typedef int boolean;
#endifAs a result, the size check for the jpeg_decompress_struct structure in the actual implementation of jpegli_create_decompress, which is jpegli_CreateDecompress, always causes an error.
To Reproduce
Steps to reproduce the behavior: Call jpegli_create_decompress from WinApp
Expected behavior
Define boolean as unsigned char in jpegli to prevent jpegli_CreateDecompress from raising an error.
Screenshots
N/A
Environment
- OS: Windows 11 24H2
- Compiler version: cl.exe Version 19.43.34810 for x64(Visual Studio 2022)
- CPU type: x86_64
- cjxl/djxl version string: djxl [JPEG XL decoder v0.12.0 3a5e278 [AVX2,SSE4,SSSE3,SSE2]]
Additional context
The following code is present in jconfig.h.in of libjpeg-turbo version 2.1.91, and it resolves the issue.
#ifdef _WIN32
#undef RIGHT_SHIFT_IS_UNSIGNED
/* Define "boolean" as unsigned char, not int, per Windows custom */
#ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */
typedef unsigned char boolean;
#endif
#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */
/* Define "INT32" as int, not long, per Windows custom */
#if !(defined(_BASETSD_H_) || defined(_BASETSD_H)) /* don't conflict if basetsd.h already read */
typedef short INT16;
typedef signed int INT32;
#endif
#define XMD_H /* prevent jmorecfg.h from redefining it */
#else
/* Define if your (broken) compiler shifts signed values as if they were
unsigned. */
#cmakedefine RIGHT_SHIFT_IS_UNSIGNED 1
#endif