mscms: Port to liblcms2.
(cherry picked from commit d40c91262b91f72c44151a1481a77acfe71ba044)
diff --git a/configure b/configure
index d18bb47..05fdece 100755
--- a/configure
+++ b/configure
@@ -653,8 +653,8 @@
ZLIB
FREETYPE_LIBS
FREETYPE_CFLAGS
-LCMS_LIBS
-LCMS_CFLAGS
+LCMS2_LIBS
+LCMS2_CFLAGS
RESOLVLIBS
GPHOTO2_PORT_LIBS
GPHOTO2_PORT_CFLAGS
@@ -881,8 +881,8 @@
GPHOTO2_LIBS
GPHOTO2_PORT_CFLAGS
GPHOTO2_PORT_LIBS
-LCMS_CFLAGS
-LCMS_LIBS
+LCMS2_CFLAGS
+LCMS2_LIBS
FREETYPE_CFLAGS
FREETYPE_LIBS
GSTREAMER_CFLAGS
@@ -1597,8 +1597,9 @@
C compiler flags for libgphoto2_port, overriding pkg-config
GPHOTO2_PORT_LIBS
Linker flags for libgphoto2_port, overriding pkg-config
- LCMS_CFLAGS C compiler flags for lcms, overriding pkg-config
- LCMS_LIBS Linker flags for lcms, overriding pkg-config
+ LCMS2_CFLAGS
+ C compiler flags for lcms2, overriding pkg-config
+ LCMS2_LIBS Linker flags for lcms2, overriding pkg-config
FREETYPE_CFLAGS
C compiler flags for freetype2, overriding pkg-config
FREETYPE_LIBS
@@ -10761,45 +10762,44 @@
LIBS="$ac_save_LIBS"
fi
-if test "x$with_lcms" != "xno"
+if test "x$with_lcms2" != "xno"
then
ac_save_CPPFLAGS="$CPPFLAGS"
- if test -n "$LCMS_CFLAGS"; then :
+ if test -n "$LCMS2_CFLAGS"; then :
elif test -n "$PKG_CONFIG"; then :
- LCMS_CFLAGS=`$PKG_CONFIG --cflags lcms 2>/dev/null`
+ LCMS2_CFLAGS=`$PKG_CONFIG --cflags lcms2 2>/dev/null`
fi
-CPPFLAGS="$CPPFLAGS $LCMS_CFLAGS"
-if test -n "$LCMS_LIBS"; then :
+CPPFLAGS="$CPPFLAGS $LCMS2_CFLAGS"
+if test -n "$LCMS2_LIBS"; then :
elif test -n "$PKG_CONFIG"; then :
- LCMS_LIBS=`$PKG_CONFIG --libs lcms 2>/dev/null`
+ LCMS2_LIBS=`$PKG_CONFIG --libs lcms2 2>/dev/null`
fi
-LCMS_LIBS=${LCMS_LIBS:-"-llcms"}
- for ac_header in lcms.h lcms/lcms.h
+LCMS2_LIBS=${LCMS2_LIBS:-"-llcms2"}
+ for ac_header in lcms2.h
do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ ac_fn_c_check_header_mongrel "$LINENO" "lcms2.h" "ac_cv_header_lcms2_h" "$ac_includes_default"
+if test "x$ac_cv_header_lcms2_h" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_LCMS2_H 1
_ACEOF
fi
done
- if test "$ac_cv_header_lcms_h" = "yes" -o "$ac_cv_header_lcms_lcms_h" = "yes"
+ if test "$ac_cv_header_lcms2_h" = "yes"
then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmsOpenProfileFromFile in -llcms" >&5
-$as_echo_n "checking for cmsOpenProfileFromFile in -llcms... " >&6; }
-if ${ac_cv_lib_lcms_cmsOpenProfileFromFile+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmsOpenProfileFromFile in -llcms2" >&5
+$as_echo_n "checking for cmsOpenProfileFromFile in -llcms2... " >&6; }
+if ${ac_cv_lib_lcms2_cmsOpenProfileFromFile+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-llcms $LIBS"
+LIBS="-llcms2 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10819,35 +10819,35 @@
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_lcms_cmsOpenProfileFromFile=yes
+ ac_cv_lib_lcms2_cmsOpenProfileFromFile=yes
else
- ac_cv_lib_lcms_cmsOpenProfileFromFile=no
+ ac_cv_lib_lcms2_cmsOpenProfileFromFile=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lcms_cmsOpenProfileFromFile" >&5
-$as_echo "$ac_cv_lib_lcms_cmsOpenProfileFromFile" >&6; }
-if test "x$ac_cv_lib_lcms_cmsOpenProfileFromFile" = xyes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lcms2_cmsOpenProfileFromFile" >&5
+$as_echo "$ac_cv_lib_lcms2_cmsOpenProfileFromFile" >&6; }
+if test "x$ac_cv_lib_lcms2_cmsOpenProfileFromFile" = xyes; then :
-$as_echo "#define HAVE_LCMS 1" >>confdefs.h
+$as_echo "#define HAVE_LCMS2 1" >>confdefs.h
else
- LCMS_LIBS=""
+ LCMS2_LIBS=""
fi
else
- LCMS_CFLAGS=""
- LCMS_LIBS=""
+ LCMS2_CFLAGS=""
+ LCMS2_LIBS=""
fi
CPPFLAGS="$ac_save_CPPFLAGS"
fi
-if test "$ac_cv_lib_lcms_cmsOpenProfileFromFile" != "yes"; then :
+if test "$ac_cv_lib_lcms2_cmsOpenProfileFromFile" != "yes"; then :
case "x$with_cms" in
- x) as_fn_append wine_notices "|liblcms ${notice_platform}development files not found, Color Management won't be supported." ;;
+ x) as_fn_append wine_notices "|liblcms2 ${notice_platform}development files not found, Color Management won't be supported." ;;
xno) ;;
- *) as_fn_error $? "liblcms ${notice_platform}development files not found, Color Management won't be supported.
+ *) as_fn_error $? "liblcms2 ${notice_platform}development files not found, Color Management won't be supported.
This is an error since --with-cms was requested." "$LINENO" 5 ;;
esac
fi
diff --git a/configure.ac b/configure.ac
index 9844038..39a392c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1442,23 +1442,23 @@
fi
dnl **** Check for LittleCMS ***
-if test "x$with_lcms" != "xno"
+if test "x$with_lcms2" != "xno"
then
ac_save_CPPFLAGS="$CPPFLAGS"
- WINE_PACKAGE_FLAGS(LCMS,[lcms],[-llcms])
- AC_CHECK_HEADERS([lcms.h lcms/lcms.h])
- if test "$ac_cv_header_lcms_h" = "yes" -o "$ac_cv_header_lcms_lcms_h" = "yes"
+ WINE_PACKAGE_FLAGS(LCMS2,[lcms2],[-llcms2])
+ AC_CHECK_HEADERS([lcms2.h])
+ if test "$ac_cv_header_lcms2_h" = "yes"
then
- AC_CHECK_LIB(lcms, cmsOpenProfileFromFile,
- [AC_DEFINE(HAVE_LCMS, 1, [Define if you have the LittleCMS development environment])],[LCMS_LIBS=""])
+ AC_CHECK_LIB(lcms2, cmsOpenProfileFromFile,
+ [AC_DEFINE(HAVE_LCMS2, 1, [Define if you have the LittleCMS development environment])],[LCMS2_LIBS=""])
else
- LCMS_CFLAGS=""
- LCMS_LIBS=""
+ LCMS2_CFLAGS=""
+ LCMS2_LIBS=""
fi
CPPFLAGS="$ac_save_CPPFLAGS"
fi
-WINE_NOTICE_WITH(cms,[test "$ac_cv_lib_lcms_cmsOpenProfileFromFile" != "yes"],
- [liblcms ${notice_platform}development files not found, Color Management won't be supported.])
+WINE_NOTICE_WITH(cms,[test "$ac_cv_lib_lcms2_cmsOpenProfileFromFile" != "yes"],
+ [liblcms2 ${notice_platform}development files not found, Color Management won't be supported.])
dnl **** Check for FreeType 2 ****
if test "x$with_freetype" != "xno"
diff --git a/dlls/mscms/Makefile.in b/dlls/mscms/Makefile.in
index 6fb5e1f..234c515 100644
--- a/dlls/mscms/Makefile.in
+++ b/dlls/mscms/Makefile.in
@@ -1,8 +1,8 @@
MODULE = mscms.dll
IMPORTLIB = mscms
IMPORTS = shlwapi advapi32
-EXTRAINCL = @LCMS_CFLAGS@
-EXTRALIBS = @LCMS_LIBS@
+EXTRAINCL = @LCMS2_CFLAGS@
+EXTRALIBS = @LCMS2_LIBS@
C_SRCS = \
handle.c \
diff --git a/dlls/mscms/handle.c b/dlls/mscms/handle.c
index 2f9eaec..8a0f26d 100644
--- a/dlls/mscms/handle.c
+++ b/dlls/mscms/handle.c
@@ -31,7 +31,7 @@
#include "mscms_priv.h"
-#ifdef HAVE_LCMS
+#ifdef HAVE_LCMS2
static CRITICAL_SECTION MSCMS_handle_cs;
static CRITICAL_SECTION_DEBUG MSCMS_handle_cs_debug =
@@ -112,7 +112,7 @@
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)
{
@@ -165,11 +165,11 @@
{
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,7 +177,7 @@
CloseHandle( profile->file );
}
cmsCloseProfile( profile->cmsprofile );
- HeapFree( GetProcessHeap(), 0, profile->iccprofile );
+ HeapFree( GetProcessHeap(), 0, profile->data );
memset( profile, 0, sizeof(struct profile) );
@@ -249,4 +249,4 @@
return TRUE;
}
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
diff --git a/dlls/mscms/icc.c b/dlls/mscms/icc.c
index f751c70..3b1c718 100644
--- a/dlls/mscms/icc.c
+++ b/dlls/mscms/icc.c
@@ -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 */
diff --git a/dlls/mscms/mscms_main.c b/dlls/mscms/mscms_main.c
index 1688239..3f8dae5 100644
--- a/dlls/mscms/mscms_main.c
+++ b/dlls/mscms/mscms_main.c
@@ -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,13 +51,13 @@
{
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:
if (reserved) break;
-#ifdef HAVE_LCMS
+#ifdef HAVE_LCMS2
free_handle_tables();
#endif
break;
diff --git a/dlls/mscms/mscms_priv.h b/dlls/mscms/mscms_priv.h
index ffaf13b..a3bffa2 100644
--- a/dlls/mscms/mscms_priv.h
+++ b/dlls/mscms/mscms_priv.h
@@ -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 @@
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;
diff --git a/dlls/mscms/profile.c b/dlls/mscms/profile.c
index 8444e14..cb6fbfc 100644
--- a/dlls/mscms/profile.c
+++ b/dlls/mscms/profile.c
@@ -337,10 +337,8 @@
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 );
@@ -351,30 +349,17 @@
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;
}
@@ -399,10 +384,10 @@
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 );
@@ -413,19 +398,20 @@
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;
}
@@ -450,7 +436,7 @@
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;
@@ -463,7 +449,7 @@
release_profile( profile );
return FALSE;
}
- MSCMS_get_profile_header( profile->iccprofile, &header );
+ get_profile_header( profile, &header );
if (!buffer || header.phSize > *size)
{
@@ -473,13 +459,13 @@
}
/* 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;
}
@@ -501,7 +487,7 @@
*/
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 );
@@ -513,14 +499,13 @@
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 */
}
/******************************************************************************
@@ -540,8 +525,9 @@
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 );
@@ -552,12 +538,14 @@
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;
}
@@ -1156,10 +1144,8 @@
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 );
@@ -1170,21 +1156,11 @@
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;
}
@@ -1205,7 +1181,7 @@
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 );
@@ -1217,10 +1193,10 @@
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;
}
@@ -1245,10 +1221,8 @@
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 );
@@ -1259,28 +1233,11 @@
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;
}
@@ -1299,7 +1256,7 @@
*/
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 );
@@ -1311,14 +1268,13 @@
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 */
}
/******************************************************************************
@@ -1439,10 +1395,11 @@
*/
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 );
@@ -1452,14 +1409,15 @@
{
/* 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 ) );
@@ -1492,32 +1450,27 @@
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,18 +1483,19 @@
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;
if ((hprof = create_profile( &profile ))) return hprof;
- HeapFree( GetProcessHeap(), 0, iccprofile );
+ HeapFree( GetProcessHeap(), 0, data );
cmsCloseProfile( cmsprofile );
}
CloseHandle( handle );
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return NULL;
}
@@ -1560,11 +1514,11 @@
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;
}
diff --git a/dlls/mscms/transform.c b/dlls/mscms/transform.c
index 363400c..56a3232 100644
--- a/dlls/mscms/transform.c
+++ b/dlls/mscms/transform.c
@@ -34,7 +34,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(mscms);
-#ifdef HAVE_LCMS
+#ifdef HAVE_LCMS2
static DWORD from_profile( HPROFILE profile )
{
@@ -96,7 +96,7 @@
}
}
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
/******************************************************************************
* CreateColorTransformA [MSCMS.@]
@@ -141,7 +141,7 @@
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;
@@ -181,7 +181,7 @@
if (tgt) release_profile( tgt );
release_profile( dst );
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return ret;
}
@@ -205,7 +205,7 @@
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 +237,7 @@
{
/* 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 +263,7 @@
release_profile( profile0 );
release_profile( profile1 );
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return ret;
}
@@ -282,13 +282,13 @@
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 +319,7 @@
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 +333,7 @@
release_transform( transform );
ret = TRUE;
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return ret;
}
@@ -357,7 +357,7 @@
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 +462,7 @@
release_transform( transform );
return ret;
-#else /* HAVE_LCMS */
+#else /* HAVE_LCMS2 */
return FALSE;
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
}
diff --git a/include/config.h.in b/include/config.h.in
index b2459f0..eb0ea7a 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -271,13 +271,10 @@
#undef HAVE_LBER_H
/* Define if you have the LittleCMS development environment */
-#undef HAVE_LCMS
+#undef HAVE_LCMS2
-/* Define to 1 if you have the <lcms.h> header file. */
-#undef HAVE_LCMS_H
-
-/* Define to 1 if you have the <lcms/lcms.h> header file. */
-#undef HAVE_LCMS_LCMS_H
+/* Define to 1 if you have the <lcms2.h> header file. */
+#undef HAVE_LCMS2_H
/* Define if you have the OpenLDAP development environment */
#undef HAVE_LDAP