summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
Diffstat (limited to 'win32')
-rw-r--r--win32/build/Makefile9
-rw-r--r--win32/build/buildconf.js2
-rw-r--r--win32/build/config.w3211
-rw-r--r--win32/build/config.w32.h.in14
-rw-r--r--win32/build/confutils.js62
-rw-r--r--win32/build/deplister.c6
-rw-r--r--win32/build/mkdist.php12
-rw-r--r--win32/build/phpize.js.in2
-rw-r--r--win32/codepage.c110
-rw-r--r--win32/codepage.h2
-rw-r--r--win32/console.c2
-rw-r--r--win32/console.h2
-rw-r--r--win32/dllmain.c2
-rw-r--r--win32/ftok.c2
-rw-r--r--win32/getrusage.c2
-rw-r--r--win32/getrusage.h2
-rw-r--r--win32/globals.c2
-rw-r--r--win32/grp.h29
-rw-r--r--win32/inet.c2
-rw-r--r--win32/inet.h2
-rw-r--r--win32/ioutil.c3
-rw-r--r--win32/ioutil.h3
-rw-r--r--win32/ipc.h2
-rw-r--r--win32/nice.c4
-rw-r--r--win32/nice.h2
-rw-r--r--win32/php_inttypes.h313
-rw-r--r--win32/php_registry.h2
-rw-r--r--win32/php_stdint.h265
-rw-r--r--win32/php_win32_globals.h2
-rw-r--r--win32/readdir.c3
-rw-r--r--win32/readdir.h2
-rw-r--r--win32/registry.c2
-rw-r--r--win32/select.c2
-rw-r--r--win32/select.h2
-rw-r--r--win32/sendmail.c35
-rw-r--r--win32/sendmail.h10
-rw-r--r--win32/signal.c51
-rw-r--r--win32/sockets.c35
-rw-r--r--win32/sockets.h3
-rw-r--r--win32/syslog.h2
-rw-r--r--win32/winutil.c66
-rw-r--r--win32/winutil.h6
42 files changed, 206 insertions, 886 deletions
diff --git a/win32/build/Makefile b/win32/build/Makefile
index 9435df5c46..a5a4259d17 100644
--- a/win32/build/Makefile
+++ b/win32/build/Makefile
@@ -1,6 +1,4 @@
# +----------------------------------------------------------------------+
-# | PHP Version 7 |
-# +----------------------------------------------------------------------+
# | Copyright (c) The PHP Group |
# +----------------------------------------------------------------------+
# | This source file is subject to version 3.01 of the PHP license, |
@@ -77,16 +75,16 @@ $(BUILD_DIR)\$(PHPDLL).def: $(PHP_DLL_DEF_SOURCES)
type $(PHP_DLL_DEF_SOURCES) > $(BUILD_DIR)\$(PHPDLL).def
Zend\zend_ini_parser.c Zend\zend_ini_parser.h: Zend\zend_ini_parser.y
- $(BISON) --output=Zend/zend_ini_parser.c -v -d -p ini_ Zend/zend_ini_parser.y
+ $(BISON) --output=Zend/zend_ini_parser.c -v -d Zend/zend_ini_parser.y
Zend\zend_language_parser.c Zend\zend_language_parser.h: Zend\zend_language_parser.y
- $(BISON) --output=Zend/zend_language_parser.c -v -d -p zend Zend/zend_language_parser.y
+ $(BISON) --output=Zend/zend_language_parser.c -v -d Zend/zend_language_parser.y
@if "$(SED)" neq "" $(SED) -i "s,^int zendparse\(.*\),ZEND_API int zendparse\1,g" Zend/zend_language_parser.c
@if "$(SED)" neq "" $(SED) -i "s,^int zendparse\(.*\),ZEND_API int zendparse\1,g" Zend/zend_language_parser.h
@if "$(SED)" neq "" $(SED) -i "s,^#ifndef YYTOKENTYPE,#include \"zend.h\"\n#ifndef YYTOKENTYPE,g" Zend/zend_language_parser.h
sapi\phpdbg\phpdbg_parser.c sapi\phpdbg\phpdbg_parser.h: sapi\phpdbg\phpdbg_parser.y
- $(BISON) --output=sapi/phpdbg/phpdbg_parser.c -v -d -p phpdbg_ sapi/phpdbg/phpdbg_parser.y
+ $(BISON) --output=sapi/phpdbg/phpdbg_parser.c -v -d sapi/phpdbg/phpdbg_parser.y
!if $(RE2C) != ""
Zend\zend_ini_scanner.c: Zend\zend_ini_scanner.l
@@ -239,6 +237,7 @@ build-devel: build-headers build-lib
@if not exist $(BUILD_DIR_DEV)\script mkdir $(BUILD_DIR_DEV)\script >nul
@if not exist $(BUILD_DIR_DEV)\build mkdir $(BUILD_DIR_DEV)\build >nul
@copy run-tests.php $(BUILD_DIR_DEV)\script\ /y >nul
+ @copy build\gen_stub.php $(BUILD_DIR_DEV)\build\ /y >nul
@copy win32\build\confutils.js $(BUILD_DIR_DEV)\script\ /y >nul
@copy win32\build\configure.tail $(BUILD_DIR_DEV)\script\ /y >nul
@copy win32\build\config.w32.phpize.in $(BUILD_DIR_DEV)\script\ /y >nul
diff --git a/win32/build/buildconf.js b/win32/build/buildconf.js
index 5a45e481fc..a758c65d40 100644
--- a/win32/build/buildconf.js
+++ b/win32/build/buildconf.js
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/build/config.w32 b/win32/build/config.w32
index fcb98704f4..a7d60812bd 100644
--- a/win32/build/config.w32
+++ b/win32/build/config.w32
@@ -231,13 +231,13 @@ ADD_SOURCES("Zend", "zend_language_parser.c zend_language_scanner.c \
zend_execute_API.c zend_highlight.c \
zend_llist.c zend_vm_opcodes.c zend_opcode.c zend_operators.c zend_ptr_stack.c \
zend_stack.c zend_variables.c zend.c zend_API.c zend_extensions.c \
- zend_hash.c zend_list.c zend_builtin_functions.c \
+ zend_hash.c zend_list.c zend_builtin_functions.c zend_attributes.c \
zend_ini.c zend_sort.c zend_multibyte.c zend_ts_hash.c \
zend_stream.c zend_iterators.c zend_interfaces.c zend_objects.c \
zend_object_handlers.c zend_objects_API.c \
zend_default_classes.c zend_execute.c zend_strtod.c zend_gc.c zend_closures.c zend_weakrefs.c \
zend_float.c zend_string.c zend_generators.c zend_virtual_cwd.c zend_ast.c \
- zend_inheritance.c zend_smart_str.c zend_cpuinfo.c");
+ zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_observer.c zend_system_id.c");
ADD_FLAG("CFLAGS_BD_ZEND", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
if (VS_TOOLSET && VCVERS >= 1914) {
@@ -249,7 +249,7 @@ if (VS_TOOLSET && VCVERS >= 1914) {
ADD_SOURCES("main", "main.c snprintf.c spprintf.c getopt.c fopen_wrappers.c \
php_scandir.c php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
- strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c network.c \
+ strlcat.c reentrancy.c php_variables.c php_ticks.c network.c \
php_open_temporary_file.c output.c internal_functions.c \
php_syslog.c");
ADD_FLAG("CFLAGS_BD_MAIN", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
@@ -290,10 +290,9 @@ if (PHP_IPV6 == "yes") {
}
if (main_network_has_ipv6) {
STDOUT.WriteLine("Enabling IPv6 support");
+ AC_DEFINE('HAVE_GAI_STRERROR', 1);
+ AC_DEFINE('HAVE_IPV6', 1);
}
-AC_DEFINE('HAVE_GETADDRINFO', main_network_has_ipv6);
-AC_DEFINE('HAVE_GAI_STRERROR', main_network_has_ipv6);
-AC_DEFINE('HAVE_IPV6', main_network_has_ipv6);
/* this allows up to 256 sockets to be select()ed in a single
* call to select(), instead of the usual 64 */
diff --git a/win32/build/config.w32.h.in b/win32/build/config.w32.h.in
index 5c093f5f86..ce4b71282e 100644
--- a/win32/build/config.w32.h.in
+++ b/win32/build/config.w32.h.in
@@ -44,7 +44,6 @@
/* its in win32/time.c */
#define HAVE_USLEEP 1
#define HAVE_NANOSLEEP 1
-#define PHP_SLEEP_NON_VOID 1
#define HAVE_GETCWD 1
#define NEED_ISBLANK 1
@@ -67,7 +66,6 @@
#define HAVE_GETLOGIN 1
#define HAVE_MEMMOVE 1
#define HAVE_REGCOMP 1
-#define HAVE_LOCALE_H 1
#define HAVE_SHUTDOWN 1
#define HAVE_STRCASECMP 1
#define HAVE_UTIME 1
@@ -119,12 +117,6 @@
#define HAVE_INET_PTON 1
#define HAVE_INET_NTOP 1
-#define HAVE_MBLEN
-
-#undef HAVE_ATOF_ACCEPTS_NAN
-#undef HAVE_ATOF_ACCEPTS_INF
-#define HAVE_HUGE_VAL_NAN 0
-
/* vs.net 2005 has a 64-bit time_t. This will likely break
* 3rdParty libs that were built with older compilers; switch
* back to 32-bit */
@@ -133,10 +125,6 @@
#endif
#define _REENTRANT 1
-#define HAVE_MBRLEN 1
-#define HAVE_MBSTATE_T 1
-
-#define HAVE_HUGE_VAL_INF 1
#define HAVE_GETRUSAGE
@@ -147,3 +135,5 @@
#ifdef __clang__
#define HAVE_FUNC_ATTRIBUTE_TARGET 1
#endif
+
+#define HAVE_GETADDRINFO 1
diff --git a/win32/build/confutils.js b/win32/build/confutils.js
index 68894fa076..bf88cdae44 100644
--- a/win32/build/confutils.js
+++ b/win32/build/confutils.js
@@ -1,8 +1,6 @@
// Utils for configure script
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -96,11 +94,11 @@ if (typeof(CWD) == "undefined") {
if (!MODE_PHPIZE) {
/* defaults; we pick up the precise versions from configure.ac */
- var PHP_VERSION = 7;
- var PHP_MINOR_VERSION = 4;
+ var PHP_VERSION = 8;
+ var PHP_MINOR_VERSION = 0;
var PHP_RELEASE_VERSION = 0;
var PHP_EXTRA_VERSION = "";
- var PHP_VERSION_STRING = "7.4.0";
+ var PHP_VERSION_STRING = "8.0.0";
}
/* Get version numbers and DEFINE as a string */
@@ -130,6 +128,17 @@ build_dirs = new Array();
extension_include_code = "";
extension_module_ptrs = "";
+(function () {
+ var wmiservice = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2");
+ var oss = wmiservice.ExecQuery("Select * from Win32_OperatingSystem");
+ var os = oss.ItemIndex(0);
+ AC_DEFINE("PHP_BUILD_SYSTEM", os.Caption + " [" + os.Version + "]", "Windows build system version");
+ var build_provider = WshShell.Environment("Process").Item("PHP_BUILD_PROVIDER");
+ if (build_provider) {
+ AC_DEFINE("PHP_BUILD_PROVIDER", build_provider);
+ }
+}());
+
if (!MODE_PHPIZE) {
get_version_numbers();
}
@@ -441,12 +450,13 @@ can be built that way. \
}
var snapshot_build_exclusions = new Array(
- 'debug', 'crt-debug', 'lzf-better-compression',
+ 'debug', 'lzf-better-compression',
'php-build', 'snapshot-template', 'ereg',
'pcre-regex', 'fastcgi', 'force-cgi-redirect',
'path-info-check', 'zts', 'ipv6', 'memory-limit',
'zend-multibyte', 'fd-setsize', 'memory-manager',
- 'pgi', 'pgo', 'all-shared', 'config-profile'
+ 'pgi', 'pgo', 'all-shared', 'config-profile',
+ 'sanitizer'
);
var force;
@@ -2018,9 +2028,6 @@ function generate_tmp_php_ini()
var directive = (extensions_enabled[i][2] ? 'zend_extension' : 'extension');
var ext_name = extensions_enabled[i][0];
- if ("gd" == ext_name) {
- ext_name = "gd2";
- }
if (!is_on_exclude_list_for_test_ini(ext_list, ext_name)) {
INI.WriteLine(directive + "=php_" + ext_name + ".dll");
@@ -2304,19 +2311,6 @@ function generate_config_h()
outfile.WriteLine("#define " + keys[i] + " " + pieces);
}
- if (VS_TOOLSET) {
- if (VCVERS >= 1800) {
- outfile.WriteLine("");
- outfile.WriteLine("#define HAVE_ACOSH 1");
- outfile.WriteLine("#define HAVE_ASINH 1");
- outfile.WriteLine("#define HAVE_ATANH 1");
- }
- if (VCVERS >= 1900) {
- outfile.WriteLine("#define HAVE_LOG1P 1");
- }
- }
-
-
outfile.Close();
}
@@ -2345,7 +2339,7 @@ function generate_phpize()
MF.WriteLine("var PHP_EXTRA_VERSION=\"" + PHP_EXTRA_VERSION + "\"");
MF.WriteLine("var PHP_VERSION_STRING=\"" + PHP_VERSION_STRING + "\"");
MF.WriteBlankLines(1);
- MF.WriteLine("/* Genereted extensions list with mode (static/shared) */");
+ MF.WriteLine("/* Generated extensions list with mode (static/shared) */");
var count = extensions_enabled.length;
for (i in extensions_enabled) {
@@ -2356,7 +2350,7 @@ function generate_phpize()
}
MF.WriteBlankLines(2);
- MF.WriteLine("/* Genereted win32/build/phpize.js.in */");
+ MF.WriteLine("/* Generated win32/build/phpize.js.in */");
MF.WriteBlankLines(1);
MF.Write(file_get_contents("win32/build/phpize.js.in"));
MF.Close();
@@ -2440,7 +2434,7 @@ function handle_analyzer_makefile_flags(fd, key, val)
{
var relevant = false;
- /* VS integrates /analyze with the bulid process,
+ /* VS integrates /analyze with the build process,
no further action is required. */
if ("no" == PHP_ANALYZER || "vs" == PHP_ANALYZER) {
return;
@@ -3106,8 +3100,8 @@ function toolset_get_compiler_name(short)
return name;
} if (version >= 1920) {
/* NOTE - VS is intentional. Due to changes in recent Visual Studio
- versioning scheme refering to the exact VC++ version is
- hardly predictable. From this version on, it refers to
+ versioning scheme referring to the exact VC++ version is
+ hardly predictable. From this version on, it refers to
Visual Studio version and implies the default toolset.
When new versions are introduced, adapt also checks in
php_win32_image_compatible(), if needed. */
@@ -3225,7 +3219,7 @@ function toolset_setup_common_cflags()
// General CFLAGS for building objects
DEFINE("CFLAGS", "/nologo $(BASE_INCLUDES) /D _WINDOWS /D WINDOWS=1 \
- /D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D _MBCS /W3 \
+ /D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D _MBCS \
/D _USE_MATH_DEFINES");
if (envCFLAGS) {
@@ -3411,13 +3405,13 @@ function toolset_setup_common_ldlags()
function toolset_setup_common_libs()
{
// urlmon.lib ole32.lib oleaut32.lib uuid.lib gdi32.lib winspool.lib comdlg32.lib
- DEFINE("LIBS", "kernel32.lib ole32.lib user32.lib advapi32.lib shell32.lib ws2_32.lib Dnsapi.lib psapi.lib bcrypt.lib imagehlp.lib");
+ DEFINE("LIBS", "kernel32.lib ole32.lib user32.lib advapi32.lib shell32.lib ws2_32.lib Dnsapi.lib psapi.lib bcrypt.lib");
}
function toolset_setup_build_mode()
{
if (PHP_DEBUG == "yes") {
- ADD_FLAG("CFLAGS", "/LDd /MDd /W3 /Od /D _DEBUG /D ZEND_DEBUG=1 " +
+ ADD_FLAG("CFLAGS", "/LDd /MDd /Od /D _DEBUG /D ZEND_DEBUG=1 " +
(X64?"/Zi":"/ZI"));
ADD_FLAG("LDFLAGS", "/debug");
// Avoid problems when linking to release libraries that use the release
@@ -3429,7 +3423,7 @@ function toolset_setup_build_mode()
ADD_FLAG("CFLAGS", "/Zi");
ADD_FLAG("LDFLAGS", "/incremental:no /debug /opt:ref,icf");
}
- ADD_FLAG("CFLAGS", "/LD /MD /W3");
+ ADD_FLAG("CFLAGS", "/LD /MD");
if (PHP_SANITIZER == "yes" && CLANG_TOOLSET) {
ADD_FLAG("CFLAGS", "/Od /D NDebug /D NDEBUG /D ZEND_WIN32_NEVER_INLINE /D ZEND_DEBUG=0");
} else {
@@ -3673,7 +3667,7 @@ function get_clang_lib_dir()
if (COMPILER_NAME_LONG.match(/clang version ([\d\.]+) \((.*)\)/)) {
ver = RegExp.$1;
} else {
- ERROR("Faled to determine clang lib path");
+ ERROR("Failed to determine clang lib path");
}
if (X64) {
@@ -3706,7 +3700,7 @@ function add_asan_opts(cflags_name, libs_name, ldflags_name)
if (COMPILER_NAME_LONG.match(/clang version ([\d\.]+) \((.*)\)/)) {
ver = RegExp.$1;
} else {
- ERROR("Faled to determine clang lib path");
+ ERROR("Failed to determine clang lib path");
}
if (!!cflags_name) {
diff --git a/win32/build/deplister.c b/win32/build/deplister.c
index b5dd059c98..1a53056219 100644
--- a/win32/build/deplister.c
+++ b/win32/build/deplister.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -24,8 +22,8 @@
#include <imagehlp.h>
BOOL CALLBACK StatusRoutine(IMAGEHLP_STATUS_REASON reason,
- PSTR image_name, PSTR dll_name,
- ULONG va, ULONG param)
+ PCSTR image_name, PCSTR dll_name,
+ ULONG_PTR va, ULONG_PTR param)
{
switch (reason) {
case BindImportModuleFailed:
diff --git a/win32/build/mkdist.php b/win32/build/mkdist.php
index 84b69970a4..8ae3926b65 100644
--- a/win32/build/mkdist.php
+++ b/win32/build/mkdist.php
@@ -284,7 +284,7 @@ Build: $build_dir
EOT
);
-/* list build-in extensions */
+/* list built-in extensions */
$exts = get_loaded_extensions();
fprintf($fp, "\r\nBuilt-in Extensions\r\n");
fwrite($fp, "===========================\r\n");
@@ -335,9 +335,13 @@ libenchant_ispell.dll
$ENCHANT_DLLS = array(
array('', 'glib-2.dll'),
array('', 'gmodule-2.dll'),
- array('lib/enchant', 'libenchant_myspell.dll'),
- array('lib/enchant', 'libenchant_ispell.dll'),
);
+if (file_exists("$php_build_dir/bin/libenchant2.dll")) {
+ $ENCHANT_DLLS[] = array('lib/enchant', 'libenchant2_hunspell.dll');
+} else {
+ $ENCHANT_DLLS[] = array('lib/enchant', 'libenchant_myspell.dll');
+ $ENCHANT_DLLS[] = array('lib/enchant', 'libenchant_ispell.dll');
+}
foreach ($ENCHANT_DLLS as $dll) {
$dest = "$dist_dir/$dll[0]";
$filename = $dll[1];
@@ -496,7 +500,7 @@ $dirs = array(
foreach ($dirs as $dir) {
copy_test_dir($dir, $test_dir);
}
-copy('run-tests.php', $test_dir . '/run-test.php');
+copy('run-tests.php', $test_dir . '/run-tests.php');
/* change this next line to true to use good-old
* hand-assembled go-pear-bundle from the snapshot template */
diff --git a/win32/build/phpize.js.in b/win32/build/phpize.js.in
index b15e29282e..40308f5fc7 100644
--- a/win32/build/phpize.js.in
+++ b/win32/build/phpize.js.in
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/codepage.c b/win32/codepage.c
index 0543a057a5..6c00c532ec 100644
--- a/win32/codepage.c
+++ b/win32/codepage.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -179,16 +177,12 @@ PW32CP wchar_t *php_win32_cp_conv_ascii_to_w(const char* in, size_t in_len, size
while (end - idx > 15) {
const __m128i block = _mm_load_si128((__m128i *)idx);
- {
- const __m128i lo = _mm_unpacklo_epi8(block, mask);
- _mm_storeu_si128((__m128i *)ret_idx, lo);
- }
+ const __m128i lo = _mm_unpacklo_epi8(block, mask);
+ _mm_storeu_si128((__m128i *)ret_idx, lo);
ret_idx += 8;
- {
- const __m128i hi = _mm_unpackhi_epi8(block, mask);
- _mm_storeu_si128((__m128i *)ret_idx, hi);
- }
+ const __m128i hi = _mm_unpackhi_epi8(block, mask);
+ _mm_storeu_si128((__m128i *)ret_idx, hi);
idx += 16;
ret_idx += 8;
@@ -561,20 +555,19 @@ PW32CP const struct php_win32_cp *php_win32_cp_cli_do_restore(DWORD id)
/* Userspace functions, see basic_functions.* for arginfo and decls. */
-/* {{{ proto bool sapi_windows_cp_set(int cp)
- * Set process codepage. */
+/* {{{ Set process codepage. */
PHP_FUNCTION(sapi_windows_cp_set)
{
zend_long id;
const struct php_win32_cp *cp;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &id) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (ZEND_LONG_UINT_OVFL(id)) {
- php_error_docref(NULL, E_WARNING, "Argument %d is out of range", id);
- RETURN_FALSE;
+ zend_argument_value_error(1, "must be between 0 and %u", UINT_MAX);
+ RETURN_THROWS();
}
if (php_win32_console_is_cli_sapi()) {
@@ -591,15 +584,14 @@ PHP_FUNCTION(sapi_windows_cp_set)
}
/* }}} */
-/* {{{ proto int sapi_windows_cp_get([string kind])
- * Get process codepage. */
+/* {{{ Get process codepage. */
PHP_FUNCTION(sapi_windows_cp_get)
{
char *kind;
size_t kind_len = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s", &kind, &kind_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (kind_len == sizeof("ansi")-1 && !strncasecmp(kind, "ansi", kind_len)) {
@@ -614,84 +606,80 @@ PHP_FUNCTION(sapi_windows_cp_get)
/* }}} */
-/* {{{ proto bool sapi_windows_cp_is_utf8(void)
- * Indicates whether the codepage is UTF-8 compatible. */
+/* {{{ Indicates whether the codepage is UTF-8 compatible. */
PHP_FUNCTION(sapi_windows_cp_is_utf8)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(php_win32_cp_use_unicode());
}
/* }}} */
-/* {{{ proto string sapi_windows_cp_conv(int|string in_codepage, int|string out_codepage, string subject)
- * Convert string from one codepage to another. */
+/* {{{ Convert string from one codepage to another. */
PHP_FUNCTION(sapi_windows_cp_conv)
{
- char *subj, *ret;
- size_t subj_len, ret_len, tmpw_len;
+ char *ret;
+ size_t ret_len, tmpw_len;
wchar_t *tmpw;
const struct php_win32_cp *in_cp, *out_cp;
- zval *z_in_cp, *z_out_cp;
+ zend_string *string_in_codepage = NULL;
+ zend_long int_in_codepage = 0;
+ zend_string *string_out_codepage = NULL;
+ zend_long int_out_codepage = 0;
+ zend_string *subject;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "zzs", &z_in_cp, &z_out_cp, &subj, &subj_len) == FAILURE) {
- return;
- }
+ ZEND_PARSE_PARAMETERS_START(3, 3)
+ Z_PARAM_STR_OR_LONG(string_in_codepage, int_in_codepage)
+ Z_PARAM_STR_OR_LONG(string_out_codepage, int_out_codepage)
+ Z_PARAM_STR(subject)
+ ZEND_PARSE_PARAMETERS_END();
- if (ZEND_SIZE_T_INT_OVFL(subj_len)) {
- php_error_docref(NULL, E_WARNING, "String is too long");
- RETURN_NULL();
+ if (ZEND_SIZE_T_INT_OVFL(ZSTR_LEN(subject))) {
+ zend_argument_value_error(1, "is too long");
+ RETURN_THROWS();
}
- if (IS_LONG == Z_TYPE_P(z_in_cp)) {
- if (ZEND_LONG_UINT_OVFL(Z_LVAL_P(z_in_cp))) {
- php_error_docref(NULL, E_WARNING, "Argument %d is out of range", Z_LVAL_P(z_in_cp));
- RETURN_NULL();
- }
-
- in_cp = php_win32_cp_get_by_id((DWORD)Z_LVAL_P(z_in_cp));
+ if (string_in_codepage != NULL) {
+ in_cp = php_win32_cp_get_by_enc(ZSTR_VAL(string_in_codepage));
if (!in_cp) {
- php_error_docref(NULL, E_WARNING, "Invalid codepage %d", Z_LVAL_P(z_in_cp));
- RETURN_NULL();
+ zend_argument_value_error(1, "must be a valid charset");
+ RETURN_THROWS();
}
} else {
- if (!try_convert_to_string(z_in_cp)) {
- return;
+ if (ZEND_LONG_UINT_OVFL(int_in_codepage)) {
+ zend_argument_value_error(1, "must be between 0 and %u", UINT_MAX);
+ RETURN_THROWS();
}
- in_cp = php_win32_cp_get_by_enc(Z_STRVAL_P(z_in_cp));
+ in_cp = php_win32_cp_get_by_id((DWORD)int_in_codepage);
if (!in_cp) {
- php_error_docref(NULL, E_WARNING, "Invalid charset %s", Z_STRVAL_P(z_in_cp));
- RETURN_NULL();
+ zend_argument_value_error(1, "must be a valid codepage");
+ RETURN_THROWS();
}
}
- if (IS_LONG == Z_TYPE_P(z_out_cp)) {
- if (ZEND_LONG_UINT_OVFL(Z_LVAL_P(z_out_cp))) {
- php_error_docref(NULL, E_WARNING, "Argument %d is out of range", Z_LVAL_P(z_out_cp));
- RETURN_NULL();
- }
-
- out_cp = php_win32_cp_get_by_id((DWORD)Z_LVAL_P(z_out_cp));
+ if (string_out_codepage != NULL) {
+ out_cp = php_win32_cp_get_by_enc(ZSTR_VAL(string_out_codepage));
if (!out_cp) {
- php_error_docref(NULL, E_WARNING, "Invalid codepage %d", Z_LVAL_P(z_out_cp));
- RETURN_NULL();
+ zend_argument_value_error(2, "must be a valid charset");
+ RETURN_THROWS();
}
} else {
- if (!try_convert_to_string(z_out_cp)) {
- return;
+ if (ZEND_LONG_UINT_OVFL(int_out_codepage)) {
+ zend_argument_value_error(2, "must be between 0 and %u", UINT_MAX);
+ RETURN_THROWS();
}
- out_cp = php_win32_cp_get_by_enc(Z_STRVAL_P(z_out_cp));
+ out_cp = php_win32_cp_get_by_id((DWORD)int_out_codepage);
if (!out_cp) {
- php_error_docref(NULL, E_WARNING, "Invalid charset %s", Z_STRVAL_P(z_out_cp));
- RETURN_NULL();
+ zend_argument_value_error(2, "must be a valid codepage");
+ RETURN_THROWS();
}
}
- tmpw = php_win32_cp_conv_to_w(in_cp->id, in_cp->to_w_fl, subj, subj_len, &tmpw_len);
+ tmpw = php_win32_cp_conv_to_w(in_cp->id, in_cp->to_w_fl, ZSTR_VAL(subject), ZSTR_LEN(subject), &tmpw_len);
if (!tmpw) {
php_error_docref(NULL, E_WARNING, "Wide char conversion failed");
RETURN_NULL();
diff --git a/win32/codepage.h b/win32/codepage.h
index 0dd72562b6..8f8fbcbaa1 100644
--- a/win32/codepage.h
+++ b/win32/codepage.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/console.c b/win32/console.c
index 0b1bb0eff9..7833dd97d3 100644
--- a/win32/console.c
+++ b/win32/console.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/console.h b/win32/console.h
index 2d36d85508..47336a0a7b 100644
--- a/win32/console.h
+++ b/win32/console.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/dllmain.c b/win32/dllmain.c
index 4743f732e9..7850a79699 100644
--- a/win32/dllmain.c
+++ b/win32/dllmain.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/ftok.c b/win32/ftok.c
index db789f8b70..3e379e82ef 100644
--- a/win32/ftok.c
+++ b/win32/ftok.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/getrusage.c b/win32/getrusage.c
index de67f7f8d2..c956613c69 100644
--- a/win32/getrusage.c
+++ b/win32/getrusage.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/getrusage.h b/win32/getrusage.h
index c41c026aa2..c5a95c436b 100644
--- a/win32/getrusage.h
+++ b/win32/getrusage.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/globals.c b/win32/globals.c
index 9bb392f42a..e9ba61761a 100644
--- a/win32/globals.c
+++ b/win32/globals.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/grp.h b/win32/grp.h
deleted file mode 100644
index 301babed4e..0000000000
--- a/win32/grp.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
- | 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: Sterling Hughes <sterling@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-#ifndef PHP_WIN32_GRP_H
-#define PHP_WIN32_GRP_H
-
-struct group {
- char *gr_name;
- char *gr_passwd;
- int gr_gid;
- char **gr_mem;
-};
-
-#endif
diff --git a/win32/inet.c b/win32/inet.c
index 7361b89bc2..4a835ca7a3 100644
--- a/win32/inet.c
+++ b/win32/inet.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/inet.h b/win32/inet.h
index b57d78903d..06b646bd57 100644
--- a/win32/inet.h
+++ b/win32/inet.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/ioutil.c b/win32/ioutil.c
index 48e65d918f..dad7d81cb6 100644
--- a/win32/ioutil.c
+++ b/win32/ioutil.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -862,7 +860,6 @@ static int php_win32_ioutil_fstat_int(HANDLE h, php_win32_ioutil_stat_t *buf, co
BY_HANDLE_FILE_INFORMATION d;
PBY_HANDLE_FILE_INFORMATION data;
LARGE_INTEGER t;
- wchar_t mypath[MAXPATHLEN];
uint8_t is_dir;
data = !dp ? &d : dp;
diff --git a/win32/ioutil.h b/win32/ioutil.h
index 05ed3621d2..97fa6116fb 100644
--- a/win32/ioutil.h
+++ b/win32/ioutil.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -632,7 +630,6 @@ __forceinline static int php_win32_ioutil_link(const char *target, const char *l
return ret;
}/*}}}*/
-#define HAVE_REALPATH 1
PW32IO char *realpath(const char *path, char *resolved);
__forceinline static char *php_win32_ioutil_realpath_ex0(const char *path, char *resolved, PBY_HANDLE_FILE_INFORMATION info)
diff --git a/win32/ipc.h b/win32/ipc.h
index c7cb476353..bbefb48703 100644
--- a/win32/ipc.h
+++ b/win32/ipc.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/nice.c b/win32/nice.c
index 05aae465ed..4b2d388362 100644
--- a/win32/nice.c
+++ b/win32/nice.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -56,7 +54,7 @@
* . PROCESS_MODE_BACKGROUND_BEGIN
* . PROCESS_MODE_BACKGROUND_END
* Process mode is not covered because it can easily forgotten to be changed
- * back and can cause unforseen side effects that is hard to debug. Besides
+ * back and can cause unforeseen side effects that is hard to debug. Besides
* that, these do generally not really fit into making a Windows somewhat
* compatible nice() function.
*/
diff --git a/win32/nice.h b/win32/nice.h
index 385855c2ea..dc082035d9 100644
--- a/win32/nice.h
+++ b/win32/nice.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/php_inttypes.h b/win32/php_inttypes.h
deleted file mode 100644
index 20e9c9b775..0000000000
--- a/win32/php_inttypes.h
+++ /dev/null
@@ -1,313 +0,0 @@
-// ISO C9x compliant inttypes.h for Microsoft Visual Studio
-// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
-//
-// Copyright (c) 2006 Alexander Chemeris
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-//
-// 3. The name of the author may be used to endorse or promote products
-// derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _MSC_VER // [
-#error "Use this header only with Microsoft Visual C++ compilers!"
-#endif // _MSC_VER ]
-
-// Starting with vc14, many of the C11 features are now included, so we only
-// need many of these typedefs and defines for older VS suites
-#if _MSC_VER < 1900
-
-#ifndef _MSC_INTTYPES_H_ // [
-#define _MSC_INTTYPES_H_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#include "stdint.h"
-
-// 7.8 Format conversion of integer types
-
-typedef struct {
- intmax_t quot;
- intmax_t rem;
-} imaxdiv_t;
-
-// 7.8.1 Macros for format specifiers
-
-#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198
-
-// The fprintf macros for signed integers are:
-#define PRId8 "d"
-#define PRIi8 "i"
-#define PRIdLEAST8 "d"
-#define PRIiLEAST8 "i"
-#define PRIdFAST8 "d"
-#define PRIiFAST8 "i"
-
-#define PRId16 "hd"
-#define PRIi16 "hi"
-#define PRIdLEAST16 "hd"
-#define PRIiLEAST16 "hi"
-#define PRIdFAST16 "hd"
-#define PRIiFAST16 "hi"
-
-#define PRId32 "I32d"
-#define PRIi32 "I32i"
-#define PRIdLEAST32 "I32d"
-#define PRIiLEAST32 "I32i"
-#define PRIdFAST32 "I32d"
-#define PRIiFAST32 "I32i"
-
-#define PRId64 "I64d"
-#define PRIi64 "I64i"
-#define PRIdLEAST64 "I64d"
-#define PRIiLEAST64 "I64i"
-#define PRIdFAST64 "I64d"
-#define PRIiFAST64 "I64i"
-
-#define PRIdMAX "I64d"
-#define PRIiMAX "I64i"
-
-#define PRIdPTR "Id"
-#define PRIiPTR "Ii"
-
-// The fprintf macros for unsigned integers are:
-#define PRIo8 "o"
-#define PRIu8 "u"
-#define PRIx8 "x"
-#define PRIX8 "X"
-#define PRIoLEAST8 "o"
-#define PRIuLEAST8 "u"
-#define PRIxLEAST8 "x"
-#define PRIXLEAST8 "X"
-#define PRIoFAST8 "o"
-#define PRIuFAST8 "u"
-#define PRIxFAST8 "x"
-#define PRIXFAST8 "X"
-
-#define PRIo16 "ho"
-#define PRIu16 "hu"
-#define PRIx16 "hx"
-#define PRIX16 "hX"
-#define PRIoLEAST16 "ho"
-#define PRIuLEAST16 "hu"
-#define PRIxLEAST16 "hx"
-#define PRIXLEAST16 "hX"
-#define PRIoFAST16 "ho"
-#define PRIuFAST16 "hu"
-#define PRIxFAST16 "hx"
-#define PRIXFAST16 "hX"
-
-#define PRIo32 "I32o"
-#define PRIu32 "I32u"
-#define PRIx32 "I32x"
-#define PRIX32 "I32X"
-#define PRIoLEAST32 "I32o"
-#define PRIuLEAST32 "I32u"
-#define PRIxLEAST32 "I32x"
-#define PRIXLEAST32 "I32X"
-#define PRIoFAST32 "I32o"
-#define PRIuFAST32 "I32u"
-#define PRIxFAST32 "I32x"
-#define PRIXFAST32 "I32X"
-
-#define PRIo64 "I64o"
-#define PRIu64 "I64u"
-#define PRIx64 "I64x"
-#define PRIX64 "I64X"
-#define PRIoLEAST64 "I64o"
-#define PRIuLEAST64 "I64u"
-#define PRIxLEAST64 "I64x"
-#define PRIXLEAST64 "I64X"
-#define PRIoFAST64 "I64o"
-#define PRIuFAST64 "I64u"
-#define PRIxFAST64 "I64x"
-#define PRIXFAST64 "I64X"
-
-#define PRIoMAX "I64o"
-#define PRIuMAX "I64u"
-#define PRIxMAX "I64x"
-#define PRIXMAX "I64X"
-
-#define PRIoPTR "Io"
-#define PRIuPTR "Iu"
-#define PRIxPTR "Ix"
-#define PRIXPTR "IX"
-
-// The fscanf macros for signed integers are:
-#define SCNd8 "d"
-#define SCNi8 "i"
-#define SCNdLEAST8 "d"
-#define SCNiLEAST8 "i"
-#define SCNdFAST8 "d"
-#define SCNiFAST8 "i"
-
-#define SCNd16 "hd"
-#define SCNi16 "hi"
-#define SCNdLEAST16 "hd"
-#define SCNiLEAST16 "hi"
-#define SCNdFAST16 "hd"
-#define SCNiFAST16 "hi"
-
-#define SCNd32 "ld"
-#define SCNi32 "li"
-#define SCNdLEAST32 "ld"
-#define SCNiLEAST32 "li"
-#define SCNdFAST32 "ld"
-#define SCNiFAST32 "li"
-
-#define SCNd64 "I64d"
-#define SCNi64 "I64i"
-#define SCNdLEAST64 "I64d"
-#define SCNiLEAST64 "I64i"
-#define SCNdFAST64 "I64d"
-#define SCNiFAST64 "I64i"
-
-#define SCNdMAX "I64d"
-#define SCNiMAX "I64i"
-
-#ifdef _WIN64 // [
-# define SCNdPTR "I64d"
-# define SCNiPTR "I64i"
-#else // _WIN64 ][
-# define SCNdPTR "ld"
-# define SCNiPTR "li"
-#endif // _WIN64 ]
-
-// The fscanf macros for unsigned integers are:
-#define SCNo8 "o"
-#define SCNu8 "u"
-#define SCNx8 "x"
-#define SCNX8 "X"
-#define SCNoLEAST8 "o"
-#define SCNuLEAST8 "u"
-#define SCNxLEAST8 "x"
-#define SCNXLEAST8 "X"
-#define SCNoFAST8 "o"
-#define SCNuFAST8 "u"
-#define SCNxFAST8 "x"
-#define SCNXFAST8 "X"
-
-#define SCNo16 "ho"
-#define SCNu16 "hu"
-#define SCNx16 "hx"
-#define SCNX16 "hX"
-#define SCNoLEAST16 "ho"
-#define SCNuLEAST16 "hu"
-#define SCNxLEAST16 "hx"
-#define SCNXLEAST16 "hX"
-#define SCNoFAST16 "ho"
-#define SCNuFAST16 "hu"
-#define SCNxFAST16 "hx"
-#define SCNXFAST16 "hX"
-
-#define SCNo32 "lo"
-#define SCNu32 "lu"
-#define SCNx32 "lx"
-#define SCNX32 "lX"
-#define SCNoLEAST32 "lo"
-#define SCNuLEAST32 "lu"
-#define SCNxLEAST32 "lx"
-#define SCNXLEAST32 "lX"
-#define SCNoFAST32 "lo"
-#define SCNuFAST32 "lu"
-#define SCNxFAST32 "lx"
-#define SCNXFAST32 "lX"
-
-#define SCNo64 "I64o"
-#define SCNu64 "I64u"
-#define SCNx64 "I64x"
-#define SCNX64 "I64X"
-#define SCNoLEAST64 "I64o"
-#define SCNuLEAST64 "I64u"
-#define SCNxLEAST64 "I64x"
-#define SCNXLEAST64 "I64X"
-#define SCNoFAST64 "I64o"
-#define SCNuFAST64 "I64u"
-#define SCNxFAST64 "I64x"
-#define SCNXFAST64 "I64X"
-
-#define SCNoMAX "I64o"
-#define SCNuMAX "I64u"
-#define SCNxMAX "I64x"
-#define SCNXMAX "I64X"
-
-#ifdef _WIN64 // [
-# define SCNoPTR "I64o"
-# define SCNuPTR "I64u"
-# define SCNxPTR "I64x"
-# define SCNXPTR "I64X"
-#else // _WIN64 ][
-# define SCNoPTR "lo"
-# define SCNuPTR "lu"
-# define SCNxPTR "lx"
-# define SCNXPTR "lX"
-#endif // _WIN64 ]
-
-#endif // __STDC_FORMAT_MACROS ]
-
-// 7.8.2 Functions for greatest-width integer types
-
-// 7.8.2.1 The imaxabs function
-#define imaxabs _abs64
-
-// 7.8.2.2 The imaxdiv function
-
-// This is modified version of div() function from Microsoft's div.c found
-// in %MSVC.NET%\crt\src\div.c
-#ifdef STATIC_IMAXDIV // [
-static
-#else // STATIC_IMAXDIV ][
-_inline
-#endif // STATIC_IMAXDIV ]
-imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
-{
- imaxdiv_t result;
-
- result.quot = numer / denom;
- result.rem = numer % denom;
-
- if (numer < 0 && result.rem > 0) {
- // did division wrong; must fix up
- ++result.quot;
- result.rem -= denom;
- }
-
- return result;
-}
-
-// 7.8.2.3 The strtoimax and strtoumax functions
-#define strtoimax _strtoi64
-#define strtoumax _strtoui64
-
-// 7.8.2.4 The wcstoimax and wcstoumax functions
-#define wcstoimax _wcstoi64
-#define wcstoumax _wcstoui64
-
-
-#endif // _MSC_INTTYPES_H_ ]
-
-#else
-#include <inttypes.h>
-#endif
diff --git a/win32/php_registry.h b/win32/php_registry.h
index f46c482085..9effd01d4e 100644
--- a/win32/php_registry.h
+++ b/win32/php_registry.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/php_stdint.h b/win32/php_stdint.h
deleted file mode 100644
index e7615f1479..0000000000
--- a/win32/php_stdint.h
+++ /dev/null
@@ -1,265 +0,0 @@
-// ISO C9x compliant stdint.h for Microsoft Visual Studio
-// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
-//
-// Copyright (c) 2006-2009 Alexander Chemeris
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-//
-// 3. The name of the author may be used to endorse or promote products
-// derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _MSC_VER // [
-#error "Use this header only with Microsoft Visual C++ compilers!"
-#endif // _MSC_VER ]
-
-// Starting with vc14, many of the C11 features are now included, so we only
-// need many of these typedefs and defines for older VS suites
-#if _MSC_VER < 1900
-
-#ifndef _MSC_STDINT_H_ // [
-#define _MSC_STDINT_H_
-
-#ifndef _STDINT
-# define _STDINT
-#endif
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#include <limits.h>
-
-// For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}'
-// or compiler give many errors like this:
-// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
-#if (_MSC_VER < 1300) && defined(__cplusplus)
- extern "C++" {
-#endif
-# include <wchar.h>
-#if (_MSC_VER < 1300) && defined(__cplusplus)
- }
-#endif
-
-// Define _W64 macros to mark types changing their size, like intptr_t.
-#ifndef _W64
-# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
-# define _W64 __w64
-# else
-# define _W64
-# endif
-#endif
-
-
-// 7.18.1 Integer types
-
-// 7.18.1.1 Exact-width integer types
-#ifndef int8_t
-typedef __int8 int8_t;
-#endif
-#ifndef int16_t
-typedef __int16 int16_t;
-#endif
-#ifndef int32_t
-typedef __int32 int32_t;
-#endif
-#ifndef int64_t
-typedef __int64 int64_t;
-#endif
-#ifndef uint8_t
-typedef unsigned __int8 uint8_t;
-#endif
-typedef unsigned __int16 uint16_t;
-#ifndef uint32_t
-typedef unsigned __int32 uint32_t;
-#endif
-typedef unsigned __int64 uint64_t;
-
-// 7.18.1.2 Minimum-width integer types
-typedef int8_t int_least8_t;
-typedef int16_t int_least16_t;
-typedef int32_t int_least32_t;
-typedef int64_t int_least64_t;
-typedef uint8_t uint_least8_t;
-typedef uint16_t uint_least16_t;
-typedef uint32_t uint_least32_t;
-typedef uint64_t uint_least64_t;
-
-// 7.18.1.3 Fastest minimum-width integer types
-typedef int8_t int_fast8_t;
-typedef int16_t int_fast16_t;
-typedef int32_t int_fast32_t;
-typedef int64_t int_fast64_t;
-typedef uint8_t uint_fast8_t;
-typedef uint16_t uint_fast16_t;
-typedef uint32_t uint_fast32_t;
-typedef uint32_t u_int32_t;
-typedef uint64_t uint_fast64_t;
-
-// 7.18.1.4 Integer types capable of holding object pointers
-/* intptr_t and uintptr_t are available from stddef.h */
-#include <stddef.h>
-
-// 7.18.1.5 Greatest-width integer types
-typedef int64_t intmax_t;
-typedef uint64_t uintmax_t;
-
-
-// 7.18.2 Limits of specified-width integer types
-
-#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
-
-// 7.18.2.1 Limits of exact-width integer types
-#if _MSC_VER >= 1700 && !defined(_INTSAFE_H_INCLUDED_)
-#define INT8_MIN ((int8_t)_I8_MIN)
-#define INT8_MAX _I8_MAX
-#define INT16_MIN ((int16_t)_I16_MIN)
-#define INT16_MAX _I16_MAX
-#define INT32_MIN ((int32_t)_I32_MIN)
-#define INT32_MAX _I32_MAX
-#define INT64_MIN ((int64_t)_I64_MIN)
-#define INT64_MAX _I64_MAX
-#define UINT8_MAX _UI8_MAX
-#define UINT16_MAX _UI16_MAX
-#define UINT32_MAX _UI32_MAX
-#define UINT64_MAX _UI64_MAX
-#endif
-
-// 7.18.2.2 Limits of minimum-width integer types
-#define INT_LEAST8_MIN INT8_MIN
-#define INT_LEAST8_MAX INT8_MAX
-#define INT_LEAST16_MIN INT16_MIN
-#define INT_LEAST16_MAX INT16_MAX
-#define INT_LEAST32_MIN INT32_MIN
-#define INT_LEAST32_MAX INT32_MAX
-#define INT_LEAST64_MIN INT64_MIN
-#define INT_LEAST64_MAX INT64_MAX
-#define UINT_LEAST8_MAX UINT8_MAX
-#define UINT_LEAST16_MAX UINT16_MAX
-#define UINT_LEAST32_MAX UINT32_MAX
-#define UINT_LEAST64_MAX UINT64_MAX
-
-// 7.18.2.3 Limits of fastest minimum-width integer types
-#define INT_FAST8_MIN INT8_MIN
-#define INT_FAST8_MAX INT8_MAX
-#define INT_FAST16_MIN INT16_MIN
-#define INT_FAST16_MAX INT16_MAX
-#define INT_FAST32_MIN INT32_MIN
-#define INT_FAST32_MAX INT32_MAX
-#define INT_FAST64_MIN INT64_MIN
-#define INT_FAST64_MAX INT64_MAX
-#define UINT_FAST8_MAX UINT8_MAX
-#define UINT_FAST16_MAX UINT16_MAX
-#define UINT_FAST32_MAX UINT32_MAX
-#define UINT_FAST64_MAX UINT64_MAX
-
-// 7.18.2.4 Limits of integer types capable of holding object pointers
-#ifdef _WIN64 // [
-# define INTPTR_MIN INT64_MIN
-# define INTPTR_MAX INT64_MAX
-# define UINTPTR_MAX UINT64_MAX
-#else // _WIN64 ][
-# define INTPTR_MIN INT32_MIN
-# define INTPTR_MAX INT32_MAX
-# define UINTPTR_MAX UINT32_MAX
-#endif // _WIN64 ]
-
-// 7.18.2.5 Limits of greatest-width integer types
-#define INTMAX_MIN INT64_MIN
-#define INTMAX_MAX INT64_MAX
-#define UINTMAX_MAX UINT64_MAX
-
-// 7.18.3 Limits of other integer types
-
-#ifdef _WIN64 // [
-# define PTRDIFF_MIN _I64_MIN
-# define PTRDIFF_MAX _I64_MAX
-#else // _WIN64 ][
-# define PTRDIFF_MIN _I32_MIN
-# define PTRDIFF_MAX _I32_MAX
-#endif // _WIN64 ]
-
-#define SIG_ATOMIC_MIN INT_MIN
-#define SIG_ATOMIC_MAX INT_MAX
-
-#ifndef SIZE_MAX // [
-# ifdef _WIN64 // [
-# define SIZE_MAX _UI64_MAX
-# else // _WIN64 ][
-# define SIZE_MAX _UI32_MAX
-# endif // _WIN64 ]
-#endif // SIZE_MAX ]
-
-// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
-#ifndef WCHAR_MIN // [
-# define WCHAR_MIN 0
-#endif // WCHAR_MIN ]
-#ifndef WCHAR_MAX // [
-# define WCHAR_MAX _UI16_MAX
-#endif // WCHAR_MAX ]
-
-#define WINT_MIN 0
-#define WINT_MAX _UI16_MAX
-
-#endif // __STDC_LIMIT_MACROS ]
-
-
-// 7.18.4 Limits of other integer types
-
-#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
-
-// 7.18.4.1 Macros for minimum-width integer constants
-
-#define INT8_C(val) val##i8
-#define INT16_C(val) val##i16
-#define INT32_C(val) val##i32
-#define INT64_C(val) val##i64
-
-#define UINT8_C(val) val##ui8
-#define UINT16_C(val) val##ui16
-#define UINT32_C(val) val##ui32
-#define UINT64_C(val) val##ui64
-
-// 7.18.4.2 Macros for greatest-width integer constants
-#define INTMAX_C INT64_C
-#define UINTMAX_C UINT64_C
-
-#if _MSC_VER < 1600
-static __inline int64_t llabs(int64_t i)
-{
- return i >= 0 ? i: -i;
-}
-#endif
-
-#endif // __STDC_CONSTANT_MACROS ]
-
-
-#endif // _MSC_STDINT_H_ ]
-
-#else
-#include <stdint.h>
-#endif
-
-#ifndef u_char
-typedef unsigned __int8 u_char;
-#endif
diff --git a/win32/php_win32_globals.h b/win32/php_win32_globals.h
index bb91f08c50..05da08104b 100644
--- a/win32/php_win32_globals.h
+++ b/win32/php_win32_globals.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/readdir.c b/win32/readdir.c
index c172f16fc2..efa7bd5966 100644
--- a/win32/readdir.c
+++ b/win32/readdir.c
@@ -1,8 +1,9 @@
+#include "php.h"
+
#include <malloc.h>
#include <string.h>
#include <errno.h>
-#include "php.h"
#include "readdir.h"
#include "win32/ioutil.h"
diff --git a/win32/readdir.h b/win32/readdir.h
index 61876f3dc1..cc8e1a9a25 100644
--- a/win32/readdir.h
+++ b/win32/readdir.h
@@ -26,7 +26,7 @@ struct dirent {
/* typedef DIR - not the same as Unix */
struct DIR_W32 {
HANDLE handle; /* _findfirst/_findnext handle */
- uint16_t offset; /* offset into directory */
+ uint32_t offset; /* offset into directory */
uint8_t finished; /* 1 if there are not more files */
WIN32_FIND_DATAW fileinfo; /* from _findfirst/_findnext */
wchar_t *dirw; /* the dir we are reading */
diff --git a/win32/registry.c b/win32/registry.c
index 99c3ce365f..09d9c98868 100644
--- a/win32/registry.c
+++ b/win32/registry.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/select.c b/win32/select.c
index b02766e4f3..865c3e44b9 100644
--- a/win32/select.c
+++ b/win32/select.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/select.h b/win32/select.h
index c23eb87ddb..f6f9af99c1 100644
--- a/win32/select.h
+++ b/win32/select.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/sendmail.c b/win32/sendmail.c
index 9e31028d58..3d73ef9b5b 100644
--- a/win32/sendmail.c
+++ b/win32/sendmail.c
@@ -1,7 +1,7 @@
/*
* PHP Sendmail for Windows.
*
- * This file is rewritten specificly for PHPFI. Some functionality
+ * This file is rewritten specifically for PHPFI. Some functionality
* has been removed (MIME and file attachments). This code was
* modified from code based on code written by Jarle Aase.
*
@@ -91,7 +91,7 @@ static char *ErrorMessages[] =
};
/* This pattern converts all single occurrences of \n (Unix)
- * withour a leading \r to \r\n and all occurrences of \r (Mac)
+ * without a leading \r to \r\n and all occurrences of \r (Mac)
* without a trailing \n to \r\n
* Thx to Nibbler from ircnet/#linuxger
*/
@@ -114,7 +114,7 @@ static char *ErrorMessages[] =
/* This function is meant to unify the headers passed to to mail()
* This means, use PCRE to transform single occurrences of \n or \r in \r\n
- * As a second step we also eleminate all \r\n occurrences which are:
+ * As a second step we also eliminate all \r\n occurrences which are:
* 1) At the start of the header
* 2) At the end of the header
* 3) Two or more occurrences in the header are removed so only one is left
@@ -122,7 +122,7 @@ static char *ErrorMessages[] =
* Returns NULL on error, or the new char* buffer on success.
* You have to take care and efree() the buffer on your own.
*/
-static zend_string *php_win32_mail_trim_header(char *header)
+static zend_string *php_win32_mail_trim_header(const char *header)
{
zend_string *result, *result2;
zend_string *replace;
@@ -176,14 +176,14 @@ static zend_string *php_win32_mail_trim_header(char *header)
//
// See SendText() for additional args!
//********************************************************************/
-PHPAPI int TSendMail(char *host, int *error, char **error_message,
- char *headers, char *Subject, char *mailTo, char *data,
+PHPAPI int TSendMail(const char *host, int *error, char **error_message,
+ const char *headers, const char *Subject, const char *mailTo, const char *data,
char *mailCc, char *mailBcc, char *mailRPath)
{
int ret;
char *RPath = NULL;
zend_string *headers_lc = NULL, *headers_trim = NULL; /* headers_lc is only created if we've a header at all */
- char *pos1 = NULL, *pos2 = NULL;
+ const char *pos1 = NULL, *pos2 = NULL;
if (host == NULL) {
*error = BAD_MAIL_HOST;
@@ -216,7 +216,7 @@ PHPAPI int TSendMail(char *host, int *error, char **error_message,
RPath = estrdup(INI_STR("sendmail_from"));
} else if (headers_lc) {
int found = 0;
- char *lookup = ZSTR_VAL(headers_lc);
+ const char *lookup = ZSTR_VAL(headers_lc);
while (lookup) {
pos1 = strstr(lookup, "from:");
@@ -270,7 +270,7 @@ PHPAPI int TSendMail(char *host, int *error, char **error_message,
/* 128 is safe here, the specifier in snprintf isn't longer than that */
*error_message = ecalloc(1, HOST_NAME_LEN + 128);
snprintf(*error_message, HOST_NAME_LEN + 128,
- "Failed to connect to mailserver at \"%s\" port %d, verify your \"SMTP\" "
+ "Failed to connect to mailserver at \"%s\" port " ZEND_ULONG_FMT ", verify your \"SMTP\" "
"and \"smtp_port\" setting in php.ini or use ini_set()",
PW32G(mail_host), !INI_INT("smtp_port") ? 25 : INI_INT("smtp_port"));
return FAILURE;
@@ -300,7 +300,7 @@ PHPAPI int TSendMail(char *host, int *error, char **error_message,
// Author/Date: jcar 20/9/96
// History:
//********************************************************************/
-PHPAPI void TSMClose()
+PHPAPI void TSMClose(void)
{
Post("QUIT\r\n");
Ack(NULL);
@@ -352,12 +352,13 @@ PHPAPI char *GetSMErrorText(int index)
// Author/Date: jcar 20/9/96
// History:
//*******************************************************************/
-static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char *mailBcc, char *data,
- char *headers, char *headers_lc, char **error_message)
+static int SendText(char *RPath, const char *Subject, const char *mailTo, char *mailCc, char *mailBcc, const char *data,
+ const char *headers, char *headers_lc, char **error_message)
{
int res;
char *p;
- char *tempMailTo, *token, *pos1, *pos2;
+ char *tempMailTo, *token;
+ const char *pos1, *pos2;
char *server_response = NULL;
char *stripped_header = NULL;
zend_string *data_cln;
@@ -633,7 +634,7 @@ static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char
return (SUCCESS);
}
-static int addToHeader(char **header_buffer, const char *specifier, char *string)
+static int addToHeader(char **header_buffer, const char *specifier, const char *string)
{
*header_buffer = erealloc(*header_buffer, strlen(*header_buffer) + strlen(specifier) + strlen(string) + 1);
sprintf(*header_buffer + strlen(*header_buffer), specifier, string);
@@ -651,7 +652,7 @@ static int addToHeader(char **header_buffer, const char *specifier, char *string
// Author/Date: jcar 20/9/96
// History:
//********************************************************************/
-static int PostHeader(char *RPath, char *Subject, char *mailTo, char *xheaders)
+static int PostHeader(char *RPath, const char *Subject, const char *mailTo, char *xheaders)
{
/* Print message header according to RFC 822 */
/* Return-path, Received, Date, From, Subject, Sender, To, cc */
@@ -887,7 +888,7 @@ again:
/* Check for newline */
Index += rlen;
- /* SMPT RFC says \r\n is the only valid line ending, who are we to argue ;)
+ /* SMTP RFC says \r\n is the only valid line ending, who are we to argue ;)
* The response code must contain at least 5 characters ex. 220\r\n */
if (Received < 5 || buf[Received - 1] != '\n' || buf[Received - 2] != '\r') {
goto again;
@@ -958,7 +959,7 @@ static unsigned long GetAddr(LPSTR szHost)
// Name: int FormatEmailAddress
// Input:
// Output:
-// Description: Formats the email address to remove any content ouside
+// Description: Formats the email address to remove any content outside
// of the angle brackets < > as per RFC 2821.
//
// Returns the invalidly formatted mail address if the < > are
diff --git a/win32/sendmail.h b/win32/sendmail.h
index bb502cb7dd..486482c0c0 100644
--- a/win32/sendmail.h
+++ b/win32/sendmail.h
@@ -32,16 +32,16 @@
#define MAX_ERROR_INDEX 22 /* Always last error message + 1 */
-PHPAPI int TSendMail(char *smtpaddr, int *returnerror, char **error_message,
- char *RPath, char *Subject, char *mailTo, char *data,
+PHPAPI int TSendMail(const char *host, int *error, char **error_message,
+ const char *headers, const char *Subject, const char *mailTo, const char *data,
char *mailCc, char *mailBcc, char *mailRPath);
PHPAPI void TSMClose(void);
-static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char *mailBcc, char *data,
- char *headers, char *headers_lc, char **error_message);
+static int SendText(char *RPath, const char *Subject, const char *mailTo, char *mailCc, char *mailBcc, const char *data,
+ const char *headers, char *headers_lc, char **error_message);
PHPAPI char *GetSMErrorText(int index);
static int MailConnect();
-static int PostHeader(char *RPath, char *Subject, char *mailTo, char *xheaders);
+static int PostHeader(char *RPath, const char *Subject, const char *mailTo, char *xheaders);
static int Post(LPCSTR msg);
static int Ack(char **server_response);
static unsigned long GetAddr(LPSTR szHost);
diff --git a/win32/signal.c b/win32/signal.c
index bdfd7033f3..23a5acbff9 100644
--- a/win32/signal.c
+++ b/win32/signal.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -86,31 +84,33 @@ static BOOL WINAPI php_win32_signal_system_ctrl_handler(DWORD evt)
return TRUE;
}/*}}}*/
-/* {{{ proto bool sapi_windows_set_ctrl_handler(callable handler, [, bool add = true])
- Assigns a CTRL signal handler to a PHP function */
+/* {{{ Assigns a CTRL signal handler to a PHP function */
PHP_FUNCTION(sapi_windows_set_ctrl_handler)
{
- zval *handler = NULL;
+ zend_fcall_info fci;
+ zend_fcall_info_cache fcc;
zend_bool add = 1;
+
+ /* callable argument corresponds to the CTRL handler */
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "f!|b", &fci, &fcc, &add) == FAILURE) {
+ RETURN_THROWS();
+ }
+
#if ZTS
if (!tsrm_is_main_thread()) {
- php_error_docref(NULL, E_WARNING, "CTRL events can only be received on the main thread");
- return;
+ zend_throw_error(NULL, "CTRL events can only be received on the main thread");
+ RETURN_THROWS();
}
#endif
if (!php_win32_console_is_cli_sapi()) {
- php_error_docref(NULL, E_WARNING, "CTRL events trapping is only supported on console");
- return;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|b", &handler, &add) == FAILURE) {
- return;
+ zend_throw_error(NULL, "CTRL events trapping is only supported on console");
+ RETURN_THROWS();
}
- if (IS_NULL == Z_TYPE_P(handler)) {
- zval_dtor(&ctrl_handler);
+ if (!ZEND_FCI_INITIALIZED(fci)) {
+ zval_ptr_dtor(&ctrl_handler);
ZVAL_UNDEF(&ctrl_handler);
if (!SetConsoleCtrlHandler(NULL, add)) {
RETURN_FALSE;
@@ -118,22 +118,15 @@ PHP_FUNCTION(sapi_windows_set_ctrl_handler)
RETURN_TRUE;
}
- if (!zend_is_callable(handler, 0, NULL)) {
- zend_string *func_name = zend_get_callable_name(handler);
- php_error_docref(NULL, E_WARNING, "%s is not a callable function name error", ZSTR_VAL(func_name));
- zend_string_release_ex(func_name, 0);
- RETURN_FALSE;
- }
-
if (!SetConsoleCtrlHandler(NULL, FALSE) || !SetConsoleCtrlHandler(php_win32_signal_system_ctrl_handler, add)) {
- zend_string *func_name = zend_get_callable_name(handler);
+ zend_string *func_name = zend_get_callable_name(&fci.function_name);
php_error_docref(NULL, E_WARNING, "Unable to attach %s as a CTRL handler", ZSTR_VAL(func_name));
zend_string_release_ex(func_name, 0);
RETURN_FALSE;
}
- zval_dtor(&ctrl_handler);
- ZVAL_COPY(&ctrl_handler, handler);
+ zval_ptr_dtor_nogc(&ctrl_handler);
+ ZVAL_COPY(&ctrl_handler, &fci.function_name);
RETURN_TRUE;
}/*}}}*/
@@ -143,12 +136,12 @@ PHP_FUNCTION(sapi_windows_generate_ctrl_event)
zend_long evt, pid = 0;
zend_bool ret = 0;
- if (!php_win32_console_is_cli_sapi()) {
- php_error_docref(NULL, E_WARNING, "CTRL events trapping is only supported on console");
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &evt, &pid) == FAILURE) {
+ RETURN_THROWS();
}
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &evt, &pid) == FAILURE) {
+ if (!php_win32_console_is_cli_sapi()) {
+ zend_throw_error(NULL, "CTRL events trapping is only supported on console");
return;
}
diff --git a/win32/sockets.c b/win32/sockets.c
index 461ce69888..0a9a230df5 100644
--- a/win32/sockets.c
+++ b/win32/sockets.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -26,34 +24,33 @@
#include "php.h"
-PHPAPI int socketpair(int domain, int type, int protocol, SOCKET sock[2])
+PHPAPI int socketpair_win32(int domain, int type, int protocol, SOCKET sock[2], int overlapped)
{
struct sockaddr_in address;
SOCKET redirect;
int size = sizeof(address);
- if(domain != AF_INET) {
+ if (domain != AF_INET) {
WSASetLastError(WSAENOPROTOOPT);
return -1;
}
- sock[0] = sock[1] = redirect = INVALID_SOCKET;
-
+ sock[1] = redirect = INVALID_SOCKET;
- sock[0] = socket(domain, type, protocol);
+ sock[0] = socket(domain, type, protocol);
if (INVALID_SOCKET == sock[0]) {
goto error;
}
address.sin_addr.s_addr = INADDR_ANY;
- address.sin_family = AF_INET;
- address.sin_port = 0;
+ address.sin_family = AF_INET;
+ address.sin_port = 0;
- if (bind(sock[0], (struct sockaddr*)&address, sizeof(address)) != 0) {
+ if (bind(sock[0], (struct sockaddr *) &address, sizeof(address)) != 0) {
goto error;
}
- if(getsockname(sock[0], (struct sockaddr *)&address, &size) != 0) {
+ if (getsockname(sock[0], (struct sockaddr *) &address, &size) != 0) {
goto error;
}
@@ -61,17 +58,22 @@ PHPAPI int socketpair(int domain, int type, int protocol, SOCKET sock[2])
goto error;
}
- sock[1] = socket(domain, type, protocol);
+ if (overlapped) {
+ sock[1] = socket(domain, type, protocol);
+ } else {
+ sock[1] = WSASocket(domain, type, protocol, NULL, 0, 0);
+ }
+
if (INVALID_SOCKET == sock[1]) {
goto error;
}
address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- if(connect(sock[1], (struct sockaddr*)&address, sizeof(address)) != 0) {
+ if (connect(sock[1], (struct sockaddr *) &address, sizeof(address)) != 0) {
goto error;
}
- redirect = accept(sock[0],(struct sockaddr*)&address, &size);
+ redirect = accept(sock[0], (struct sockaddr *) &address, &size);
if (INVALID_SOCKET == redirect) {
goto error;
}
@@ -88,3 +90,8 @@ error:
WSASetLastError(WSAECONNABORTED);
return -1;
}
+
+PHPAPI int socketpair(int domain, int type, int protocol, SOCKET sock[2])
+{
+ return socketpair_win32(domain, type, protocol, sock, 1);
+}
diff --git a/win32/sockets.h b/win32/sockets.h
index 2e693f8840..2b2b5c4712 100644
--- a/win32/sockets.h
+++ b/win32/sockets.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -24,6 +22,7 @@
#ifndef PHP_WIN32_SOCKETS_H
#define PHP_WIN32_SOCKETS_H
+PHPAPI int socketpair_win32(int domain, int type, int protocol, SOCKET sock[2], int overlapped);
PHPAPI int socketpair(int domain, int type, int protocol, SOCKET sock[2]);
#endif
diff --git a/win32/syslog.h b/win32/syslog.h
index 5ea75d8486..560e8864fd 100644
--- a/win32/syslog.h
+++ b/win32/syslog.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/win32/winutil.c b/win32/winutil.c
index 8cf5cdc1e7..a14416a6ce 100644
--- a/win32/winutil.c
+++ b/win32/winutil.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -22,12 +20,11 @@
#include "codepage.h"
#include <bcrypt.h>
#include <lmcons.h>
-#include <imagehlp.h>
PHP_WINUTIL_API char *php_win32_error_to_msg(HRESULT error)
{/*{{{*/
- wchar_t *bufw = NULL;
+ wchar_t *bufw = NULL, *pw;
char *buf;
DWORD ret = FormatMessageW(
@@ -39,6 +36,10 @@ PHP_WINUTIL_API char *php_win32_error_to_msg(HRESULT error)
return "";
}
+ /* strip trailing line breaks and periods */
+ for (pw = bufw + wcslen(bufw) - 1; pw >= bufw && (*pw == L'\r' || *pw == L'\n' || *pw == L'.'); pw--);
+ pw[1] = L'\0';
+
buf = php_win32_cp_conv_w_to_any(bufw, ret, PHP_WIN32_CP_IGNORE_LEN_P);
LocalFree(bufw);
@@ -438,26 +439,13 @@ PHP_WINUTIL_API char *php_win32_get_username(void)
return uname;
}/*}}}*/
-static zend_always_inline BOOL is_compatible(const char *name, BOOL is_smaller, char *format, char **err)
+static zend_always_inline BOOL is_compatible(HMODULE handle, BOOL is_smaller, char *format, char **err)
{/*{{{*/
- /* work around ImageLoad() issue */
- char *name_stripped = name;
- if (name[0] == '.' && IS_SLASH(name[1])) {
- name_stripped += 2;
- }
-
- PLOADED_IMAGE img = ImageLoad(name_stripped, NULL);
+ PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER) handle;
+ PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((char *) dosHeader + dosHeader->e_lfanew);
- if (!img) {
- DWORD _err = GetLastError();
- char *err_txt = php_win32_error_to_msg(_err);
- spprintf(err, 0, "Failed to load %s, %s", name, err_txt);
- free(err_txt);
- return FALSE;
- }
-
- DWORD major = img->FileHeader->OptionalHeader.MajorLinkerVersion;
- DWORD minor = img->FileHeader->OptionalHeader.MinorLinkerVersion;
+ DWORD major = pNTHeader->OptionalHeader.MajorLinkerVersion;
+ DWORD minor = pNTHeader->OptionalHeader.MinorLinkerVersion;
#if PHP_LINKER_MAJOR == 14
/* VS 2015, 2017 and 2019 are binary compatible, but only forward compatible.
@@ -476,23 +464,39 @@ static zend_always_inline BOOL is_compatible(const char *name, BOOL is_smaller,
if (PHP_LINKER_MAJOR != major)
#endif
{
- spprintf(err, 0, format, name, major, minor, PHP_LINKER_MAJOR, PHP_LINKER_MINOR);
- ImageUnload(img);
+ char buf[MAX_PATH];
+ if (GetModuleFileName(handle, buf, sizeof(buf)) != 0) {
+ spprintf(err, 0, format, buf, major, minor, PHP_LINKER_MAJOR, PHP_LINKER_MINOR);
+ } else {
+ spprintf(err, 0, "Can't retrieve the module name (error %u)", GetLastError());
+ }
return FALSE;
}
- ImageUnload(img);
return TRUE;
}/*}}}*/
-PHP_WINUTIL_API BOOL php_win32_image_compatible(const char *name, char **err)
+PHP_WINUTIL_API BOOL php_win32_image_compatible(HMODULE handle, char **err)
{/*{{{*/
- return is_compatible(name, TRUE, "Can't load module '%s' as it's linked with %u.%u, but the core is linked with %d.%d", err);
+ return is_compatible(handle, TRUE, "Can't load module '%s' as it's linked with %u.%u, but the core is linked with %d.%d", err);
}/*}}}*/
-/* Expect a CRT name DLL. */
-PHP_WINUTIL_API BOOL php_win32_crt_compatible(const char *name, char **err)
+/* Expect a CRT module handle */
+PHP_WINUTIL_API BOOL php_win32_crt_compatible(char **err)
{/*{{{*/
- return is_compatible(name, FALSE, "'%s' %u.%u is not compatible with this PHP build linked with %d.%d", err);
+#if PHP_LINKER_MAJOR == 14
+ /* Extend for other CRT if needed. */
+# if PHP_DEBUG
+ const char *crt_name = "vcruntime140d.dll";
+# else
+ const char *crt_name = "vcruntime140.dll";
+# endif
+ HMODULE handle = GetModuleHandle(crt_name);
+ if (handle == NULL) {
+ spprintf(err, 0, "Can't get handle of module %s (error %u)", crt_name, GetLastError());
+ return FALSE;
+ }
+ return is_compatible(handle, FALSE, "'%s' %u.%u is not compatible with this PHP build linked with %d.%d", err);
+#endif
+ return TRUE;
}/*}}}*/
-
diff --git a/win32/winutil.h b/win32/winutil.h
index f2faa95fa8..cc3f115280 100644
--- a/win32/winutil.h
+++ b/win32/winutil.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -55,7 +53,7 @@ PHP_WINUTIL_API int php_win32_code_to_errno(unsigned long w32Err);
PHP_WINUTIL_API char *php_win32_get_username(void);
-PHP_WINUTIL_API BOOL php_win32_image_compatible(const char *img, char **err);
-PHP_WINUTIL_API BOOL php_win32_crt_compatible(const char *img, char **err);
+PHP_WINUTIL_API BOOL php_win32_image_compatible(HMODULE handle, char **err);
+PHP_WINUTIL_API BOOL php_win32_crt_compatible(char **err);
#endif