mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00

Checking the linker compatibility with extranous `ImageLoad()` calls is possible, but unnecessary, since the modules are either already loaded or loaded shortly afterwards, so that we can get the required information directly from the module handles. And actually, doing `ImageLoad()` as well as `LoadLibrary()` leaves a tiny room for a race condition, because both functions will lookup the module in the search path, so there is no *guarantee* that both are dealing with the same module. Dropping the `ImageLoad()` calls also has the advantage to no longer face the issue reported in bug #79557. A very minor additional advantage is that we no longer have to link against Imagehlp.dll. Furthermore, there is no need to check for CRT compatibility multiple times, so we can simplify the signature of `php_win32_crt_compatible`, and at the same time clean up main.c a bit. These changes require to change the signature of the exported `php_win32_image_compatible` and `php_win32_crt_compatible` functions, which now expect a `HMODULE` and nothing, respectively, instead of the module name.
59 lines
2.2 KiB
C
59 lines
2.2 KiB
C
/*
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) The PHP Group |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 3.01 of the PHP license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available through the world-wide-web at the following url: |
|
|
| http://www.php.net/license/3_01.txt |
|
|
| If you did not receive a copy of the PHP license and are unable to |
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
| license@php.net so we can mail you a copy immediately. |
|
|
+----------------------------------------------------------------------+
|
|
| Author: |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
#ifndef PHP_WIN32_WINUTIL_H
|
|
#define PHP_WIN32_WINUTIL_H
|
|
|
|
#ifdef PHP_EXPORTS
|
|
# define PHP_WINUTIL_API __declspec(dllexport)
|
|
#else
|
|
# define PHP_WINUTIL_API __declspec(dllimport)
|
|
#endif
|
|
|
|
PHP_WINUTIL_API char *php_win32_error_to_msg(HRESULT error);
|
|
PHP_WINUTIL_API void php_win32_error_msg_free(char *msg);
|
|
|
|
#define php_win_err() php_win32_error_to_msg(GetLastError())
|
|
#define php_win_err_free(err) php_win32_error_msg_free(err)
|
|
int php_win32_check_trailing_space(const char * path, const size_t path_len);
|
|
PHP_WINUTIL_API int php_win32_get_random_bytes(unsigned char *buf, size_t size);
|
|
#ifdef PHP_EXPORTS
|
|
BOOL php_win32_init_random_bytes(void);
|
|
BOOL php_win32_shutdown_random_bytes(void);
|
|
#endif
|
|
|
|
#if !defined(ECURDIR)
|
|
# define ECURDIR EACCES
|
|
#endif /* !ECURDIR */
|
|
#if !defined(ENOSYS)
|
|
# define ENOSYS EPERM
|
|
#endif /* !ENOSYS */
|
|
|
|
PHP_WINUTIL_API int php_win32_code_to_errno(unsigned long w32Err);
|
|
|
|
#define SET_ERRNO_FROM_WIN32_CODE(err) \
|
|
do { \
|
|
int ern = php_win32_code_to_errno(err); \
|
|
SetLastError(err); \
|
|
_set_errno(ern); \
|
|
} while (0)
|
|
|
|
PHP_WINUTIL_API char *php_win32_get_username(void);
|
|
|
|
PHP_WINUTIL_API BOOL php_win32_image_compatible(HMODULE handle, char **err);
|
|
PHP_WINUTIL_API BOOL php_win32_crt_compatible(char **err);
|
|
|
|
#endif
|