ReactOS  0.4.14-dev-608-gd495a4f
profile.c File Reference
#include "config.h"
#include "wine/debug.h"
#include "wine/unicode.h"
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
#include "wingdi.h"
#include "winuser.h"
#include "winreg.h"
#include "shlwapi.h"
#include "icm.h"
#include "mscms_priv.h"
Include dependency graph for profile.c:

Go to the source code of this file.

Functions

static void basename (LPCWSTR path, LPWSTR name)
 
static LPWSTR strdupW (LPCSTR str)
 
const chardbgstr_tag (DWORD tag)
 
 WINE_DEFAULT_DEBUG_CHANNEL (mscms)
 
BOOL WINAPI AssociateColorProfileWithDeviceA (PCSTR machine, PCSTR profile, PCSTR device)
 
static BOOL set_profile_device_key (PCWSTR file, const BYTE *value, DWORD size)
 
BOOL WINAPI AssociateColorProfileWithDeviceW (PCWSTR machine, PCWSTR profile, PCWSTR device)
 
BOOL WINAPI DisassociateColorProfileFromDeviceA (PCSTR machine, PCSTR profile, PCSTR device)
 
BOOL WINAPI DisassociateColorProfileFromDeviceW (PCWSTR machine, PCWSTR profile, PCWSTR device)
 
BOOL WINAPI GetColorDirectoryA (PCSTR machine, PSTR buffer, PDWORD size)
 
BOOL WINAPI GetColorDirectoryW (PCWSTR machine, PWSTR buffer, PDWORD size)
 
BOOL WINAPI GetColorProfileElement (HPROFILE handle, TAGTYPE type, DWORD offset, PDWORD size, PVOID buffer, PBOOL ref)
 
BOOL WINAPI GetColorProfileElementTag (HPROFILE handle, DWORD index, PTAGTYPE type)
 
BOOL WINAPI GetColorProfileFromHandle (HPROFILE handle, PBYTE buffer, PDWORD size)
 
BOOL WINAPI GetColorProfileHeader (HPROFILE handle, PPROFILEHEADER header)
 
BOOL WINAPI GetCountColorProfileElements (HPROFILE handle, PDWORD count)
 
BOOL WINAPI GetStandardColorSpaceProfileA (PCSTR machine, DWORD id, PSTR profile, PDWORD size)
 
BOOL WINAPI GetStandardColorSpaceProfileW (PCWSTR machine, DWORD id, PWSTR profile, PDWORD size)
 
static BOOL header_from_file (LPCWSTR file, PPROFILEHEADER header)
 
static BOOL match_profile (PENUMTYPEW rec, PPROFILEHEADER hdr)
 
BOOL WINAPI EnumColorProfilesA (PCSTR machine, PENUMTYPEA record, PBYTE buffer, PDWORD size, PDWORD number)
 
BOOL WINAPI EnumColorProfilesW (PCWSTR machine, PENUMTYPEW record, PBYTE buffer, PDWORD size, PDWORD number)
 
BOOL WINAPI InstallColorProfileA (PCSTR machine, PCSTR profile)
 
BOOL WINAPI InstallColorProfileW (PCWSTR machine, PCWSTR profile)
 
BOOL WINAPI IsColorProfileTagPresent (HPROFILE handle, TAGTYPE type, PBOOL present)
 
BOOL WINAPI IsColorProfileValid (HPROFILE handle, PBOOL valid)
 
BOOL WINAPI SetColorProfileElement (HPROFILE handle, TAGTYPE type, DWORD offset, PDWORD size, PVOID buffer)
 
BOOL WINAPI SetColorProfileHeader (HPROFILE handle, PPROFILEHEADER header)
 
BOOL WINAPI UninstallColorProfileA (PCSTR machine, PCSTR profile, BOOL delete)
 
BOOL WINAPI UninstallColorProfileW (PCWSTR machine, PCWSTR profile, BOOL delete)
 
static BOOL profile_AtoW (const PROFILE *in, PROFILE *out)
 
HPROFILE WINAPI OpenColorProfileA (PPROFILE profile, DWORD access, DWORD sharing, DWORD creation)
 
HPROFILE WINAPI OpenColorProfileW (PPROFILE profile, DWORD access, DWORD sharing, DWORD creation)
 
BOOL WINAPI CloseColorProfile (HPROFILE profile)
 
BOOL WINAPI WcsGetUsePerUserProfiles (const WCHAR *name, DWORD class, BOOL *use_per_user_profile)
 
BOOL WINAPI WcsEnumColorProfilesSize (WCS_PROFILE_MANAGEMENT_SCOPE scope, ENUMTYPEW *record, DWORD *size)
 
HPROFILE WINAPI WcsOpenColorProfileA (PROFILE *cdm, PROFILE *camp, PROFILE *gmmp, DWORD access, DWORD sharing, DWORD creation, DWORD flags)
 
HPROFILE WINAPI WcsOpenColorProfileW (PROFILE *cdm, PROFILE *camp, PROFILE *gmmp, DWORD access, DWORD sharing, DWORD creation, DWORD flags)
 

Function Documentation

◆ AssociateColorProfileWithDeviceA()

BOOL WINAPI AssociateColorProfileWithDeviceA ( PCSTR  machine,
PCSTR  profile,
PCSTR  device 
)

Definition at line 69 of file profile.c.

