summaryrefslogtreecommitdiff
path: root/ext/standard/filestat.c
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2016-08-11 13:16:51 +0200
committerAnatol Belski <ab@php.net>2016-08-11 13:38:28 +0200
commit6359c7a2bffef34a9f360c8f8522dc6ec2d191d1 (patch)
tree3bf6542a3137446166462606b6ad2789f8b9746a /ext/standard/filestat.c
parent622d2f41d1cdb597f4fafecaaacf66e238742bd4 (diff)
downloadphp-git-6359c7a2bffef34a9f360c8f8522dc6ec2d191d1.tar.gz
add missing mb path support chunk
Diffstat (limited to 'ext/standard/filestat.c')
-rw-r--r--ext/standard/filestat.c111
1 files changed, 18 insertions, 93 deletions
diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c
index f6bd99c474..4e80b2cbd3 100644
--- a/ext/standard/filestat.c
+++ b/ext/standard/filestat.c
@@ -110,59 +110,22 @@ PHP_RSHUTDOWN_FUNCTION(filestat) /* {{{ */
static int php_disk_total_space(char *path, double *space) /* {{{ */
#if defined(WINDOWS) /* {{{ */
{
- double bytestotal = 0;
- HINSTANCE kernel32;
- FARPROC gdfse;
- typedef BOOL (WINAPI *gdfse_func)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);
- gdfse_func func;
-
- /* These are used by GetDiskFreeSpaceEx, if available. */
ULARGE_INTEGER FreeBytesAvailableToCaller;
ULARGE_INTEGER TotalNumberOfBytes;
ULARGE_INTEGER TotalNumberOfFreeBytes;
+ PHP_WIN32_IOUTIL_INIT_W(path)
- /* These are used by GetDiskFreeSpace otherwise. */
- DWORD SectorsPerCluster;
- DWORD BytesPerSector;
- DWORD NumberOfFreeClusters;
- DWORD TotalNumberOfClusters;
-
- /* GetDiskFreeSpaceEx is only available in NT and Win95 post-OSR2,
- so we have to jump through some hoops to see if the function
- exists. */
- kernel32 = LoadLibrary("kernel32.dll");
- if (kernel32) {
- gdfse = GetProcAddress(kernel32, "GetDiskFreeSpaceExA");
- /* It's available, so we can call it. */
- if (gdfse) {
- func = (gdfse_func)gdfse;
- if (func(path,
- &FreeBytesAvailableToCaller,
- &TotalNumberOfBytes,
- &TotalNumberOfFreeBytes) == 0) {
- php_error_docref(NULL, E_WARNING, "%s", php_win_err());
- return FAILURE;
- }
-
- /* i know - this is ugly, but i works <thies@thieso.net> */
- bytestotal = TotalNumberOfBytes.HighPart *
- (double) (((zend_ulong)1) << 31) * 2.0 +
- TotalNumberOfBytes.LowPart;
- } else { /* If it's not available, we just use GetDiskFreeSpace */
- if (GetDiskFreeSpace(path,
- &SectorsPerCluster, &BytesPerSector,
- &NumberOfFreeClusters, &TotalNumberOfClusters) == 0) {
- php_error_docref(NULL, E_WARNING, "%s", php_win_err());
- return FAILURE;
- }
- bytestotal = (double)TotalNumberOfClusters * (double)SectorsPerCluster * (double)BytesPerSector;
- }
- } else {
- php_error_docref(NULL, E_WARNING, "Unable to load kernel32.dll");
+ if (GetDiskFreeSpaceExW(path, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, &TotalNumberOfFreeBytes) == 0) {
+ php_error_docref(NULL, E_WARNING, "%s", php_win_err());
+ PHP_WIN32_IOUTIL_CLEANUP_W()
return FAILURE;
}
- *space = bytestotal;
+ /* i know - this is ugly, but i works <thies@thieso.net> */
+ *space = TotalNumberOfBytes.HighPart * (double) (((zend_ulong)1) << 31) * 2.0 + TotalNumberOfBytes.LowPart;
+
+ PHP_WIN32_IOUTIL_CLEANUP_W()
+
return SUCCESS;
}
/* }}} */
@@ -241,60 +204,22 @@ PHP_FUNCTION(disk_total_space)
static int php_disk_free_space(char *path, double *space) /* {{{ */
#if defined(WINDOWS) /* {{{ */
{
- double bytesfree = 0;
-
- HINSTANCE kernel32;
- FARPROC gdfse;
- typedef BOOL (WINAPI *gdfse_func)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);
- gdfse_func func;
-
- /* These are used by GetDiskFreeSpaceEx, if available. */
ULARGE_INTEGER FreeBytesAvailableToCaller;
ULARGE_INTEGER TotalNumberOfBytes;
ULARGE_INTEGER TotalNumberOfFreeBytes;
+ PHP_WIN32_IOUTIL_INIT_W(path)
- /* These are used by GetDiskFreeSpace otherwise. */
- DWORD SectorsPerCluster;
- DWORD BytesPerSector;
- DWORD NumberOfFreeClusters;
- DWORD TotalNumberOfClusters;
-
- /* GetDiskFreeSpaceEx is only available in NT and Win95 post-OSR2,
- so we have to jump through some hoops to see if the function
- exists. */
- kernel32 = LoadLibrary("kernel32.dll");
- if (kernel32) {
- gdfse = GetProcAddress(kernel32, "GetDiskFreeSpaceExA");
- /* It's available, so we can call it. */
- if (gdfse) {
- func = (gdfse_func)gdfse;
- if (func(path,
- &FreeBytesAvailableToCaller,
- &TotalNumberOfBytes,
- &TotalNumberOfFreeBytes) == 0) {
- php_error_docref(NULL, E_WARNING, "%s", php_win_err());
- return FAILURE;
- }
-
- /* i know - this is ugly, but i works <thies@thieso.net> */
- bytesfree = FreeBytesAvailableToCaller.HighPart *
- (double) (((zend_ulong)1) << 31) * 2.0 +
- FreeBytesAvailableToCaller.LowPart;
- } else { /* If it's not available, we just use GetDiskFreeSpace */
- if (GetDiskFreeSpace(path,
- &SectorsPerCluster, &BytesPerSector,
- &NumberOfFreeClusters, &TotalNumberOfClusters) == 0) {
- php_error_docref(NULL, E_WARNING, "%s", php_win_err());
- return FAILURE;
- }
- bytesfree = (double)NumberOfFreeClusters * (double)SectorsPerCluster * (double)BytesPerSector;
- }
- } else {
- php_error_docref(NULL, E_WARNING, "Unable to load kernel32.dll");
+ if (GetDiskFreeSpaceExW(pathw, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, &TotalNumberOfFreeBytes) == 0) {
+ php_error_docref(NULL, E_WARNING, "%s", php_win_err());
+ PHP_WIN32_IOUTIL_CLEANUP_W()
return FAILURE;
}
- *space = bytesfree;
+ /* i know - this is ugly, but i works <thies@thieso.net> */
+ *space = FreeBytesAvailableToCaller.HighPart * (double) (((zend_ulong)1) << 31) * 2.0 + FreeBytesAvailableToCaller.LowPart;
+
+ PHP_WIN32_IOUTIL_CLEANUP_W()
+
return SUCCESS;
}
/* }}} */