* Sync with Wine 1.7.1.
CORE-7469

svn path=/trunk/; revision=60294
This commit is contained in:
Amine Khaldi 2013-09-21 20:43:42 +00:00
parent 20a1d1968d
commit 9c4a2e68c0
9 changed files with 233 additions and 318 deletions

View file

@ -11,12 +11,11 @@ list(APPEND SOURCE
profile.c
stub.c
transform.c
version.rc
${CMAKE_CURRENT_BINARY_DIR}/mscms_stubs.c
${CMAKE_CURRENT_BINARY_DIR}/mscms.def)
add_library(mscms SHARED ${SOURCE})
add_library(mscms SHARED ${SOURCE} version.rc)
set_module_type(mscms win32dll)
target_link_libraries(mscms wine)
add_importlibs(mscms msvcrt advapi32 kernel32 ntdll)
add_importlibs(mscms advapi32 msvcrt kernel32 ntdll)
add_cd_file(TARGET mscms DESTINATION reactos/system32 FOR all)

View file

@ -31,17 +31,17 @@
//#include "mscms_priv.h"
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
static CRITICAL_SECTION MSCMS_handle_cs;
static CRITICAL_SECTION_DEBUG MSCMS_handle_cs_debug =
static CRITICAL_SECTION mscms_handle_cs;
static CRITICAL_SECTION_DEBUG mscms_handle_cs_debug =
{
0, 0, &MSCMS_handle_cs,
{ &MSCMS_handle_cs_debug.ProcessLocksList,
&MSCMS_handle_cs_debug.ProcessLocksList },
0, 0, { (DWORD_PTR)(__FILE__ ": MSCMS_handle_cs") }
0, 0, &mscms_handle_cs,
{ &mscms_handle_cs_debug.ProcessLocksList,
&mscms_handle_cs_debug.ProcessLocksList },
0, 0, { (DWORD_PTR)(__FILE__ ": mscms_handle_cs") }
};
static CRITICAL_SECTION MSCMS_handle_cs = { &MSCMS_handle_cs_debug, -1, 0, 0, 0, 0 };
static CRITICAL_SECTION mscms_handle_cs = { &mscms_handle_cs_debug, -1, 0, 0, 0, 0 };
static struct profile *profiletable;
static struct transform *transformtable;
@ -61,19 +61,19 @@ void free_handle_tables( void )
transformtable = NULL;
num_transform_handles = 0;
DeleteCriticalSection( &MSCMS_handle_cs );
DeleteCriticalSection( &mscms_handle_cs );
}
struct profile *grab_profile( HPROFILE handle )
{
DWORD_PTR index;
EnterCriticalSection( &MSCMS_handle_cs );
EnterCriticalSection( &mscms_handle_cs );
index = (DWORD_PTR)handle - 1;
if (index > num_profile_handles)
{
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
return NULL;
}
return &profiletable[index];
@ -81,19 +81,19 @@ struct profile *grab_profile( HPROFILE handle )
void release_profile( struct profile *profile )
{
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
}
struct transform *grab_transform( HTRANSFORM handle )
{
DWORD_PTR index;
EnterCriticalSection( &MSCMS_handle_cs );
EnterCriticalSection( &mscms_handle_cs );
index = (DWORD_PTR)handle - 1;
if (index > num_transform_handles)
{
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
return NULL;
}
return &transformtable[index];
@ -101,7 +101,7 @@ struct transform *grab_transform( HTRANSFORM handle )
void release_transform( struct transform *transform )
{
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
}
static HPROFILE alloc_profile_handle( void )
@ -112,7 +112,7 @@ static HPROFILE alloc_profile_handle( void )
for (index = 0; index < num_profile_handles; index++)
{
if (!profiletable[index].iccprofile) return (HPROFILE)(index + 1);
if (!profiletable[index].data) return (HPROFILE)(index + 1);
}
if (!profiletable)
{
@ -135,14 +135,14 @@ HPROFILE create_profile( struct profile *profile )
{
HPROFILE handle;
EnterCriticalSection( &MSCMS_handle_cs );
EnterCriticalSection( &mscms_handle_cs );
if ((handle = alloc_profile_handle()))
{
DWORD_PTR index = (DWORD_PTR)handle - 1;
memcpy( &profiletable[index], profile, sizeof(struct profile) );
profiletable[index] = *profile;
}
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
return handle;
}
@ -151,12 +151,12 @@ BOOL close_profile( HPROFILE handle )
DWORD_PTR index;
struct profile *profile;
EnterCriticalSection( &MSCMS_handle_cs );
EnterCriticalSection( &mscms_handle_cs );
index = (DWORD_PTR)handle - 1;
if (index > num_profile_handles)
{
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
return FALSE;
}
profile = &profiletable[index];
@ -165,11 +165,11 @@ BOOL close_profile( HPROFILE handle )
{
if (profile->access & PROFILE_READWRITE)
{
DWORD written, size = MSCMS_get_profile_size( profile->iccprofile );
DWORD written;
if (SetFilePointer( profile->file, 0, NULL, FILE_BEGIN ) ||
!WriteFile( profile->file, profile->iccprofile, size, &written, NULL ) ||
written != size)
!WriteFile( profile->file, profile->data, profile->size, &written, NULL ) ||
written != profile->size)
{
ERR( "Unable to write color profile\n" );
}
@ -177,11 +177,11 @@ BOOL close_profile( HPROFILE handle )
CloseHandle( profile->file );
}
cmsCloseProfile( profile->cmsprofile );
HeapFree( GetProcessHeap(), 0, profile->iccprofile );
HeapFree( GetProcessHeap(), 0, profile->data );
memset( profile, 0, sizeof(struct profile) );
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
return TRUE;
}
@ -216,14 +216,14 @@ HTRANSFORM create_transform( struct transform *transform )
{
HTRANSFORM handle;
EnterCriticalSection( &MSCMS_handle_cs );
EnterCriticalSection( &mscms_handle_cs );
if ((handle = alloc_transform_handle()))
{
DWORD_PTR index = (DWORD_PTR)handle - 1;
memcpy( &transformtable[index], transform, sizeof(struct transform) );
transformtable[index] = *transform;
}
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
return handle;
}
@ -232,12 +232,12 @@ BOOL close_transform( HTRANSFORM handle )
DWORD_PTR index;
struct transform *transform;
EnterCriticalSection( &MSCMS_handle_cs );
EnterCriticalSection( &mscms_handle_cs );
index = (DWORD_PTR)handle - 1;
if (index > num_transform_handles)
{
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
return FALSE;
}
transform = &transformtable[index];
@ -245,8 +245,8 @@ BOOL close_transform( HTRANSFORM handle )
cmsDeleteTransform( transform->cmstransform );
memset( transform, 0, sizeof(struct transform) );
LeaveCriticalSection( &MSCMS_handle_cs );
LeaveCriticalSection( &mscms_handle_cs );
return TRUE;
}
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */

View file

@ -31,75 +31,90 @@
//#include "mscms_priv.h"
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
static inline void MSCMS_adjust_endianness32( ULONG *ptr )
static inline void adjust_endianness32( ULONG *ptr )
{
#ifndef WORDS_BIGENDIAN
*ptr = RtlUlongByteSwap(*ptr);
#endif
}
void MSCMS_get_profile_header( const icProfile *iccprofile, PROFILEHEADER *header )
void get_profile_header( const struct profile *profile, PROFILEHEADER *header )
{
unsigned int i;
memcpy( header, iccprofile, sizeof(PROFILEHEADER) );
memcpy( header, profile->data, sizeof(PROFILEHEADER) );
/* ICC format is big-endian, swap bytes if necessary */
for (i = 0; i < sizeof(PROFILEHEADER) / sizeof(ULONG); i++)
MSCMS_adjust_endianness32( (ULONG *)header + i );
adjust_endianness32( (ULONG *)header + i );
}
void MSCMS_set_profile_header( icProfile *iccprofile, const PROFILEHEADER *header )
void set_profile_header( const struct profile *profile, const PROFILEHEADER *header )
{
unsigned int i;
icHeader *iccheader = (icHeader *)iccprofile;
memcpy( iccheader, header, sizeof(icHeader) );
memcpy( profile->data, header, sizeof(PROFILEHEADER) );
/* ICC format is big-endian, swap bytes if necessary */
for (i = 0; i < sizeof(icHeader) / sizeof(ULONG); i++)
MSCMS_adjust_endianness32( (ULONG *)iccheader + i );
for (i = 0; i < sizeof(PROFILEHEADER) / sizeof(ULONG); i++)
adjust_endianness32( (ULONG *)profile->data + i );
}
DWORD MSCMS_get_tag_count( const icProfile *iccprofile )
static BOOL get_adjusted_tag( const struct profile *profile, TAGTYPE type, cmsTagEntry *tag )
{
ULONG count = iccprofile->count;
DWORD i, num_tags = *(DWORD *)(profile->data + sizeof(cmsICCHeader));
cmsTagEntry *entry;
ULONG sig;
MSCMS_adjust_endianness32( &count );
return count;
adjust_endianness32( &num_tags );
for (i = 0; i < num_tags; i++)
{
entry = (cmsTagEntry *)(profile->data + sizeof(cmsICCHeader) + sizeof(DWORD) + i * sizeof(*tag));
sig = entry->sig;
adjust_endianness32( &sig );
if (sig == type)
{
tag->sig = sig;
tag->offset = entry->offset;
tag->size = entry->size;
adjust_endianness32( &tag->offset );
adjust_endianness32( &tag->size );
return TRUE;
}
}
return FALSE;
}
void MSCMS_get_tag_by_index( icProfile *iccprofile, DWORD index, icTag *tag )
BOOL get_tag_data( const struct profile *profile, TAGTYPE type, DWORD offset, void *buffer, DWORD *len )
{
icTag *tmp = (icTag *)((char *)iccprofile->data + index * sizeof(icTag));
cmsTagEntry tag;
tag->sig = tmp->sig;
tag->offset = tmp->offset;
tag->size = tmp->size;
if (!get_adjusted_tag( profile, type, &tag )) return FALSE;
MSCMS_adjust_endianness32( &tag->sig );
MSCMS_adjust_endianness32( &tag->offset );
MSCMS_adjust_endianness32( &tag->size );
if (!buffer) offset = 0;
if (offset > tag.size) return FALSE;
if (*len < tag.size - offset || !buffer)
{
*len = tag.size - offset;
return FALSE;
}
memcpy( buffer, profile->data + tag.offset + offset, tag.size - offset );
*len = tag.size - offset;
return TRUE;
}
void MSCMS_get_tag_data( const icProfile *iccprofile, const icTag *tag, DWORD offset, void *buffer )
BOOL set_tag_data( const struct profile *profile, TAGTYPE type, DWORD offset, const void *buffer, DWORD *len )
{
memcpy( buffer, (const char *)iccprofile + tag->offset + offset, tag->size - offset );
cmsTagEntry tag;
if (!get_adjusted_tag( profile, type, &tag )) return FALSE;
if (offset > tag.size) return FALSE;
*len = min( tag.size - offset, *len );
memcpy( profile->data + tag.offset + offset, buffer, *len );
return TRUE;
}
void MSCMS_set_tag_data( icProfile *iccprofile, const icTag *tag, DWORD offset, const void *buffer )
{
memcpy( (char *)iccprofile + tag->offset + offset, buffer, tag->size - offset );
}
DWORD MSCMS_get_profile_size( const icProfile *iccprofile )
{
DWORD size = ((const icHeader *)iccprofile)->size;
MSCMS_adjust_endianness32( &size );
return size;
}
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */

View file

@ -36,20 +36,10 @@
WINE_DEFAULT_DEBUG_CHANNEL(mscms);
#ifdef HAVE_LCMS
static int lcms_error_handler( int error, const char *text )
#ifdef HAVE_LCMS2
static void lcms_error_handler(cmsContext ctx, cmsUInt32Number error, const char *text)
{
switch (error)
{
case LCMS_ERRC_WARNING:
case LCMS_ERRC_RECOVERABLE:
case LCMS_ERRC_ABORTED:
WARN("%d %s\n", error, debugstr_a(text));
return 1;
default:
ERR("unknown error %d %s\n", error, debugstr_a(text));
return 0;
}
TRACE("%u %s\n", error, debugstr_a(text));
}
#endif
@ -61,12 +51,13 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls( hinst );
#ifdef HAVE_LCMS
cmsSetErrorHandler( lcms_error_handler );
#ifdef HAVE_LCMS2
cmsSetLogErrorHandler( lcms_error_handler );
#endif
break;
case DLL_PROCESS_DETACH:
#ifdef HAVE_LCMS
if (reserved) break;
#ifdef HAVE_LCMS2
free_handle_tables();
#endif
break;

View file

@ -18,54 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifdef HAVE_LCMS
/* These basic Windows types are defined in lcms.h when compiling on
* a non-Windows platform (why?), so they would normally not conflict
* with anything included earlier. But since we are building Wine they
* most certainly will have been defined before we include lcms.h.
* The preprocessor comes to the rescue.
*/
#define BYTE LCMS_BYTE
#define LPBYTE LCMS_LPBYTE
#define WORD LCMS_WORD
#define LPWORD LCMS_LPWORD
#define DWORD LCMS_DWORD
#define LPDWORD LCMS_LPDWORD
#define BOOL LCMS_BOOL
#define LPSTR LCMS_LPSTR
#define LPVOID LCMS_LPVOID
#undef cdecl
#undef FAR
#undef ZeroMemory
#undef CopyMemory
#undef LOWORD
#undef HIWORD
#undef MAX_PATH
#ifdef HAVE_LCMS_LCMS_H
#include <lcms/lcms.h>
#else
#include <lcms.h>
#endif
/* Funny thing is lcms.h defines DWORD as an 'unsigned long' whereas Wine
* defines it as an 'unsigned int'. To avoid compiler warnings we use a
* preprocessor define for DWORD and LPDWORD to get back Wine's original
* (typedef) definitions.
*/
#undef BOOL
#undef DWORD
#undef LPDWORD
#define BOOL BOOL
#define DWORD DWORD
#define LPDWORD LPDWORD
#ifdef HAVE_LCMS2
#include <lcms2.h>
/* A simple structure to tie together a pointer to an icc profile, an lcms
* color profile handle and a Windows file handle. If the profile is memory
@ -76,9 +30,10 @@
struct profile
{
HANDLE file;
DWORD access;
icProfile *iccprofile;
HANDLE file;
DWORD access;
char *data;
DWORD size;
cmsHPROFILE cmsprofile;
};
@ -101,14 +56,11 @@ void release_transform( struct transform * ) DECLSPEC_HIDDEN;
extern void free_handle_tables( void ) DECLSPEC_HIDDEN;
extern DWORD MSCMS_get_tag_count( const icProfile *iccprofile ) DECLSPEC_HIDDEN;
extern void MSCMS_get_tag_by_index( icProfile *iccprofile, DWORD index, icTag *tag ) DECLSPEC_HIDDEN;
extern void MSCMS_get_tag_data( const icProfile *iccprofile, const icTag *tag, DWORD offset, void *buffer ) DECLSPEC_HIDDEN;
extern void MSCMS_set_tag_data( icProfile *iccprofile, const icTag *tag, DWORD offset, const void *buffer ) DECLSPEC_HIDDEN;
extern void MSCMS_get_profile_header( const icProfile *iccprofile, PROFILEHEADER *header ) DECLSPEC_HIDDEN;
extern void MSCMS_set_profile_header( icProfile *iccprofile, const PROFILEHEADER *header ) DECLSPEC_HIDDEN;
extern DWORD MSCMS_get_profile_size( const icProfile *iccprofile ) DECLSPEC_HIDDEN;
extern BOOL get_tag_data( const struct profile *, TAGTYPE, DWORD, void *, DWORD * ) DECLSPEC_HIDDEN;
extern BOOL set_tag_data( const struct profile *, TAGTYPE, DWORD, const void *, DWORD * ) DECLSPEC_HIDDEN;
extern void get_profile_header( const struct profile *, PROFILEHEADER * ) DECLSPEC_HIDDEN;
extern void set_profile_header( const struct profile *, const PROFILEHEADER * ) DECLSPEC_HIDDEN;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
extern const char *MSCMS_dbgstr_tag(DWORD) DECLSPEC_HIDDEN;
extern const char *dbgstr_tag(DWORD) DECLSPEC_HIDDEN;

View file

@ -37,17 +37,15 @@
//#include "mscms_priv.h"
#define IS_SEPARATOR(ch) ((ch) == '\\' || (ch) == '/')
static void MSCMS_basename( LPCWSTR path, LPWSTR name )
static void basename( LPCWSTR path, LPWSTR name )
{
INT i = lstrlenW( path );
while (i > 0 && !IS_SEPARATOR(path[i - 1])) i--;
while (i > 0 && path[i - 1] != '\\' && path[i - 1] != '/') i--;
lstrcpyW( name, &path[i] );
}
static inline LPWSTR MSCMS_strdupW( LPCSTR str )
static inline LPWSTR strdupW( LPCSTR str )
{
LPWSTR ret = NULL;
if (str)
@ -59,7 +57,7 @@ static inline LPWSTR MSCMS_strdupW( LPCSTR str )
return ret;
}
const char *MSCMS_dbgstr_tag( DWORD tag )
const char *dbgstr_tag( DWORD tag )
{
return wine_dbg_sprintf( "'%c%c%c%c'",
(char)(tag >> 24), (char)(tag >> 16), (char)(tag >> 8), (char)(tag) );
@ -138,7 +136,7 @@ static BOOL set_profile_device_key( PCWSTR file, const BYTE *value, DWORD size )
}
RegCreateKeyExW( HKEY_LOCAL_MACHINE, icmW, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &icm_key, NULL );
MSCMS_basename( file, basenameW );
basename( file, basenameW );
sprintfW( classW, fmtW, (header.phClass >> 24) & 0xff, (header.phClass >> 16) & 0xff,
(header.phClass >> 8) & 0xff, header.phClass & 0xff );
@ -339,10 +337,8 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
PVOID buffer, PBOOL ref )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct profile *profile = grab_profile( handle );
DWORD i, count;
icTag tag;
TRACE( "( %p, 0x%08x, %d, %p, %p, %p )\n", handle, type, offset, size, buffer, ref );
@ -353,30 +349,17 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
release_profile( profile );
return FALSE;
}
count = MSCMS_get_tag_count( profile->iccprofile );
for (i = 0; i < count; i++)
if (!get_tag_data( profile, type, offset, buffer, size ))
{
MSCMS_get_tag_by_index( profile->iccprofile, i, &tag );
if (tag.sig == type)
{
if ((tag.size - offset) > *size || !buffer)
{
*size = (tag.size - offset);
release_profile( profile );
return FALSE;
}
MSCMS_get_tag_data( profile->iccprofile, &tag, offset, buffer );
*ref = FALSE; /* FIXME: calculate properly */
release_profile( profile );
return TRUE;
}
release_profile( profile );
return FALSE;
}
ret = get_tag_data( profile, type, offset, buffer, size );
*ref = cmsTagLinkedTo( profile->cmsprofile, type ) != 0;
release_profile( profile );
return ret;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -401,10 +384,10 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
BOOL WINAPI GetColorProfileElementTag( HPROFILE handle, DWORD index, PTAGTYPE type )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct profile *profile = grab_profile( handle );
DWORD count;
icTag tag;
cmsInt32Number num_tags;
cmsTagSignature sig;
TRACE( "( %p, %d, %p )\n", handle, index, type );
@ -415,19 +398,20 @@ BOOL WINAPI GetColorProfileElementTag( HPROFILE handle, DWORD index, PTAGTYPE ty
release_profile( profile );
return FALSE;
}
count = MSCMS_get_tag_count( profile->iccprofile );
if (index > count || index < 1)
num_tags = cmsGetTagCount( profile->cmsprofile );
if (num_tags < 0 || index > num_tags || index < 1)
{
release_profile( profile );
return FALSE;
}
MSCMS_get_tag_by_index( profile->iccprofile, index - 1, &tag );
*type = tag.sig;
if ((sig = cmsGetTagSignature( profile->cmsprofile, index - 1 )))
{
*type = sig;
ret = TRUE;
}
release_profile( profile );
ret = TRUE;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -452,7 +436,7 @@ BOOL WINAPI GetColorProfileElementTag( HPROFILE handle, DWORD index, PTAGTYPE ty
BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD size )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct profile *profile = grab_profile( handle );
PROFILEHEADER header;
@ -465,7 +449,7 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD siz
release_profile( profile );
return FALSE;
}
MSCMS_get_profile_header( profile->iccprofile, &header );
get_profile_header( profile, &header );
if (!buffer || header.phSize > *size)
{
@ -475,13 +459,13 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD siz
}
/* No endian conversion needed */
memcpy( buffer, profile->iccprofile, header.phSize );
*size = header.phSize;
memcpy( buffer, profile->data, profile->size );
*size = profile->size;
release_profile( profile );
ret = TRUE;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -503,7 +487,7 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD siz
*/
BOOL WINAPI GetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
{
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct profile *profile = grab_profile( handle );
TRACE( "( %p, %p )\n", handle, header );
@ -515,14 +499,13 @@ BOOL WINAPI GetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
release_profile( profile );
return FALSE;
}
MSCMS_get_profile_header( profile->iccprofile, header );
get_profile_header( profile, header );
release_profile( profile );
return TRUE;
#else
return FALSE;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
}
/******************************************************************************
@ -542,8 +525,9 @@ BOOL WINAPI GetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
BOOL WINAPI GetCountColorProfileElements( HPROFILE handle, PDWORD count )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct profile *profile = grab_profile( handle );
cmsInt32Number num_tags;
TRACE( "( %p, %p )\n", handle, count );
@ -554,12 +538,14 @@ BOOL WINAPI GetCountColorProfileElements( HPROFILE handle, PDWORD count )
release_profile( profile );
return FALSE;
}
*count = MSCMS_get_tag_count( profile->iccprofile );
if ((num_tags = cmsGetTagCount( profile->cmsprofile )) >= 0)
{
*count = num_tags;
ret = TRUE;
}
release_profile( profile );
ret = TRUE;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -684,7 +670,7 @@ BOOL WINAPI GetStandardColorSpaceProfileW( PCWSTR machine, DWORD id, PWSTR profi
return TRUE;
}
static BOOL MSCMS_header_from_file( LPCWSTR file, PPROFILEHEADER header )
static BOOL header_from_file( LPCWSTR file, PPROFILEHEADER header )
{
BOOL ret;
PROFILE profile;
@ -726,7 +712,7 @@ static BOOL MSCMS_header_from_file( LPCWSTR file, PPROFILEHEADER header )
return ret;
}
static BOOL MSCMS_match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
static BOOL match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
{
if (rec->dwFields & ET_DEVICENAME)
{
@ -747,36 +733,36 @@ static BOOL MSCMS_match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
}
if (rec->dwFields & ET_DEVICECLASS)
{
FIXME( "ET_DEVICECLASS: %s\n", MSCMS_dbgstr_tag(rec->dwMediaType) );
FIXME( "ET_DEVICECLASS: %s\n", dbgstr_tag(rec->dwMediaType) );
}
if (rec->dwFields & ET_CMMTYPE)
{
TRACE( "ET_CMMTYPE: %s\n", MSCMS_dbgstr_tag(rec->dwCMMType) );
TRACE( "ET_CMMTYPE: %s\n", dbgstr_tag(rec->dwCMMType) );
if (rec->dwCMMType != hdr->phCMMType) return FALSE;
}
if (rec->dwFields & ET_CLASS)
{
TRACE( "ET_CLASS: %s\n", MSCMS_dbgstr_tag(rec->dwClass) );
TRACE( "ET_CLASS: %s\n", dbgstr_tag(rec->dwClass) );
if (rec->dwClass != hdr->phClass) return FALSE;
}
if (rec->dwFields & ET_DATACOLORSPACE)
{
TRACE( "ET_DATACOLORSPACE: %s\n", MSCMS_dbgstr_tag(rec->dwDataColorSpace) );
TRACE( "ET_DATACOLORSPACE: %s\n", dbgstr_tag(rec->dwDataColorSpace) );
if (rec->dwDataColorSpace != hdr->phDataColorSpace) return FALSE;
}
if (rec->dwFields & ET_CONNECTIONSPACE)
{
TRACE( "ET_CONNECTIONSPACE: %s\n", MSCMS_dbgstr_tag(rec->dwConnectionSpace) );
TRACE( "ET_CONNECTIONSPACE: %s\n", dbgstr_tag(rec->dwConnectionSpace) );
if (rec->dwConnectionSpace != hdr->phConnectionSpace) return FALSE;
}
if (rec->dwFields & ET_SIGNATURE)
{
TRACE( "ET_SIGNATURE: %s\n", MSCMS_dbgstr_tag(rec->dwSignature) );
TRACE( "ET_SIGNATURE: %s\n", dbgstr_tag(rec->dwSignature) );
if (rec->dwSignature != hdr->phSignature) return FALSE;
}
if (rec->dwFields & ET_PLATFORM)
{
TRACE( "ET_PLATFORM: %s\n", MSCMS_dbgstr_tag(rec->dwPlatform) );
TRACE( "ET_PLATFORM: %s\n", dbgstr_tag(rec->dwPlatform) );
if (rec->dwPlatform != hdr->phPlatform) return FALSE;
}
if (rec->dwFields & ET_PROFILEFLAGS)
@ -786,12 +772,12 @@ static BOOL MSCMS_match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
}
if (rec->dwFields & ET_MANUFACTURER)
{
TRACE( "ET_MANUFACTURER: %s\n", MSCMS_dbgstr_tag(rec->dwManufacturer) );
TRACE( "ET_MANUFACTURER: %s\n", dbgstr_tag(rec->dwManufacturer) );
if (rec->dwManufacturer != hdr->phManufacturer) return FALSE;
}
if (rec->dwFields & ET_MODEL)
{
TRACE( "ET_MODEL: %s\n", MSCMS_dbgstr_tag(rec->dwModel) );
TRACE( "ET_MODEL: %s\n", dbgstr_tag(rec->dwModel) );
if (rec->dwModel != hdr->phModel) return FALSE;
}
if (rec->dwFields & ET_ATTRIBUTES)
@ -808,7 +794,7 @@ static BOOL MSCMS_match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
}
if (rec->dwFields & ET_CREATOR)
{
TRACE( "ET_CREATOR: %s\n", MSCMS_dbgstr_tag(rec->dwCreator) );
TRACE( "ET_CREATOR: %s\n", dbgstr_tag(rec->dwCreator) );
if (rec->dwCreator != hdr->phCreator) return FALSE;
}
return TRUE;
@ -857,17 +843,17 @@ BOOL WINAPI EnumColorProfilesA( PCSTR machine, PENUMTYPEA record, PBYTE buffer,
memcpy( &recordW, record, sizeof(ENUMTYPEA) );
if (record->pDeviceName)
{
deviceW = MSCMS_strdupW( record->pDeviceName );
deviceW = strdupW( record->pDeviceName );
if (!(recordW.pDeviceName = deviceW)) goto exit;
}
fileW = MSCMS_strdupW( data.cFileName );
fileW = strdupW( data.cFileName );
if (!fileW) goto exit;
ret = MSCMS_header_from_file( fileW, &header );
ret = header_from_file( fileW, &header );
if (ret)
{
match = MSCMS_match_profile( &recordW, &header );
match = match_profile( &recordW, &header );
if (match)
{
len = sizeof(char) * (lstrlenA( data.cFileName ) + 1);
@ -888,17 +874,17 @@ BOOL WINAPI EnumColorProfilesA( PCSTR machine, PENUMTYPEA record, PBYTE buffer,
while (FindNextFileA( find, &data ))
{
fileW = MSCMS_strdupW( data.cFileName );
fileW = strdupW( data.cFileName );
if (!fileW) goto exit;
ret = MSCMS_header_from_file( fileW, &header );
ret = header_from_file( fileW, &header );
if (!ret)
{
HeapFree( GetProcessHeap(), 0, fileW );
continue;
}
match = MSCMS_match_profile( &recordW, &header );
match = match_profile( &recordW, &header );
if (match)
{
char **tmp = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
@ -1001,10 +987,10 @@ BOOL WINAPI EnumColorProfilesW( PCWSTR machine, PENUMTYPEW record, PBYTE buffer,
profiles = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WCHAR *) + 1 );
if (!profiles) goto exit;
ret = MSCMS_header_from_file( data.cFileName, &header );
ret = header_from_file( data.cFileName, &header );
if (ret)
{
match = MSCMS_match_profile( record, &header );
match = match_profile( record, &header );
if (match)
{
len = sizeof(WCHAR) * (lstrlenW( data.cFileName ) + 1);
@ -1023,10 +1009,10 @@ BOOL WINAPI EnumColorProfilesW( PCWSTR machine, PENUMTYPEW record, PBYTE buffer,
while (FindNextFileW( find, &data ))
{
ret = MSCMS_header_from_file( data.cFileName, &header );
ret = header_from_file( data.cFileName, &header );
if (!ret) continue;
match = MSCMS_match_profile( record, &header );
match = match_profile( record, &header );
if (match)
{
WCHAR **tmp = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
@ -1129,7 +1115,7 @@ BOOL WINAPI InstallColorProfileW( PCWSTR machine, PCWSTR profile )
if (!GetColorDirectoryW( machine, dest, &size )) return FALSE;
MSCMS_basename( profile, base );
basename( profile, base );
lstrcatW( dest, slash );
lstrcatW( dest, base );
@ -1158,10 +1144,8 @@ BOOL WINAPI InstallColorProfileW( PCWSTR machine, PCWSTR profile )
BOOL WINAPI IsColorProfileTagPresent( HPROFILE handle, TAGTYPE type, PBOOL present )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct profile *profile = grab_profile( handle );
DWORD i, count;
icTag tag;
TRACE( "( %p, 0x%08x, %p )\n", handle, type, present );
@ -1172,21 +1156,11 @@ BOOL WINAPI IsColorProfileTagPresent( HPROFILE handle, TAGTYPE type, PBOOL prese
release_profile( profile );
return FALSE;
}
count = MSCMS_get_tag_count( profile->iccprofile );
for (i = 0; i < count; i++)
{
MSCMS_get_tag_by_index( profile->iccprofile, i, &tag );
if (tag.sig == type)
{
*present = ret = TRUE;
break;
}
}
*present = cmsIsTag( profile->cmsprofile, type );
release_profile( profile );
ret = TRUE;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -1207,7 +1181,7 @@ BOOL WINAPI IsColorProfileTagPresent( HPROFILE handle, TAGTYPE type, PBOOL prese
BOOL WINAPI IsColorProfileValid( HPROFILE handle, PBOOL valid )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct profile *profile = grab_profile( handle );
TRACE( "( %p, %p )\n", handle, valid );
@ -1219,10 +1193,10 @@ BOOL WINAPI IsColorProfileValid( HPROFILE handle, PBOOL valid )
release_profile( profile );
return FALSE;
}
if (profile->iccprofile) ret = *valid = TRUE;
if (profile->data) ret = *valid = TRUE;
release_profile( profile );
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -1247,10 +1221,8 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
PVOID buffer )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct profile *profile = grab_profile( handle );
DWORD i, count;
icTag tag;
TRACE( "( %p, 0x%08x, %d, %p, %p )\n", handle, type, offset, size, buffer );
@ -1261,28 +1233,11 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
release_profile( profile );
return FALSE;
}
count = MSCMS_get_tag_count( profile->iccprofile );
for (i = 0; i < count; i++)
{
MSCMS_get_tag_by_index( profile->iccprofile, i, &tag );
if (tag.sig == type)
{
if (offset > tag.size)
{
release_profile( profile );
return FALSE;
}
MSCMS_set_tag_data( profile->iccprofile, &tag, offset, buffer );
release_profile( profile );
return TRUE;
}
}
ret = set_tag_data( profile, type, offset, buffer, size );
release_profile( profile );
return ret;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -1301,7 +1256,7 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
*/
BOOL WINAPI SetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
{
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct profile *profile = grab_profile( handle );
TRACE( "( %p, %p )\n", handle, header );
@ -1313,14 +1268,13 @@ BOOL WINAPI SetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
release_profile( profile );
return FALSE;
}
MSCMS_set_profile_header( profile->iccprofile, header );
set_profile_header( profile, header );
release_profile( profile );
return TRUE;
#else
return FALSE;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
}
/******************************************************************************
@ -1441,10 +1395,11 @@ HPROFILE WINAPI OpenColorProfileA( PPROFILE profile, DWORD access, DWORD sharing
*/
HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing, DWORD creation )
{
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
cmsHPROFILE cmsprofile = NULL;
icProfile *iccprofile = NULL;
char *data = NULL;
HANDLE handle = INVALID_HANDLE_VALUE;
DWORD size;
TRACE( "( %p, 0x%08x, 0x%08x, 0x%08x )\n", profile, access, sharing, creation );
@ -1454,14 +1409,15 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
{
/* FIXME: access flags not implemented for memory based profiles */
if (!(iccprofile = HeapAlloc( GetProcessHeap(), 0, profile->cbDataSize ))) return NULL;
memcpy( iccprofile, profile->pProfileData, profile->cbDataSize );
if (!(data = HeapAlloc( GetProcessHeap(), 0, profile->cbDataSize ))) return NULL;
memcpy( data, profile->pProfileData, profile->cbDataSize );
cmsprofile = cmsOpenProfileFromMem( iccprofile, profile->cbDataSize );
cmsprofile = cmsOpenProfileFromMem( data, profile->cbDataSize );
size = profile->cbDataSize;
}
else if (profile->dwType == PROFILE_FILENAME)
{
DWORD size, read, flags = 0;
DWORD read, flags = 0;
TRACE( "profile file: %s\n", debugstr_w( profile->pProfileData ) );
@ -1494,32 +1450,27 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
WARN( "Unable to open color profile %u\n", GetLastError() );
return NULL;
}
if ((size = GetFileSize( handle, NULL )) == INVALID_FILE_SIZE)
{
ERR( "Unable to retrieve size of color profile\n" );
CloseHandle( handle );
return NULL;
}
iccprofile = HeapAlloc( GetProcessHeap(), 0, size );
if (!iccprofile)
if (!(data = HeapAlloc( GetProcessHeap(), 0, size )))
{
ERR( "Unable to allocate memory for color profile\n" );
CloseHandle( handle );
return NULL;
}
if (!ReadFile( handle, iccprofile, size, &read, NULL ) || read != size)
if (!ReadFile( handle, data, size, &read, NULL ) || read != size)
{
ERR( "Unable to read color profile\n" );
CloseHandle( handle );
HeapFree( GetProcessHeap(), 0, iccprofile );
HeapFree( GetProcessHeap(), 0, data );
return NULL;
}
cmsprofile = cmsOpenProfileFromMem( iccprofile, size );
cmsprofile = cmsOpenProfileFromMem( data, size );
}
else
{
@ -1530,16 +1481,21 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
if (cmsprofile)
{
struct profile profile;
HPROFILE hprof;
profile.file = handle;
profile.access = access;
profile.iccprofile = iccprofile;
profile.file = handle;
profile.access = access;
profile.data = data;
profile.size = size;
profile.cmsprofile = cmsprofile;
return create_profile( &profile );
if ((hprof = create_profile( &profile ))) return hprof;
HeapFree( GetProcessHeap(), 0, data );
cmsCloseProfile( cmsprofile );
}
CloseHandle( handle );
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return NULL;
}
@ -1558,11 +1514,11 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
BOOL WINAPI CloseColorProfile( HPROFILE profile )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
TRACE( "( %p )\n", profile );
ret = close_profile( profile );
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}

