4 * Copyright 1998 Alexandre Julliard
10 #include "wine/unicode.h"
14 /***********************************************************************
15 * CreateMutexA (KERNEL32.166)
17 HANDLE WINAPI
CreateMutexA( SECURITY_ATTRIBUTES
*sa
, BOOL owner
, LPCSTR name
)
20 DWORD len
= name
? MultiByteToWideChar( CP_ACP
, 0, name
, strlen(name
), NULL
, 0 ) : 0;
23 SetLastError( ERROR_FILENAME_EXCED_RANGE
);
28 struct create_mutex_request
*req
= server_alloc_req( sizeof(*req
), len
* sizeof(WCHAR
) );
31 req
->inherit
= (sa
&& (sa
->nLength
>=sizeof(*sa
)) && sa
->bInheritHandle
);
32 if (len
) MultiByteToWideChar( CP_ACP
, 0, name
, strlen(name
), server_data_ptr(req
), len
);
34 server_call( REQ_CREATE_MUTEX
);
38 if (ret
== -1) ret
= 0; /* must return 0 on failure, not -1 */
43 /***********************************************************************
44 * CreateMutexW (KERNEL32.167)
46 HANDLE WINAPI
CreateMutexW( SECURITY_ATTRIBUTES
*sa
, BOOL owner
, LPCWSTR name
)
49 DWORD len
= name
? strlenW(name
) : 0;
52 SetLastError( ERROR_FILENAME_EXCED_RANGE
);
57 struct create_mutex_request
*req
= server_alloc_req( sizeof(*req
), len
* sizeof(WCHAR
) );
60 req
->inherit
= (sa
&& (sa
->nLength
>=sizeof(*sa
)) && sa
->bInheritHandle
);
61 memcpy( server_data_ptr(req
), name
, len
* sizeof(WCHAR
) );
63 server_call( REQ_CREATE_MUTEX
);
67 if (ret
== -1) ret
= 0; /* must return 0 on failure, not -1 */
72 /***********************************************************************
73 * OpenMutexA (KERNEL32.541)
75 HANDLE WINAPI
OpenMutexA( DWORD access
, BOOL inherit
, LPCSTR name
)
78 DWORD len
= name
? MultiByteToWideChar( CP_ACP
, 0, name
, strlen(name
), NULL
, 0 ) : 0;
81 SetLastError( ERROR_FILENAME_EXCED_RANGE
);
86 struct open_mutex_request
*req
= server_alloc_req( sizeof(*req
), len
* sizeof(WCHAR
) );
89 req
->inherit
= inherit
;
90 if (len
) MultiByteToWideChar( CP_ACP
, 0, name
, strlen(name
), server_data_ptr(req
), len
);
91 server_call( REQ_OPEN_MUTEX
);
95 if (ret
== -1) ret
= 0; /* must return 0 on failure, not -1 */
100 /***********************************************************************
101 * OpenMutexW (KERNEL32.542)
103 HANDLE WINAPI
OpenMutexW( DWORD access
, BOOL inherit
, LPCWSTR name
)
106 DWORD len
= name
? strlenW(name
) : 0;
109 SetLastError( ERROR_FILENAME_EXCED_RANGE
);
114 struct open_mutex_request
*req
= server_alloc_req( sizeof(*req
), len
* sizeof(WCHAR
) );
116 req
->access
= access
;
117 req
->inherit
= inherit
;
118 memcpy( server_data_ptr(req
), name
, len
* sizeof(WCHAR
) );
119 server_call( REQ_OPEN_MUTEX
);
123 if (ret
== -1) ret
= 0; /* must return 0 on failure, not -1 */
128 /***********************************************************************
129 * ReleaseMutex (KERNEL32.582)
131 BOOL WINAPI
ReleaseMutex( HANDLE handle
)
136 struct release_mutex_request
*req
= server_alloc_req( sizeof(*req
), 0 );
137 req
->handle
= handle
;
138 ret
= !server_call( REQ_RELEASE_MUTEX
);