70 {
71  int len;
72  BOOL ret = FALSE;
73  WCHAR *profileW, *deviceW;
74 
75  TRACE( "( %s, %s, %s )\n", debugstr_a(machine), debugstr_a(profile), debugstr_a(device) );
76 
77  if (!profile || !device)
78  {
80  return FALSE;
81  }
82  if (machine)
83  {
85  return FALSE;
86  }
87 
88  len = MultiByteToWideChar( CP_ACP, 0, profile, -1, NULL, 0 );
89  if (!(profileW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return FALSE;
90 
91  MultiByteToWideChar( CP_ACP, 0, profile, -1, profileW, len );
92 
93  len = MultiByteToWideChar( CP_ACP, 0, device, -1, NULL, 0 );
94  if ((deviceW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
95  {
98  }
99 
100  HeapFree( GetProcessHeap(), 0, profileW );
102  return ret;
103 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
BOOL WINAPI AssociateColorProfileWithDeviceW(PCWSTR machine, PCWSTR profile, PCWSTR device)
Definition: profile.c:154
#define CP_ACP
Definition: compat.h:99
static const WCHAR deviceW[]
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: devices.h:37
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
#define SetLastError(x)
Definition: compat.h:417
int ret
static const char machine[]
Definition: profile.c:104
GLenum GLsizei len
Definition: glext.h:6722
#define MultiByteToWideChar
Definition: compat.h:100
#define ERROR_NOT_SUPPORTED
Definition: compat.h:90
#define profile
Definition: kernel32.h:12
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by init_function_ptrs().

◆ AssociateColorProfileWithDeviceW()

BOOL WINAPI AssociateColorProfileWithDeviceW ( PCWSTR  machine,
PCWSTR  profile,
PCWSTR  device 
)

Definition at line 154 of file profile.c.

155 {
156  static const BYTE dummy_value[12];
157 
158  TRACE( "( %s, %s, %s )\n", debugstr_w(machine), debugstr_w(profile), debugstr_w(device) );
159 
160  if (!profile || !device)
161  {
163  return FALSE;
164  }
165  if (machine)
166  {
168  return FALSE;
169  }
170 
171  return set_profile_device_key( profile, dummy_value, sizeof(dummy_value) );
172 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
Definition: devices.h:37
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
static BOOL set_profile_device_key(PCWSTR file, const BYTE *value, DWORD size)
Definition: profile.c:105
#define SetLastError(x)
Definition: compat.h:417
static const char machine[]
Definition: profile.c:104
unsigned char BYTE
Definition: mem.h:68
#define ERROR_NOT_SUPPORTED
Definition: compat.h:90
#define profile
Definition: kernel32.h:12

Referenced by AssociateColorProfileWithDeviceA().

◆ basename()

static void basename ( LPCWSTR  path,
LPWSTR  name 
)
static

Definition at line 38 of file profile.c.

39 {
40  INT i = lstrlenW( path );
41 
42  while (i > 0 && path[i - 1] != '\\' && path[i - 1] != '/') i--;
43  lstrcpyW( name, &path[i] );
44 }
#define lstrlenW
Definition: compat.h:415
int32_t INT
Definition: typedefs.h:56
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define lstrcpyW
Definition: compat.h:414
Definition: name.c:38

Referenced by AddDelBackupEntryA(), cleanable(), create_cache(), DoGetNameInZip(), FileSaveRestoreA(), get_events(), hash_basename(), InstallCatalog(), InstallColorProfileW(), pSetupInstallCatalog(), set_outfile(), set_profile_device_key(), SHGetNewLinkInfoW(), test_AssociateColorProfileWithDeviceA(), test_CryptCATAdminAddRemoveCatalog(), and test_debug_heap().

◆ CloseColorProfile()

BOOL WINAPI CloseColorProfile ( HPROFILE  profile)

Definition at line 1523 of file profile.c.

1524 {
1525  BOOL ret = FALSE;
1526 #ifdef HAVE_LCMS2
1527 
1528  TRACE( "( %p )\n", profile );
1529  ret = close_profile( profile );
1530 
1531 #endif /* HAVE_LCMS2 */
1532  return ret;
1533 }
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
int ret
#define profile
Definition: kernel32.h:12

Referenced by header_from_file(), init_function_ptrs(), and set_profile_device_key().

◆ dbgstr_tag()

const char* dbgstr_tag ( DWORD  tag)

Definition at line 58 of file profile.c.

59 {
60  return wine_dbg_sprintf( "'%c%c%c%c'",
61  (char)(tag >> 24), (char)(tag >> 16), (char)(tag >> 8), (char)(tag) );
62 }
Definition: ecma_167.h:138
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:271

Referenced by CreateColorTransformW(), match_profile(), RegisterCMMA(), RegisterCMMW(), SelectCMM(), UnregisterCMMA(), UnregisterCMMW(), and WcsGetUsePerUserProfiles().

◆ DisassociateColorProfileFromDeviceA()

BOOL WINAPI DisassociateColorProfileFromDeviceA ( PCSTR  machine,
PCSTR  profile,
PCSTR  device 
)

Definition at line 177 of file profile.c.

178 {
179  int len;
180  BOOL ret = FALSE;
181  WCHAR *profileW, *deviceW;
182 
183  TRACE( "( %s, %s, %s )\n", debugstr_a(machine), debugstr_a(profile), debugstr_a(device) );
184 
185  if (!profile || !device)
186  {
188  return FALSE;
189  }
190  if (machine)
191  {
193  return FALSE;
194  }
195 
196  len = MultiByteToWideChar( CP_ACP, 0, profile, -1, NULL, 0 );
197  if (!(profileW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return FALSE;
198 
199  MultiByteToWideChar( CP_ACP, 0, profile, -1, profileW, len );
200 
201  len = MultiByteToWideChar( CP_ACP, 0, device, -1, NULL, 0 );
202  if ((deviceW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
203  {
206  }
207 
208  HeapFree( GetProcessHeap(), 0, profileW );
210  return ret;
211 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define CP_ACP
Definition: compat.h:99
static const WCHAR deviceW[]
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: devices.h:37
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
#define SetLastError(x)
Definition: compat.h:417
int ret
static const char machine[]
Definition: profile.c:104
GLenum GLsizei len
Definition: glext.h:6722
#define MultiByteToWideChar
Definition: compat.h:100
#define ERROR_NOT_SUPPORTED
Definition: compat.h:90
BOOL WINAPI DisassociateColorProfileFromDeviceW(PCWSTR machine, PCWSTR profile, PCWSTR device)
Definition: profile.c:216
#define profile
Definition: kernel32.h:12
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by init_function_ptrs().

◆ DisassociateColorProfileFromDeviceW()

BOOL WINAPI DisassociateColorProfileFromDeviceW ( PCWSTR  machine,
PCWSTR  profile,
PCWSTR  device 
)

Definition at line 216 of file profile.c.

217 {
218  TRACE( "( %s, %s, %s )\n", debugstr_w(machine), debugstr_w(profile), debugstr_w(device) );
219 
220  if (!profile || !device)
221  {
223  return FALSE;
224  }
225  if (machine)
226  {
228  return FALSE;
229  }
230 
231  return set_profile_device_key( profile, NULL, 0 );
232 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
Definition: devices.h:37
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
static BOOL set_profile_device_key(PCWSTR file, const BYTE *value, DWORD size)
Definition: profile.c:105
#define SetLastError(x)
Definition: compat.h:417
static const char machine[]
Definition: profile.c:104
#define ERROR_NOT_SUPPORTED
Definition: compat.h:90
#define profile
Definition: kernel32.h:12

Referenced by DisassociateColorProfileFromDeviceA().

◆ EnumColorProfilesA()

BOOL WINAPI EnumColorProfilesA ( PCSTR  machine,
PENUMTYPEA  record,
PBYTE  buffer,
PDWORD  size,
PDWORD  number 
)

Definition at line 805 of file profile.c.

807 {
808  BOOL match, ret = FALSE;
809  char spec[] = "\\*.icm";
810  char colordir[MAX_PATH], glob[MAX_PATH], **profiles = NULL;
811  DWORD i, len = sizeof(colordir), count = 0, totalsize = 0;
814  ENUMTYPEW recordW;
815  WCHAR *fileW = NULL, *deviceW = NULL;
816  HANDLE find;
817 
818  TRACE( "( %p, %p, %p, %p, %p )\n", machine, record, buffer, size, number );
819 
820  if (machine || !record || !size ||
821  record->dwSize != sizeof(ENUMTYPEA) ||
822  record->dwVersion != ENUM_TYPE_VERSION) return FALSE;
823 
824  ret = GetColorDirectoryA( machine, colordir, &len );
825  if (!ret || len + sizeof(spec) > MAX_PATH)
826  {
827  WARN( "can't retrieve color directory\n" );
828  return FALSE;
829  }
830 
831  lstrcpyA( glob, colordir );
832  lstrcatA( glob, spec );
833 
834  find = FindFirstFileA( glob, &data );
835  if (find == INVALID_HANDLE_VALUE) return FALSE;
836 
837  profiles = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(char *) + 1 );
838  if (!profiles) goto exit;
839 
840  memcpy( &recordW, record, sizeof(ENUMTYPEA) );
841  if (record->pDeviceName)
842  {
843  deviceW = strdupW( record->pDeviceName );
844  if (!(recordW.pDeviceName = deviceW)) goto exit;
845  }
846 
847  fileW = strdupW( data.cFileName );
848  if (!fileW) goto exit;
849 
851  if (ret)
852  {
853  match = match_profile( &recordW, &header );
854  if (match)
855  {
856  len = sizeof(char) * (lstrlenA( data.cFileName ) + 1);
857  profiles[count] = HeapAlloc( GetProcessHeap(), 0, len );
858 
859  if (!profiles[count]) goto exit;
860  else
861  {
862  TRACE( "matching profile: %s\n", debugstr_a(data.cFileName) );
863  lstrcpyA( profiles[count], data.cFileName );
864  totalsize += len;
865  count++;
866  }
867  }
868  }
869  HeapFree( GetProcessHeap(), 0, fileW );
870  fileW = NULL;
871 
872  while (FindNextFileA( find, &data ))
873  {
874  fileW = strdupW( data.cFileName );
875  if (!fileW) goto exit;
876 
878  if (!ret)
879  {
880  HeapFree( GetProcessHeap(), 0, fileW );
881  continue;
882  }
883 
884  match = match_profile( &recordW, &header );
885  if (match)
886  {
888  profiles, sizeof(char *) * (count + 1) );
889  if (!tmp) goto exit;
890  else profiles = tmp;
891 
892  len = sizeof(char) * (lstrlenA( data.cFileName ) + 1);
893  profiles[count] = HeapAlloc( GetProcessHeap(), 0, len );
894 
895  if (!profiles[count]) goto exit;
896  else
897  {
898  TRACE( "matching profile: %s\n", debugstr_a(data.cFileName) );
899  lstrcpyA( profiles[count], data.cFileName );
900  totalsize += len;
901  count++;
902  }
903  }
904  HeapFree( GetProcessHeap(), 0, fileW );
905  fileW = NULL;
906  }
907 
908  totalsize++;
909  if (buffer && *size >= totalsize)
910  {
911  char *p = (char *)buffer;
912 
913  for (i = 0; i < count; i++)
914  {
915  lstrcpyA( p, profiles[i] );
916  p += lstrlenA( profiles[i] ) + 1;
917  }
918  *p = 0;
919  ret = TRUE;
920  }
921  else
922  {
924  ret = FALSE;
925  }
926 
927  *size = totalsize;
928  if (number) *number = count;
929 
930 exit:
931  for (i = 0; i < count; i++)
932  HeapFree( GetProcessHeap(), 0, profiles[i] );
933  HeapFree( GetProcessHeap(), 0, profiles );
935  HeapFree( GetProcessHeap(), 0, fileW );
936  FindClose( find );
937 
938  return ret;
939 }
static BOOL header_from_file(LPCWSTR file, PPROFILEHEADER header)
Definition: profile.c:669
#define TRUE
Definition: types.h:120
#define ENUM_TYPE_VERSION
Definition: icm.h:221
PCWSTR pDeviceName
Definition: icm.h:252
Definition: match.c:28
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define WARN(fmt,...)
Definition: debug.h:111
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
GLuint buffer
Definition: glext.h:5915
static LPWSTR strdupW(LPCSTR str)
Definition: profile.c:46
BOOL WINAPI FindNextFileA(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAA lpFindFileData)
Definition: find.c:336
static const WCHAR deviceW[]
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int BOOL
Definition: ntddk_ex.h:94
static size_t double number
Definition: printf.c:69
smooth NULL
Definition: ftsmooth.c:416
unsigned char
Definition: typeof.h:29
struct match match
Definition: match.c:33
static BOOL match_profile(PENUMTYPEW rec, PPROFILEHEADER hdr)
Definition: profile.c:712
LPSTR WINAPI lstrcatA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:123
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:417
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:100
int ret
static const char machine[]
Definition: profile.c:104
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
BOOL WINAPI GetColorDirectoryA(PCSTR machine, PSTR buffer, PDWORD size)
Definition: profile.c:239
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define HeapReAlloc
Definition: compat.h:401
char ** glob(const char *v)
Definition: fake.c:36
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
static TAGID TAGID find
Definition: db.cpp:153
void exit(int exitcode)
Definition: _exit.c:33
GLfloat GLfloat p
Definition: glext.h:8902
static const WCHAR fileW[]
Definition: url.c:111
HANDLE WINAPI FindFirstFileA(IN LPCSTR lpFileName, OUT LPWIN32_FIND_DATAA lpFindFileData)
Definition: find.c:263
#define HeapFree(x, y, z)
Definition: compat.h:402
struct CFHEADER header
Definition: fdi.c:101
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by init_function_ptrs().

◆ EnumColorProfilesW()

BOOL WINAPI EnumColorProfilesW ( PCWSTR  machine,
PENUMTYPEW  record,
PBYTE  buffer,
PDWORD  size,
PDWORD  number 
)

Definition at line 958 of file profile.c.

960 {
961  static const WCHAR spec[] = {'\\','*','i','c','m',0};
962  BOOL match, ret = FALSE;
963  WCHAR colordir[MAX_PATH], glob[MAX_PATH], **profiles = NULL;
964  DWORD i, len = sizeof(colordir), count = 0, totalsize = 0;
967  HANDLE find;
968 
969  TRACE( "( %p, %p, %p, %p, %p )\n", machine, record, buffer, size, number );
970 
971  if (machine || !record || !size ||
972  record->dwSize != sizeof(ENUMTYPEW) ||
973  record->dwVersion != ENUM_TYPE_VERSION) return FALSE;
974 
975  ret = GetColorDirectoryW( machine, colordir, &len );
976  if (!ret || len + sizeof(spec) > MAX_PATH)
977  {
978  WARN( "Can't retrieve color directory\n" );
979  return FALSE;
980  }
981 
982  lstrcpyW( glob, colordir );
983  lstrcatW( glob, spec );
984 
985  find = FindFirstFileW( glob, &data );
986  if (find == INVALID_HANDLE_VALUE) return FALSE;
987 
988  profiles = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WCHAR *) + 1 );
989  if (!profiles) goto exit;
990 
991  ret = header_from_file( data.cFileName, &header );
992  if (ret)
993  {
995  if (match)
996  {
997  len = sizeof(WCHAR) * (lstrlenW( data.cFileName ) + 1);
998  profiles[count] = HeapAlloc( GetProcessHeap(), 0, len );
999 
1000  if (!profiles[count]) goto exit;
1001  else
1002  {
1003  TRACE( "matching profile: %s\n", debugstr_w(data.cFileName) );
1004  lstrcpyW( profiles[count], data.cFileName );
1005  totalsize += len;
1006  count++;
1007  }
1008  }
1009  }
1010 
1011  while (FindNextFileW( find, &data ))
1012  {
1013  ret = header_from_file( data.cFileName, &header );
1014  if (!ret) continue;
1015 
1017  if (match)
1018  {
1020  profiles, sizeof(WCHAR *) * (count + 1) );
1021  if (!tmp) goto exit;
1022  else profiles = tmp;
1023 
1024  len = sizeof(WCHAR) * (lstrlenW( data.cFileName ) + 1);
1025  profiles[count] = HeapAlloc( GetProcessHeap(), 0, len );
1026 
1027  if (!profiles[count]) goto exit;
1028  else
1029  {
1030  TRACE( "matching profile: %s\n", debugstr_w(data.cFileName) );
1031  lstrcpyW( profiles[count], data.cFileName );
1032  totalsize += len;
1033  count++;
1034  }
1035  }
1036  }
1037 
1038  totalsize++;
1039  if (buffer && *size >= totalsize)
1040  {
1041  WCHAR *p = (WCHAR *)buffer;
1042 
1043  for (i = 0; i < count; i++)
1044  {
1045  lstrcpyW( p, profiles[i] );
1046  p += lstrlenW( profiles[i] ) + 1;
1047  }
1048  *p = 0;
1049  ret = TRUE;
1050  }
1051  else
1052  {
1054  ret = FALSE;
1055  }
1056 
1057  *size = totalsize;
1058  if (number) *number = count;
1059 
1060 exit:
1061  for (i = 0; i < count; i++)
1062  HeapFree( GetProcessHeap(), 0, profiles[i] );
1063  HeapFree( GetProcessHeap(), 0, profiles );
1064  FindClose( find );
1065 
1066  return ret;
1067 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
static BOOL header_from_file(LPCWSTR file, PPROFILEHEADER header)
Definition: profile.c:669
#define TRUE
Definition: types.h:120
#define ENUM_TYPE_VERSION
Definition: icm.h:221
Definition: match.c:28
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define WARN(fmt,...)
Definition: debug.h:111
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
GLuint buffer
Definition: glext.h:5915
#define lstrlenW
Definition: compat.h:415
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int BOOL
Definition: ntddk_ex.h:94
static size_t double number
Definition: printf.c:69
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
struct match match
Definition: match.c:33
static BOOL match_profile(PENUMTYPEW rec, PPROFILEHEADER hdr)
Definition: profile.c:712
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL WINAPI GetColorDirectoryW(PCWSTR machine, PWSTR buffer, PDWORD size)
Definition: profile.c:287
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:417
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
int ret
static const char machine[]
Definition: profile.c:104
GLenum GLsizei len
Definition: glext.h:6722
#define lstrcpyW
Definition: compat.h:414
#define HeapReAlloc
Definition: compat.h:401
char ** glob(const char *v)
Definition: fake.c:36
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
static TAGID TAGID find
Definition: db.cpp:153
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
void exit(int exitcode)
Definition: _exit.c:33
GLfloat GLfloat p
Definition: glext.h:8902
#define HeapFree(x, y, z)
Definition: compat.h:402
struct CFHEADER header
Definition: fdi.c:101
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by init_function_ptrs().

◆ GetColorDirectoryA()

BOOL WINAPI GetColorDirectoryA ( PCSTR  machine,
PSTR  buffer,
PDWORD  size 
)

Definition at line 239 of file profile.c.

240 {
241  INT len;
242  LPWSTR bufferW;
243  BOOL ret = FALSE;
244  DWORD sizeW;
245 
246  TRACE( "( %p, %p )\n", buffer, size );
247 
248  if (machine || !size) return FALSE;
249 
250  if (!buffer)
251  {
253  *size = sizeW / sizeof(WCHAR);
254  return ret;
255  }
256 
257  sizeW = *size * sizeof(WCHAR);
258 
259  bufferW = HeapAlloc( GetProcessHeap(), 0, sizeW );
260  if (bufferW)
261  {
262  if ((ret = GetColorDirectoryW( NULL, bufferW, &sizeW )))
263  {
264  *size = WideCharToMultiByte( CP_ACP, 0, bufferW, -1, NULL, 0, NULL, NULL );
265  len = WideCharToMultiByte( CP_ACP, 0, bufferW, -1, buffer, *size, NULL, NULL );
266  if (!len) ret = FALSE;
267  }
268  else *size = sizeW / sizeof(WCHAR);
269 
270  HeapFree( GetProcessHeap(), 0, bufferW );
271  }
272  return ret;
273 }
#define WideCharToMultiByte
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:99
GLuint buffer
Definition: glext.h:5915
int32_t INT
Definition: typedefs.h:56
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR sizeW[]
Definition: editor.c:79
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL WINAPI GetColorDirectoryW(PCWSTR machine, PWSTR buffer, PDWORD size)
Definition: profile.c:287
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
static const char machine[]
Definition: profile.c:104
GLenum GLsizei len
Definition: glext.h:6722
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by EnumColorProfilesA(), and init_function_ptrs().

◆ GetColorDirectoryW()

BOOL WINAPI GetColorDirectoryW ( PCWSTR  machine,
PWSTR  buffer,
PDWORD  size 
)

Definition at line 287 of file profile.c.

288 {
289  WCHAR colordir[MAX_PATH];
290  static const WCHAR colorsubdir[] =
291  {'\\','s','p','o','o','l','\\','d','r','i','v','e','r','s','\\','c','o','l','o','r',0};
292  DWORD len;
293 
294  TRACE( "( %p, %p )\n", buffer, size );
295 
296  if (machine || !size) return FALSE;
297 
298  GetSystemDirectoryW( colordir, ARRAY_SIZE( colordir ));
299  lstrcatW( colordir, colorsubdir );
300 
301  len = lstrlenW( colordir ) * sizeof(WCHAR);
302 
303  if (buffer && len <= *size)
304  {
305  lstrcpyW( buffer, colordir );
306  *size = len;
307  return TRUE;
308  }
309 
311  *size = len;
312  return FALSE;
313 }
#define TRUE
Definition: types.h:120
GLuint buffer
Definition: glext.h:5915
#define lstrlenW
Definition: compat.h:415
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:417
static const char machine[]
Definition: profile.c:104
GLenum GLsizei len
Definition: glext.h:6722
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define lstrcpyW
Definition: compat.h:414
#define ARRAY_SIZE(a)
Definition: main.h:24
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2312
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274

Referenced by EnumColorProfilesW(), GetColorDirectoryA(), GetStandardColorSpaceProfileW(), header_from_file(), init_function_ptrs(), InstallColorProfileW(), and OpenColorProfileW().

◆ GetColorProfileElement()

BOOL WINAPI GetColorProfileElement ( HPROFILE  handle,
TAGTYPE  type,
DWORD  offset,
PDWORD  size,
PVOID  buffer,
PBOOL  ref 
)

Definition at line 334 of file profile.c.

336 {
337  BOOL ret = FALSE;
338 #ifdef HAVE_LCMS2
339  struct profile *profile = grab_profile( handle );
340 
341  TRACE( "( %p, 0x%08x, %d, %p, %p, %p )\n", handle, type, offset, size, buffer, ref );
342 
343  if (!profile) return FALSE;
344 
345  if (!size || !ref)
346  {
347  release_profile( profile );
348  return FALSE;
349  }
350  if (!get_tag_data( profile, type, offset, buffer, size ))
351  {
352  release_profile( profile );
353  return FALSE;
354  }
355  ret = get_tag_data( profile, type, offset, buffer, size );
356  *ref = cmsTagLinkedTo( profile->cmsprofile, type ) != 0;
357  release_profile( profile );
358 #endif /* HAVE_LCMS2 */
359  return ret;
360 }
GLintptr offset
Definition: glext.h:5920
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
Definition: send.c:47
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
int ret
#define profile
Definition: kernel32.h:12

Referenced by init_function_ptrs().

◆ GetColorProfileElementTag()

BOOL WINAPI GetColorProfileElementTag ( HPROFILE  handle,
DWORD  index,
PTAGTYPE  type 
)

Definition at line 380 of file profile.c.

381 {
382  BOOL ret = FALSE;
383 #ifdef HAVE_LCMS2
384  struct profile *profile = grab_profile( handle );
385  cmsInt32Number num_tags;
386  cmsTagSignature sig;
387 
388  TRACE( "( %p, %d, %p )\n", handle, index, type );
389 
390  if (!profile) return FALSE;
391 
392  if (!type)
393  {
394  release_profile( profile );
395  return FALSE;
396  }
397  num_tags = cmsGetTagCount( profile->cmsprofile );
398  if (num_tags < 0 || index > num_tags || index < 1)
399  {
400  release_profile( profile );
401  return FALSE;
402  }
403  if ((sig = cmsGetTagSignature( profile->cmsprofile, index - 1 )))
404  {
405  *type = sig;
406  ret = TRUE;
407  }
408  release_profile( profile );
409 
410 #endif /* HAVE_LCMS2 */
411  return ret;
412 }
#define TRUE
Definition: types.h:120
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint index
Definition: glext.h:6031
#define TRACE(s)
Definition: solgame.cpp:4
int ret
#define profile
Definition: kernel32.h:12

Referenced by init_function_ptrs().

◆ GetColorProfileFromHandle()

BOOL WINAPI GetColorProfileFromHandle ( HPROFILE  handle,
PBYTE  buffer,
PDWORD  size 
)

Definition at line 432 of file profile.c.

433 {
434  BOOL ret = FALSE;
435 #ifdef HAVE_LCMS2
436  struct profile *profile = grab_profile( handle );
438 
439  TRACE( "( %p, %p, %p )\n", handle, buffer, size );
440 
441  if (!profile) return FALSE;
442 
443  if (!size)
444  {
445  release_profile( profile );
446  return FALSE;
447  }
448  get_profile_header( profile, &header );
449 
450  if (!buffer || header.phSize > *size)
451  {
452  *size = header.phSize;
453  release_profile( profile );
454  return FALSE;
455  }
456 
457  /* No endian conversion needed */
458  memcpy( buffer, profile->data, profile->size );
459  *size = profile->size;
460 
461  release_profile( profile );
462  ret = TRUE;
463 
464 #endif /* HAVE_LCMS2 */
465  return ret;
466 }
#define TRUE
Definition: types.h:120
GLuint buffer
Definition: glext.h:5915
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
int ret
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define profile
Definition: kernel32.h:12
struct CFHEADER header
Definition: fdi.c:101

Referenced by init_function_ptrs().

◆ GetColorProfileHeader()

BOOL WINAPI GetColorProfileHeader ( HPROFILE  handle,
PPROFILEHEADER  header 
)

Definition at line 484 of file profile.c.

485 {
486 #ifdef HAVE_LCMS2
487  struct profile *profile = grab_profile( handle );
488 
489  TRACE( "( %p, %p )\n", handle, header );
490 
491  if (!profile) return FALSE;
492 
493  if (!header)
494  {
495  release_profile( profile );
496  return FALSE;
497  }
498  get_profile_header( profile, header );
499  release_profile( profile );
500  return TRUE;
501 
502 #else
503  return FALSE;
504 #endif /* HAVE_LCMS2 */
505 }
#define TRUE
Definition: types.h:120
#define TRACE(s)
Definition: solgame.cpp:4
#define profile
Definition: kernel32.h:12

Referenced by header_from_file(), init_function_ptrs(), and set_profile_device_key().

◆ GetCountColorProfileElements()

BOOL WINAPI GetCountColorProfileElements ( HPROFILE  handle,
PDWORD  count 
)

Definition at line 521 of file profile.c.

522 {
523  BOOL ret = FALSE;
524 #ifdef HAVE_LCMS2
525  struct profile *profile = grab_profile( handle );
526  cmsInt32Number num_tags;
527 
528  TRACE( "( %p, %p )\n", handle, count );
529 
530  if (!profile) return FALSE;
531 
532  if (!count)
533  {
534  release_profile( profile );
535  return FALSE;
536  }
537  if ((num_tags = cmsGetTagCount( profile->cmsprofile )) >= 0)
538  {
539  *count = num_tags;
540  ret = TRUE;
541  }
542  release_profile( profile );
543 
544 #endif /* HAVE_LCMS2 */
545  return ret;
546 }
#define TRUE
Definition: types.h:120
GLuint GLuint GLsizei count
Definition: gl.h:1545
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
int ret
#define profile
Definition: kernel32.h:12

Referenced by init_function_ptrs().

◆ GetStandardColorSpaceProfileA()

BOOL WINAPI GetStandardColorSpaceProfileA ( PCSTR  machine,
DWORD  id,
PSTR  profile,
PDWORD  size 
)

Definition at line 553 of file profile.c.

554 {
555  INT len;
556  LPWSTR profileW;
557  BOOL ret = FALSE;
558  DWORD sizeW;
559 
560  TRACE( "( 0x%08x, %p, %p )\n", id, profile, size );
561 
562  if (machine)
563  {
565  return FALSE;
566  }
567 
568  if (!size)
569  {
571  return FALSE;
572  }
573 
574  sizeW = *size * sizeof(WCHAR);
575 
576  if (!profile)
577  {
579  *size = sizeW / sizeof(WCHAR);
580  return ret;
581  }
582 
583  profileW = HeapAlloc( GetProcessHeap(), 0, sizeW );
584  if (profileW)
585  {
586  if ((ret = GetStandardColorSpaceProfileW( NULL, id, profileW, &sizeW )))
587  {
588  *size = WideCharToMultiByte( CP_ACP, 0, profileW, -1, NULL, 0, NULL, NULL );
589  len = WideCharToMultiByte( CP_ACP, 0, profileW, -1, profile, *size, NULL, NULL );
590  if (!len) ret = FALSE;
591  }
592  else *size = sizeW / sizeof(WCHAR);
593 
594  HeapFree( GetProcessHeap(), 0, profileW );
595  }
596  return ret;
597 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define WideCharToMultiByte
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:99
BOOL WINAPI GetStandardColorSpaceProfileW(PCWSTR machine, DWORD id, PWSTR profile, PDWORD size)
Definition: profile.c:615
int32_t INT
Definition: typedefs.h:56
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR sizeW[]
Definition: editor.c:79
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:417
int ret
static const char machine[]
Definition: profile.c:104
GLenum GLsizei len
Definition: glext.h:6722
#define ERROR_NOT_SUPPORTED
Definition: compat.h:90
#define profile
Definition: kernel32.h:12
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by init_function_ptrs().

◆ GetStandardColorSpaceProfileW()

BOOL WINAPI GetStandardColorSpaceProfileW ( PCWSTR  machine,
DWORD  id,
PWSTR  profile,
PDWORD  size 
)

Definition at line 615 of file profile.c.

616 {
617  static const WCHAR rgbprofilefile[] =
618  { '\\','s','r','g','b',' ','c','o','l','o','r',' ',
619  's','p','a','c','e',' ','p','r','o','f','i','l','e','.','i','c','m',0 };
620  WCHAR rgbprofile[MAX_PATH];
621  DWORD len = sizeof(rgbprofile);
622 
623  TRACE( "( 0x%08x, %p, %p )\n", id, profile, size );
624 
625  if (machine)
626  {
628  return FALSE;
629  }
630 
631  if (!size)
632  {
634  return FALSE;
635  }
636 
637  if (!profile)
638  {
640  return FALSE;
641  }
642 
643  GetColorDirectoryW( machine, rgbprofile, &len );
644 
645  switch (id)
646  {
647  case LCS_sRGB:
648  case LCS_WINDOWS_COLOR_SPACE: /* FIXME */
649  lstrcatW( rgbprofile, rgbprofilefile );
650  len = lstrlenW( rgbprofile ) * sizeof(WCHAR);
651 
652  if (*size < len)
653  {
654  *size = len;
656  return FALSE;
657  }
658 
659  lstrcpyW( profile, rgbprofile );
660  break;
661 
662  default:
664  return FALSE;
665  }
666  return TRUE;
667 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define TRUE
Definition: types.h:120
#define lstrlenW
Definition: compat.h:415
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL WINAPI GetColorDirectoryW(PCWSTR machine, PWSTR buffer, PDWORD size)
Definition: profile.c:287
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:417
static const char machine[]
Definition: profile.c:104
GLenum GLsizei len
Definition: glext.h:6722
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define lstrcpyW
Definition: compat.h:414
#define LCS_sRGB
Definition: wingdi.h:1104
#define ERROR_NOT_SUPPORTED
Definition: compat.h:90
#define profile
Definition: kernel32.h:12
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
#define LCS_WINDOWS_COLOR_SPACE
Definition: wingdi.h:1105
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10

Referenced by GetStandardColorSpaceProfileA(), and init_function_ptrs().

◆ header_from_file()

static BOOL header_from_file ( LPCWSTR  file,
PPROFILEHEADER  header 
)
static

Definition at line 669 of file profile.c.

670 {
671  static const WCHAR slash[] = {'\\',0};
672  BOOL ret;
675  DWORD size = sizeof(path);
676  HANDLE handle;
677 
679  if (!ret)
680  {
681  WARN( "Can't retrieve color directory\n" );
682  return FALSE;
683  }
684  if (size + sizeof(slash) + sizeof(WCHAR) * lstrlenW( file ) > sizeof(path))
685  {
686  WARN( "Filename too long\n" );
687  return FALSE;
688  }
689 
690  lstrcatW( path, slash );
691  lstrcatW( path, file );
692 
693  profile.dwType = PROFILE_FILENAME;
694  profile.pProfileData = path;
695  profile.cbDataSize = lstrlenW( path ) + 1;
696 
698  if (!handle)
699  {
700  WARN( "Can't open color profile\n" );
701  return FALSE;
702  }
703 
705  if (!ret)
706  WARN( "Can't retrieve color profile header\n" );
707 
709  return ret;
710 }
#define PROFILE_READ
Definition: icm.h:420
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
GLsizei const GLchar ** path
Definition: glext.h:7234
#define WARN(fmt,...)
Definition: debug.h:111
BOOL WINAPI GetColorProfileHeader(HPROFILE handle, PPROFILEHEADER header)
Definition: profile.c:484
HPROFILE WINAPI OpenColorProfileW(PPROFILE profile, DWORD access, DWORD sharing, DWORD creation)
Definition: profile.c:1396
#define PROFILE_FILENAME
Definition: icm.h:417
#define lstrlenW
Definition: compat.h:415
#define FILE_SHARE_READ
Definition: compat.h:125
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
#define OPEN_EXISTING
Definition: compat.h:434
GLsizeiptr size
Definition: glext.h:5919
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL WINAPI GetColorDirectoryW(PCWSTR machine, PWSTR buffer, PDWORD size)
Definition: profile.c:287
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
#define profile
Definition: kernel32.h:12
BOOL WINAPI CloseColorProfile(HPROFILE profile)
Definition: profile.c:1523
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
Definition: fci.c:126

Referenced by EnumColorProfilesA(), and EnumColorProfilesW().

◆ InstallColorProfileA()

BOOL WINAPI InstallColorProfileA ( PCSTR  machine,
PCSTR  profile 
)

Definition at line 1074 of file profile.c.

1075 {
1076  UINT len;
1077  LPWSTR profileW;
1078  BOOL ret = FALSE;
1079 
1080  TRACE( "( %s )\n", debugstr_a(profile) );
1081 
1082  if (machine || !profile) return FALSE;
1083 
1084  len = MultiByteToWideChar( CP_ACP, 0, profile, -1, NULL, 0 );
1085  profileW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
1086 
1087  if (profileW)
1088  {
1089  MultiByteToWideChar( CP_ACP, 0, profile, -1, profileW, len );
1090 
1091  ret = InstallColorProfileW( NULL, profileW );
1092  HeapFree( GetProcessHeap(), 0, profileW );
1093  }
1094  return ret;
1095 }
#define CP_ACP
Definition: compat.h:99
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL WINAPI InstallColorProfileW(PCWSTR machine, PCWSTR profile)
Definition: profile.c:1111
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
int ret
static const char machine[]
Definition: profile.c:104
GLenum GLsizei len
Definition: glext.h:6722
unsigned int UINT
Definition: ndis.h:50
#define MultiByteToWideChar
Definition: compat.h:100
#define profile
Definition: kernel32.h:12
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by init_function_ptrs().

◆ InstallColorProfileW()

BOOL WINAPI InstallColorProfileW ( PCWSTR  machine,
PCWSTR  profile 
)

Definition at line 1111 of file profile.c.

1112 {
1114  DWORD size = sizeof(dest);
1115  static const WCHAR slash[] = { '\\', 0 };
1116 
1117  TRACE( "( %s )\n", debugstr_w(profile) );
1118 
1119  if (machine || !profile) return FALSE;
1120 
1121  if (!GetColorDirectoryW( machine, dest, &size )) return FALSE;
1122 
1123  basename( profile, base );
1124 
1125  lstrcatW( dest, slash );
1126  lstrcatW( dest, base );
1127 
1128  /* Is source equal to destination? */
1129  if (!lstrcmpW( profile, dest )) return TRUE;
1130 
1131  return CopyFileW( profile, dest, TRUE );
1132 }
#define TRUE
Definition: types.h:120
static void basename(LPCWSTR path, LPWSTR name)
Definition: profile.c:38
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
Definition: copy.c:439
BOOL WINAPI GetColorDirectoryW(PCWSTR machine, PWSTR buffer, PDWORD size)
Definition: profile.c:287
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
static const char machine[]
Definition: profile.c:104
#define profile
Definition: kernel32.h:12
static char * dest
Definition: rtl.c:135
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274

Referenced by init_function_ptrs(), and InstallColorProfileA().

◆ IsColorProfileTagPresent()

BOOL WINAPI IsColorProfileTagPresent ( HPROFILE  handle,
TAGTYPE  type,
PBOOL  present 
)

Definition at line 1149 of file profile.c.

1150 {
1151  BOOL ret = FALSE;
1152 #ifdef HAVE_LCMS2
1153  struct profile *profile = grab_profile( handle );
1154 
1155  TRACE( "( %p, 0x%08x, %p )\n", handle, type, present );
1156 
1157  if (!profile) return FALSE;
1158 
1159  if (!present)
1160  {
1161  release_profile( profile );
1162  return FALSE;
1163  }
1164  *present = (cmsIsTag( profile->cmsprofile, type ) != 0);
1165  release_profile( profile );
1166  ret = TRUE;
1167 
1168 #endif /* HAVE_LCMS2 */
1169  return ret;
1170 }
#define TRUE
Definition: types.h:120
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
int ret
#define profile
Definition: kernel32.h:12

Referenced by init_function_ptrs().

◆ IsColorProfileValid()

BOOL WINAPI IsColorProfileValid ( HPROFILE  handle,
PBOOL  valid 
)

Definition at line 1186 of file profile.c.

1187 {
1188  BOOL ret = FALSE;
1189 #ifdef HAVE_LCMS2
1190  struct profile *profile = grab_profile( handle );
1191 
1192  TRACE( "( %p, %p )\n", handle, valid );
1193 
1194  if (!profile) return FALSE;
1195 
1196  if (!valid)
1197  {
1198  release_profile( profile );
1199  return FALSE;
1200  }
1201  if (profile->data) ret = *valid = TRUE;
1202  release_profile( profile );
1203 
1204 #endif /* HAVE_LCMS2 */
1205  return ret;
1206 }
#define TRUE
Definition: types.h:120
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
int ret
#define profile
Definition: kernel32.h:12

◆ match_profile()

static BOOL match_profile ( PENUMTYPEW  rec,
PPROFILEHEADER  hdr 
)
static

Definition at line 712 of file profile.c.

713 {
714  if (rec->dwFields & ET_DEVICENAME)
715  {
716  FIXME( "ET_DEVICENAME: %s\n", debugstr_w(rec->pDeviceName) );
717  }
718  if (rec->dwFields & ET_MEDIATYPE)
719  {
720  FIXME( "ET_MEDIATYPE: 0x%08x\n", rec->dwMediaType );
721  }
722  if (rec->dwFields & ET_DITHERMODE)
723  {
724  FIXME( "ET_DITHERMODE: 0x%08x\n", rec->dwDitheringMode );
725  }
726  if (rec->dwFields & ET_RESOLUTION)
727  {
728  FIXME( "ET_RESOLUTION: 0x%08x, 0x%08x\n",
729  rec->dwResolution[0], rec->dwResolution[1] );
730  }
731  if (rec->dwFields & ET_DEVICECLASS)
732  {
733  FIXME( "ET_DEVICECLASS: %s\n", dbgstr_tag(rec->dwMediaType) );
734  }
735  if (rec->dwFields & ET_CMMTYPE)
736  {
737  TRACE( "ET_CMMTYPE: %s\n", dbgstr_tag(rec->dwCMMType) );
738  if (rec->dwCMMType != hdr->phCMMType) return FALSE;
739  }
740  if (rec->dwFields & ET_CLASS)
741  {
742  TRACE( "ET_CLASS: %s\n", dbgstr_tag(rec->dwClass) );
743  if (rec->dwClass != hdr->phClass) return FALSE;
744  }
745  if (rec->dwFields & ET_DATACOLORSPACE)
746  {
747  TRACE( "ET_DATACOLORSPACE: %s\n", dbgstr_tag(rec->dwDataColorSpace) );
748  if (rec->dwDataColorSpace != hdr->phDataColorSpace) return FALSE;
749  }
750  if (rec->dwFields & ET_CONNECTIONSPACE)
751  {
752  TRACE( "ET_CONNECTIONSPACE: %s\n", dbgstr_tag(rec->dwConnectionSpace) );
753  if (rec->dwConnectionSpace != hdr->phConnectionSpace) return FALSE;
754  }
755  if (rec->dwFields & ET_SIGNATURE)
756  {
757  TRACE( "ET_SIGNATURE: %s\n", dbgstr_tag(rec->dwSignature) );
758  if (rec->dwSignature != hdr->phSignature) return FALSE;
759  }
760  if (rec->dwFields & ET_PLATFORM)
761  {
762  TRACE( "ET_PLATFORM: %s\n", dbgstr_tag(rec->dwPlatform) );
763  if (rec->dwPlatform != hdr->phPlatform) return FALSE;
764  }
765  if (rec->dwFields & ET_PROFILEFLAGS)
766  {
767  TRACE( "ET_PROFILEFLAGS: 0x%08x\n", rec->dwProfileFlags );
768  if (rec->dwProfileFlags != hdr->phProfileFlags) return FALSE;
769  }
770  if (rec->dwFields & ET_MANUFACTURER)
771  {
772  TRACE( "ET_MANUFACTURER: %s\n", dbgstr_tag(rec->dwManufacturer) );
773  if (rec->dwManufacturer != hdr->phManufacturer) return FALSE;
774  }
775  if (rec->dwFields & ET_MODEL)
776  {
777  TRACE( "ET_MODEL: %s\n", dbgstr_tag(rec->dwModel) );
778  if (rec->dwModel != hdr->phModel) return FALSE;
779  }
780  if (rec->dwFields & ET_ATTRIBUTES)
781  {
782  TRACE( "ET_ATTRIBUTES: 0x%08x, 0x%08x\n",
783  rec->dwAttributes[0], rec->dwAttributes[1] );
784  if (rec->dwAttributes[0] != hdr->phAttributes[0] ||
785  rec->dwAttributes[1] != hdr->phAttributes[1]) return FALSE;
786  }
787  if (rec->dwFields & ET_RENDERINGINTENT)
788  {
789  TRACE( "ET_RENDERINGINTENT: 0x%08x\n", rec->dwRenderingIntent );
790  if (rec->dwRenderingIntent != hdr->phRenderingIntent) return FALSE;
791  }
792  if (rec->dwFields & ET_CREATOR)
793  {
794  TRACE( "ET_CREATOR: %s\n", dbgstr_tag(rec->dwCreator) );
795  if (rec->dwCreator != hdr->phCreator) return FALSE;
796  }
797  return TRUE;
798 }
#define ET_RENDERINGINTENT
Definition: icm.h:285
DWORD dwConnectionSpace
Definition: icm.h:259
DWORD dwCreator
Definition: icm.h:267
#define TRUE
Definition: types.h:120
#define ET_MEDIATYPE
Definition: icm.h:272
char hdr[14]
Definition: iptest.cpp:33
DWORD dwMediaType
Definition: icm.h:253
PCWSTR pDeviceName
Definition: icm.h:252
#define ET_CMMTYPE
Definition: icm.h:275
DWORD dwResolution[2]
Definition: icm.h:255
DWORD dwPlatform
Definition: icm.h:261
DWORD dwSignature
Definition: icm.h:260
#define ET_PROFILEFLAGS
Definition: icm.h:281
#define ET_ATTRIBUTES
Definition: icm.h:284
DWORD dwManufacturer
Definition: icm.h:263
#define ET_DEVICENAME
Definition: icm.h:271
#define ET_CLASS
Definition: icm.h:276
#define ET_DITHERMODE
Definition: icm.h:273
#define ET_CREATOR
Definition: icm.h:286
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
DWORD dwFields
Definition: icm.h:251
#define ET_DATACOLORSPACE
Definition: icm.h:277
DWORD dwDitheringMode
Definition: icm.h:254
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwAttributes[2]
Definition: icm.h:265
#define ET_RESOLUTION
Definition: icm.h:274
#define ET_DEVICECLASS
Definition: icm.h:287
#define ET_MODEL
Definition: icm.h:283
#define ET_MANUFACTURER
Definition: icm.h:282
DWORD dwDataColorSpace
Definition: icm.h:258
#define ET_CONNECTIONSPACE
Definition: icm.h:278
const char * dbgstr_tag(DWORD tag)
Definition: profile.c:58
DWORD dwRenderingIntent
Definition: icm.h:266
#define ET_PLATFORM
Definition: icm.h:280
DWORD dwModel
Definition: icm.h:264
DWORD dwProfileFlags
Definition: icm.h:262
#define ET_SIGNATURE
Definition: icm.h:279
DWORD dwClass
Definition: icm.h:257
DWORD dwCMMType
Definition: icm.h:256

Referenced by EnumColorProfilesA(), and EnumColorProfilesW().

◆ OpenColorProfileA()

HPROFILE WINAPI OpenColorProfileA ( PPROFILE  profile,
DWORD  access,
DWORD  sharing,
DWORD  creation 
)

Definition at line 1355 of file profile.c.

1356 {
1357  HPROFILE handle = NULL;
1358  PROFILE profileW;
1359 
1360  TRACE( "( %p, 0x%08x, 0x%08x, 0x%08x )\n", profile, access, sharing, creation );
1361 
1362  if (!profile || !profile->pProfileData) return NULL;
1363 
1364  /* No AW conversion needed for memory based profiles */
1365  if (profile->dwType & PROFILE_MEMBUFFER)
1366  return OpenColorProfileW( profile, access, sharing, creation );
1367 
1368  if (!profile_AtoW( profile, &profileW )) return FALSE;
1369  handle = OpenColorProfileW( &profileW, access, sharing, creation );
1370  HeapFree( GetProcessHeap(), 0, profileW.pProfileData );
1371  return handle;
1372 }
static ULONG POBJECT_ATTRIBUTES PIO_STATUS_BLOCK ULONG sharing
Definition: pipe.c:68
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
HPROFILE WINAPI OpenColorProfileW(PPROFILE profile, DWORD access, DWORD sharing, DWORD creation)
Definition: profile.c:1396
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
#define PROFILE_MEMBUFFER
Definition: icm.h:418
static BOOL profile_AtoW(const PROFILE *in, PROFILE *out)
Definition: profile.c:1338
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
#define profile
Definition: kernel32.h:12
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by init_function_ptrs().

◆ OpenColorProfileW()

HPROFILE WINAPI OpenColorProfileW ( PPROFILE  profile,
DWORD  access,
DWORD  sharing,
DWORD  creation 
)

Definition at line 1396 of file profile.c.

1397 {
1398 #ifdef HAVE_LCMS2
1399  cmsHPROFILE cmsprofile = NULL;
1400  char *data = NULL;
1402  DWORD size;
1403 
1404  TRACE( "( %p, 0x%08x, 0x%08x, 0x%08x )\n", profile, access, sharing, creation );
1405 
1406  if (!profile || !profile->pProfileData) return NULL;
1407 
1408  if (profile->dwType == PROFILE_MEMBUFFER)
1409  {
1410  /* FIXME: access flags not implemented for memory based profiles */
1411 
1412  if (!(data = HeapAlloc( GetProcessHeap(), 0, profile->cbDataSize ))) return NULL;
1413  memcpy( data, profile->pProfileData, profile->cbDataSize );
1414 
1415  if (!(cmsprofile = cmsOpenProfileFromMem( data, profile->cbDataSize )))
1416  {
1417  HeapFree( GetProcessHeap(), 0, data );
1418  return FALSE;
1419  }
1420  size = profile->cbDataSize;
1421  }
1422  else if (profile->dwType == PROFILE_FILENAME)
1423  {
1424  DWORD read, flags = 0;
1425 
1426  TRACE( "profile file: %s\n", debugstr_w( profile->pProfileData ) );
1427 
1430 
1431  if (!flags) return NULL;
1433 
1434  if (!PathIsRelativeW( profile->pProfileData ))
1435  handle = CreateFileW( profile->pProfileData, flags, sharing, NULL, creation, 0, NULL );
1436  else
1437  {
1438  WCHAR *path;
1439 
1441  {
1442  size += (strlenW( profile->pProfileData ) + 2) * sizeof(WCHAR);
1443  if (!(path = HeapAlloc( GetProcessHeap(), 0, size ))) return NULL;
1446  strcatW( path, profile->pProfileData );
1447  }
1448  else return NULL;
1449  handle = CreateFileW( path, flags, sharing, NULL, creation, 0, NULL );
1450  HeapFree( GetProcessHeap(), 0, path );
1451  }
1453  {
1454  WARN( "Unable to open color profile %u\n", GetLastError() );
1455  return NULL;
1456  }
1457  if ((size = GetFileSize( handle, NULL )) == INVALID_FILE_SIZE)
1458  {
1459  ERR( "Unable to retrieve size of color profile\n" );
1460  CloseHandle( handle );
1461  return NULL;
1462  }
1463  if (!(data = HeapAlloc( GetProcessHeap(), 0, size )))
1464  {
1465  ERR( "Unable to allocate memory for color profile\n" );
1466  CloseHandle( handle );
1467  return NULL;
1468  }
1469  if (!ReadFile( handle, data, size, &read, NULL ) || read != size)
1470  {
1471  ERR( "Unable to read color profile\n" );
1472 
1473  CloseHandle( handle );
1474  HeapFree( GetProcessHeap(), 0, data );
1475  return NULL;
1476  }
1477  if (!(cmsprofile = cmsOpenProfileFromMem( data, size )))
1478  {
1479  CloseHandle( handle );
1480  HeapFree( GetProcessHeap(), 0, data );
1481  return NULL;
1482  }
1483  }
1484  else
1485  {
1486  ERR( "Invalid profile type %u\n", profile->dwType );
1487  return NULL;
1488  }
1489 
1490  if (cmsprofile)
1491  {
1492  struct profile profile;
1493  HPROFILE hprof;
1494 
1495  profile.file = handle;
1496  profile.access = access;
1497  profile.data = data;
1498  profile.size = size;
1499  profile.cmsprofile = cmsprofile;
1500 
1501  if ((hprof = create_profile( &profile ))) return hprof;
1502  HeapFree( GetProcessHeap(), 0, data );
1503  cmsCloseProfile( cmsprofile );
1504  }
1505  CloseHandle( handle );
1506 
1507 #endif /* HAVE_LCMS2 */
1508  return NULL;
1509 }
#define PROFILE_READ
Definition: icm.h:420
static ULONG POBJECT_ATTRIBUTES PIO_STATUS_BLOCK ULONG sharing
Definition: pipe.c:68
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
Definition: path.c:1558
#define CloseHandle
Definition: compat.h:406
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
GLsizei const GLchar ** path
Definition: glext.h:7234
#define WARN(fmt,...)
Definition: debug.h:111
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define PROFILE_FILENAME
Definition: icm.h:417
#define INVALID_FILE_SIZE
Definition: winbase.h:529
#define FILE_SHARE_READ
Definition: compat.h:125
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
Definition: path.c:289
#define GENERIC_WRITE
Definition: nt_native.h:90
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define PROFILE_MEMBUFFER
Definition: icm.h:418
BOOL WINAPI GetColorDirectoryW(PCWSTR machine, PWSTR buffer, PDWORD size)
Definition: profile.c:287
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:481
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLbitfield flags
Definition: glext.h:7161
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define GENERIC_READ
Definition: compat.h:124
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define ERR(fmt,...)
Definition: debug.h:109
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:242
#define PROFILE_READWRITE
Definition: icm.h:421
#define CreateFileW
Definition: compat.h:408
#define profile
Definition: kernel32.h:12
BOOL WINAPI ReadFile(IN HANDLE hFile, IN LPVOID lpBuffer, IN DWORD nNumberOfBytesToRead, OUT LPDWORD lpNumberOfBytesRead OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:123
#define HeapFree(x, y, z)
Definition: compat.h:402
_CRTIMP int __cdecl read(_In_ int _FileHandle, _Out_writes_bytes_(_MaxCharCount) void *_DstBuf, _In_ unsigned int _MaxCharCount)

Referenced by header_from_file(), init_function_ptrs(), OpenColorProfileA(), set_profile_device_key(), and WcsOpenColorProfileW().

◆ profile_AtoW()

static BOOL profile_AtoW ( const PROFILE in,
PROFILE out 
)
static

Definition at line 1338 of file profile.c.

1339 {
1340  int len;
1341  if (!in->pProfileData) return FALSE;
1342  len = MultiByteToWideChar( CP_ACP, 0, in->pProfileData, -1, NULL, 0 );
1343  if (!(out->pProfileData = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return FALSE;
1344  out->cbDataSize = len * sizeof(WCHAR);
1345  MultiByteToWideChar( CP_ACP, 0, in->pProfileData, -1, out->pProfileData, len );
1346  out->dwType = in->dwType;
1347  return TRUE;
1348 }
#define TRUE
Definition: types.h:120
#define CP_ACP
Definition: compat.h:99
smooth NULL
Definition: ftsmooth.c:416
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
static FILE * out
Definition: regtests2xml.c:44
GLenum GLsizei len
Definition: glext.h:6722
GLuint in
Definition: glext.h:9616
#define MultiByteToWideChar
Definition: compat.h:100

Referenced by OpenColorProfileA(), and WcsOpenColorProfileA().

◆ set_profile_device_key()

static BOOL set_profile_device_key ( PCWSTR  file,
const BYTE value,
DWORD  size 
)
static

Definition at line 105 of file profile.c.

106 {
107  static const WCHAR fmtW[] = {'%','c','%','c','%','c','%','c',0};
108  static const WCHAR icmW[] = {'S','o','f','t','w','a','r','e','\\',
109  'M','i','c','r','o','s','o','f','t','\\',
110  'W','i','n','d','o','w','s',' ','N','T','\\',
111  'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
112  'I','C','M',0};
116  HKEY icm_key, class_key;
117  WCHAR basenameW[MAX_PATH], classW[5];
118 
119  profile.dwType = PROFILE_FILENAME;
120  profile.pProfileData = (PVOID)file;
121  profile.cbDataSize = (lstrlenW( file ) + 1) * sizeof(WCHAR);
122 
123  /* FIXME is the profile installed? */
125  {
127  return FALSE;
128  }
130  {
133  return FALSE;
134  }
135  RegCreateKeyExW( HKEY_LOCAL_MACHINE, icmW, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &icm_key, NULL );
136 
137  basename( file, basenameW );
138  sprintfW( classW, fmtW, (header.phClass >> 24) & 0xff, (header.phClass >> 16) & 0xff,
139  (header.phClass >> 8) & 0xff, header.phClass & 0xff );
140 
141  RegCreateKeyExW( icm_key, classW, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &class_key, NULL );
142  if (value) RegSetValueExW( class_key, basenameW, 0, REG_BINARY, value, size );
143  else RegDeleteValueW( class_key, basenameW );
144 
145  RegCloseKey( class_key );
146  RegCloseKey( icm_key );
148  return TRUE;
149 }
static const WCHAR classW[]
Definition: lex.c:40
#define PROFILE_READ
Definition: icm.h:420
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
#define TRUE
Definition: types.h:120
#define REG_BINARY
Definition: nt_native.h:1496
static void basename(LPCWSTR path, LPWSTR name)
Definition: profile.c:38
BOOL WINAPI GetColorProfileHeader(HPROFILE handle, PPROFILEHEADER header)
Definition: profile.c:484
#define ERROR_INVALID_PROFILE
Definition: winerror.h:1186
HPROFILE WINAPI OpenColorProfileW(PPROFILE profile, DWORD access, DWORD sharing, DWORD creation)
Definition: profile.c:1396
#define PROFILE_FILENAME
Definition: icm.h:417
#define lstrlenW
Definition: compat.h:415
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1091
static PVOID
Definition: profile.c:43
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
smooth NULL
Definition: ftsmooth.c:416
#define OPEN_EXISTING
Definition: compat.h:434
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
GLsizeiptr size
Definition: glext.h:5919
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
#define SetLastError(x)
Definition: compat.h:417
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
Definition: reg.c:2355
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
#define sprintfW
Definition: unicode.h:58
#define profile
Definition: kernel32.h:12
BOOL WINAPI CloseColorProfile(HPROFILE profile)
Definition: profile.c:1523
struct CFHEADER header
Definition: fdi.c:101
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
Definition: fci.c:126

Referenced by AssociateColorProfileWithDeviceW(), and DisassociateColorProfileFromDeviceW().

◆ SetColorProfileElement()

BOOL WINAPI SetColorProfileElement ( HPROFILE  handle,
TAGTYPE  type,
DWORD  offset,
PDWORD  size,
PVOID  buffer 
)

Definition at line 1225 of file profile.c.

1227 {
1228  BOOL ret = FALSE;
1229 #ifdef HAVE_LCMS2
1230  struct profile *profile = grab_profile( handle );
1231 
1232  TRACE( "( %p, 0x%08x, %d, %p, %p )\n", handle, type, offset, size, buffer );
1233 
1234  if (!profile) return FALSE;
1235 
1236  if (!size || !buffer || !(profile->access & PROFILE_READWRITE))
1237  {
1238  release_profile( profile );
1239  return FALSE;
1240  }
1241  ret = set_tag_data( profile, type, offset, buffer, size );
1242  release_profile( profile );
1243 #endif /* HAVE_LCMS2 */
1244  return ret;
1245 }
GLintptr offset
Definition: glext.h:5920
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
int ret
#define PROFILE_READWRITE
Definition: icm.h:421
#define profile
Definition: kernel32.h:12

Referenced by init_function_ptrs().

◆ SetColorProfileHeader()

BOOL WINAPI SetColorProfileHeader ( HPROFILE  handle,
PPROFILEHEADER  header 
)

Definition at line 1260 of file profile.c.

1261 {
1262 #ifdef HAVE_LCMS2
1263  struct profile *profile = grab_profile( handle );
1264 
1265  TRACE( "( %p, %p )\n", handle, header );
1266 
1267  if (!profile) return FALSE;
1268 
1269  if (!header || !(profile->access & PROFILE_READWRITE))
1270  {
1271  release_profile( profile );
1272  return FALSE;
1273  }
1274  set_profile_header( profile, header );
1275  release_profile( profile );
1276  return TRUE;
1277 
1278 #else
1279  return FALSE;
1280 #endif /* HAVE_LCMS2 */
1281 }
#define TRUE
Definition: types.h:120
#define TRACE(s)
Definition: solgame.cpp:4
#define PROFILE_READWRITE
Definition: icm.h:421
#define profile
Definition: kernel32.h:12

Referenced by init_function_ptrs().

◆ strdupW()

static LPWSTR strdupW ( LPCSTR  str)
inlinestatic

Definition at line 46 of file profile.c.

47 {
48  LPWSTR ret = NULL;
49  if (str)
50  {
51  DWORD len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
52  if ((ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
53  MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len );
54  }
55  return ret;
56 }
#define CP_ACP
Definition: compat.h:99
const WCHAR * str
smooth NULL
Definition: ftsmooth.c:416
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
GLenum GLsizei len
Definition: glext.h:6722
#define MultiByteToWideChar
Definition: compat.h:100
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by EnumColorProfilesA().

◆ UninstallColorProfileA()

BOOL WINAPI UninstallColorProfileA ( PCSTR  machine,
PCSTR  profile,
BOOL  delete 
)

Definition at line 1288 of file profile.c.

1289 {
1290  UINT len;
1291  LPWSTR profileW;
1292  BOOL ret = FALSE;
1293 
1294  TRACE( "( %s, %x )\n", debugstr_a(profile), delete );
1295 
1296  if (machine || !profile) return FALSE;
1297 
1298  len = MultiByteToWideChar( CP_ACP, 0, profile, -1, NULL, 0 );
1299  profileW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
1300 
1301  if (profileW)
1302  {
1303  MultiByteToWideChar( CP_ACP, 0, profile, -1, profileW, len );
1304 
1305  ret = UninstallColorProfileW( NULL, profileW , delete );
1306 
1307  HeapFree( GetProcessHeap(), 0, profileW );
1308  }
1309  return ret;
1310 }
#define CP_ACP
Definition: compat.h:99
BOOL WINAPI UninstallColorProfileW(PCWSTR machine, PCWSTR profile, BOOL delete)
Definition: profile.c:1327
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
int ret
static const char machine[]
Definition: profile.c:104
GLenum GLsizei len
Definition: glext.h:6722
unsigned int UINT
Definition: ndis.h:50
#define MultiByteToWideChar
Definition: compat.h:100
#define profile
Definition: kernel32.h:12
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:402

Referenced by init_function_ptrs().

◆ UninstallColorProfileW()

BOOL WINAPI UninstallColorProfileW ( PCWSTR  machine,
PCWSTR  profile,
BOOL  delete 
)

Definition at line 1327 of file profile.c.

1328 {
1329  TRACE( "( %s, %x )\n", debugstr_w(profile), delete );
1330 
1331  if (machine || !profile) return FALSE;
1332 
1333  if (delete) return DeleteFileW( profile );
1334 
1335  return TRUE;
1336 }
#define TRUE
Definition: types.h:120
#define debugstr_w
Definition: kernel32.h:32
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
#define TRACE(s)
Definition: solgame.cpp:4
static const char machine[]
Definition: profile.c:104
#define profile
Definition: kernel32.h:12

Referenced by init_function_ptrs(), and UninstallColorProfileA().

◆ WcsEnumColorProfilesSize()

BOOL WINAPI WcsEnumColorProfilesSize ( WCS_PROFILE_MANAGEMENT_SCOPE  scope,
ENUMTYPEW record,
DWORD size 
)

Definition at line 1548 of file profile.c.

1549 {
1550  FIXME( "%d %p %p\n", scope, record, size );
1552  return FALSE;
1553 }
#define FIXME(fmt,...)
Definition: debug.h:110
GLsizeiptr size
Definition: glext.h:5919
#define SetLastError(x)
Definition: compat.h:417
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:92

◆ WcsGetUsePerUserProfiles()

BOOL WINAPI WcsGetUsePerUserProfiles ( const WCHAR name,
DWORD  class,
BOOL use_per_user_profile 
)

Definition at line 1538 of file profile.c.

1539 {
1540  FIXME( "%s %s %p\n", debugstr_w(name), dbgstr_tag(class), use_per_user_profile );
1542  return FALSE;
1543 }
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
#define SetLastError(x)
Definition: compat.h:417
const char * dbgstr_tag(DWORD tag)
Definition: profile.c:58
Definition: name.c:38
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:92

◆ WcsOpenColorProfileA()

HPROFILE WINAPI WcsOpenColorProfileA ( PROFILE cdm,
PROFILE camp,
PROFILE gmmp,
DWORD  access,
DWORD  sharing,
DWORD  creation,
DWORD  flags 
)

Definition at line 1558 of file profile.c.

1560 {
1561  PROFILE cdmW, campW = {0}, gmmpW = {0};
1562  HPROFILE ret = NULL;
1563 
1564  TRACE( "%p, %p, %p, %08x, %08x, %08x, %08x\n", cdm, camp, gmmp, access, sharing, creation, flags );
1565 
1566  if (!cdm || !profile_AtoW( cdm, &cdmW )) return NULL;
1567  if (camp && !profile_AtoW( camp, &campW )) goto done;
1568  if (gmmp && !profile_AtoW( gmmp, &gmmpW )) goto done;
1569 
1570  ret = WcsOpenColorProfileW( &cdmW, &campW, &gmmpW, access, sharing, creation, flags );
1571 
1572 done:
1573  HeapFree( GetProcessHeap(), 0, cdmW.pProfileData );
1574  HeapFree( GetProcessHeap(), 0, campW.pProfileData );
1575  HeapFree( GetProcessHeap(), 0, gmmpW.pProfileData );
1576  return ret;
1577 }
static ULONG POBJECT_ATTRIBUTES PIO_STATUS_BLOCK ULONG sharing
Definition: pipe.c:68
HPROFILE WINAPI WcsOpenColorProfileW(PROFILE *cdm, PROFILE *camp, PROFILE *gmmp, DWORD access, DWORD sharing, DWORD creation, DWORD flags)
Definition: profile.c:1582
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
GLbitfield flags
Definition: glext.h:7161
int ret
static BOOL profile_AtoW(const PROFILE *in, PROFILE *out)
Definition: profile.c:1338
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
#define HeapFree(x, y, z)
Definition: compat.h:402

◆ WcsOpenColorProfileW()

HPROFILE WINAPI WcsOpenColorProfileW ( PROFILE cdm,
PROFILE camp,
PROFILE gmmp,
DWORD  access,
DWORD  sharing,
DWORD  creation,
DWORD  flags 
)

Definition at line 1582 of file profile.c.

1584 {
1585  TRACE( "%p, %p, %p, %08x, %08x, %08x, %08x\n", cdm, camp, gmmp, access, sharing, creation, flags );
1586  FIXME("no support for WCS profiles\n" );
1587 
1588  return OpenColorProfileW( cdm, access, sharing, creation );
1589 }
static ULONG POBJECT_ATTRIBUTES PIO_STATUS_BLOCK ULONG sharing
Definition: pipe.c:68
HPROFILE WINAPI OpenColorProfileW(PPROFILE profile, DWORD access, DWORD sharing, DWORD creation)
Definition: profile.c:1396
#define FIXME(fmt,...)
Definition: debug.h:110
#define TRACE(s)
Definition: solgame.cpp:4
GLbitfield flags
Definition: glext.h:7161
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866

Referenced by WcsOpenColorProfileA().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( mscms  )