View file

@ -139,21 +139,21 @@ BOOL WINAPI GetPS2ColorSpaceArray( HPROFILE profile, DWORD intent, DWORD type, P
BOOL WINAPI RegisterCMMA( PCSTR machine, DWORD id, PCSTR dll )
{
FIXME( "( %p, %s, %p ) stub\n", machine, MSCMS_dbgstr_tag(id), dll );
FIXME( "( %p, %s, %p ) stub\n", machine, dbgstr_tag(id), dll );
return TRUE;
}
BOOL WINAPI RegisterCMMW( PCWSTR machine, DWORD id, PCWSTR dll )
{
FIXME( "( %p, %s, %p ) stub\n", machine, MSCMS_dbgstr_tag(id), dll );
FIXME( "( %p, %s, %p ) stub\n", machine, dbgstr_tag(id), dll );
return TRUE;
}
BOOL WINAPI SelectCMM( DWORD id )
{
FIXME( "(%s) stub\n", MSCMS_dbgstr_tag(id) );
FIXME( "(%s) stub\n", dbgstr_tag(id) );
return TRUE;
}
@ -192,14 +192,14 @@ BOOL WINAPI SpoolerCopyFileEvent( LPWSTR printer, LPWSTR key, DWORD event )
BOOL WINAPI UnregisterCMMA( PCSTR machine, DWORD id )
{
FIXME( "( %p, %s ) stub\n", machine, MSCMS_dbgstr_tag(id) );
FIXME( "( %p, %s ) stub\n", machine, dbgstr_tag(id) );
return TRUE;
}
BOOL WINAPI UnregisterCMMW( PCWSTR machine, DWORD id )
{
FIXME( "( %p, %s ) stub\n", machine, MSCMS_dbgstr_tag(id) );
FIXME( "( %p, %s ) stub\n", machine, dbgstr_tag(id) );
return TRUE;
}

View file

@ -36,14 +36,14 @@
WINE_DEFAULT_DEBUG_CHANNEL(mscms);
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
static DWORD from_profile( HPROFILE profile )
{
PROFILEHEADER header;
GetColorProfileHeader( profile, &header );
TRACE( "color space: 0x%08x %s\n", header.phDataColorSpace, MSCMS_dbgstr_tag( header.phDataColorSpace ) );
TRACE( "color space: 0x%08x %s\n", header.phDataColorSpace, dbgstr_tag( header.phDataColorSpace ) );
switch (header.phDataColorSpace)
{
@ -68,6 +68,8 @@ static DWORD from_bmformat( BMFORMAT format )
case BM_RGBTRIPLETS: return TYPE_RGB_8;
case BM_BGRTRIPLETS: return TYPE_BGR_8;
case BM_GRAY: return TYPE_GRAY_8;
case BM_xRGBQUADS: return TYPE_ARGB_8;
case BM_xBGRQUADS: return TYPE_ABGR_8;
default:
if (quietfixme == 0)
{
@ -96,7 +98,7 @@ static DWORD from_type( COLORTYPE type )
}
}
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
/******************************************************************************
* CreateColorTransformA [MSCMS.@]
@ -141,7 +143,7 @@ HTRANSFORM WINAPI CreateColorTransformW( LPLOGCOLORSPACEW space, HPROFILE dest,
HPROFILE target, DWORD flags )
{
HTRANSFORM ret = NULL;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct transform transform;
struct profile *dst, *tgt = NULL;
cmsHPROFILE cmsinput, cmsoutput, cmstarget = NULL;
@ -160,7 +162,7 @@ HTRANSFORM WINAPI CreateColorTransformW( LPLOGCOLORSPACEW space, HPROFILE dest,
intent = space->lcsIntent > 3 ? INTENT_PERCEPTUAL : space->lcsIntent;
TRACE( "lcsIntent: %x\n", space->lcsIntent );
TRACE( "lcsCSType: %s\n", MSCMS_dbgstr_tag( space->lcsCSType ) );
TRACE( "lcsCSType: %s\n", dbgstr_tag( space->lcsCSType ) );
TRACE( "lcsFilename: %s\n", debugstr_w( space->lcsFilename ) );
in_format = TYPE_RGB_16;
@ -181,7 +183,7 @@ HTRANSFORM WINAPI CreateColorTransformW( LPLOGCOLORSPACEW space, HPROFILE dest,
if (tgt) release_profile( tgt );
release_profile( dst );
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -205,7 +207,7 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
PDWORD intents, DWORD nintents, DWORD flags, DWORD cmm )
{
HTRANSFORM ret = NULL;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
cmsHPROFILE *cmsprofiles, cmsconvert = NULL;
struct transform transform;
struct profile *profile0, *profile1;
@ -237,7 +239,7 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
{
/* insert a conversion profile for pairings that lcms doesn't handle */
if (out_format == TYPE_RGB_16) cmsconvert = cmsCreate_sRGBProfile();
if (out_format == TYPE_Lab_16) cmsconvert = cmsCreateLabProfile( NULL );
if (out_format == TYPE_Lab_16) cmsconvert = cmsCreateLab2Profile( NULL );
}
cmsprofiles = HeapAlloc( GetProcessHeap(), 0, (nprofiles + 1) * sizeof(cmsHPROFILE) );
@ -263,7 +265,7 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
release_profile( profile0 );
release_profile( profile1 );
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -282,13 +284,13 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
BOOL WINAPI DeleteColorTransform( HTRANSFORM handle )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
TRACE( "( %p )\n", handle );
ret = close_transform( handle );
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -319,7 +321,7 @@ BOOL WINAPI TranslateBitmapBits( HTRANSFORM handle, PVOID srcbits, BMFORMAT inpu
DWORD outputstride, PBMCALLBACKFN callback, ULONG data )
{
BOOL ret = FALSE;
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
struct transform *transform = grab_transform( handle );
TRACE( "( %p, %p, 0x%08x, 0x%08x, 0x%08x, 0x%08x, %p, 0x%08x, 0x%08x, %p, 0x%08x )\n",
@ -333,7 +335,7 @@ BOOL WINAPI TranslateBitmapBits( HTRANSFORM handle, PVOID srcbits, BMFORMAT inpu
release_transform( transform );
ret = TRUE;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
return ret;
}
@ -357,7 +359,7 @@ BOOL WINAPI TranslateBitmapBits( HTRANSFORM handle, PVOID srcbits, BMFORMAT inpu
BOOL WINAPI TranslateColors( HTRANSFORM handle, PCOLOR in, DWORD count,
COLORTYPE input_type, PCOLOR out, COLORTYPE output_type )
{
#ifdef HAVE_LCMS
#ifdef HAVE_LCMS2
BOOL ret = TRUE;
struct transform *transform = grab_transform( handle );
cmsHTRANSFORM xfrm;
@ -462,7 +464,7 @@ done:
release_transform( transform );
return ret;
#else /* HAVE_LCMS */
#else /* HAVE_LCMS2 */
return FALSE;
#endif /* HAVE_LCMS */
#endif /* HAVE_LCMS2 */
}

View file

@ -108,7 +108,7 @@ reactos/dll/win32/mprapi # Synced to Wine-1.5.19
reactos/dll/win32/msacm32 # Synced to Wine-1.7.1
reactos/dll/win32/msadp32.acm # Synced to Wine-1.7.1
reactos/dll/win32/mscat32 # Synced to Wine-1.7.1
reactos/dll/win32/mscms # Synced to Wine-1.5.4
reactos/dll/win32/mscms # Synced to Wine-1.7.1
reactos/dll/win32/mscoree # Synced to Wine-1.5.4
reactos/dll/win32/msctf # Synced to Wine-1.5.4
reactos/dll/win32/msftedit # Synced to Wine-1.5.19