mirror of
https://github.com/php/php-src.git
synced 2024-09-29 05:46:06 +00:00
add missing mb path support chunk
This commit is contained in:
parent
622d2f41d1
commit
6359c7a2bf
@ -110,59 +110,22 @@ PHP_RSHUTDOWN_FUNCTION(filestat) /* {{{ */
|
|||||||
static int php_disk_total_space(char *path, double *space) /* {{{ */
|
static int php_disk_total_space(char *path, double *space) /* {{{ */
|
||||||
#if defined(WINDOWS) /* {{{ */
|
#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 FreeBytesAvailableToCaller;
|
||||||
ULARGE_INTEGER TotalNumberOfBytes;
|
ULARGE_INTEGER TotalNumberOfBytes;
|
||||||
ULARGE_INTEGER TotalNumberOfFreeBytes;
|
ULARGE_INTEGER TotalNumberOfFreeBytes;
|
||||||
|
PHP_WIN32_IOUTIL_INIT_W(path)
|
||||||
|
|
||||||
/* These are used by GetDiskFreeSpace otherwise. */
|
if (GetDiskFreeSpaceExW(path, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, &TotalNumberOfFreeBytes) == 0) {
|
||||||
DWORD SectorsPerCluster;
|
php_error_docref(NULL, E_WARNING, "%s", php_win_err());
|
||||||
DWORD BytesPerSector;
|
PHP_WIN32_IOUTIL_CLEANUP_W()
|
||||||
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");
|
|
||||||
return FAILURE;
|
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;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
@ -241,60 +204,22 @@ PHP_FUNCTION(disk_total_space)
|
|||||||
static int php_disk_free_space(char *path, double *space) /* {{{ */
|
static int php_disk_free_space(char *path, double *space) /* {{{ */
|
||||||
#if defined(WINDOWS) /* {{{ */
|
#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 FreeBytesAvailableToCaller;
|
||||||
ULARGE_INTEGER TotalNumberOfBytes;
|
ULARGE_INTEGER TotalNumberOfBytes;
|
||||||
ULARGE_INTEGER TotalNumberOfFreeBytes;
|
ULARGE_INTEGER TotalNumberOfFreeBytes;
|
||||||
|
PHP_WIN32_IOUTIL_INIT_W(path)
|
||||||
|
|
||||||
/* These are used by GetDiskFreeSpace otherwise. */
|
if (GetDiskFreeSpaceExW(pathw, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, &TotalNumberOfFreeBytes) == 0) {
|
||||||
DWORD SectorsPerCluster;
|
php_error_docref(NULL, E_WARNING, "%s", php_win_err());
|
||||||
DWORD BytesPerSector;
|
PHP_WIN32_IOUTIL_CLEANUP_W()
|
||||||
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");
|
|
||||||
return FAILURE;
|
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;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
Loading…
Reference in New Issue
Block a user