mirror of
https://github.com/php/php-src.git
synced 2024-09-28 21:36:12 +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) /* {{{ */
|
||||
#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;
|
||||
}
|
||||
/* }}} */
|
||||
|
Loading…
Reference in New Issue
Block a user