1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
//function for use fsusage
#ifdef _WIN32
#include <io.h>
#include <dcpp/stdinc.h>
#include <dcpp/Text.h>
#else //_WIN32
extern "C" {
#include "fsusage.h"
}
#endif //_WIN32
#include "freespace.h"
bool FreeSpace::FreeDiscSpace ( std::string path, unsigned long long * res, unsigned long long * res2) {
if ( !res ) {
return false;
}
#ifdef _WIN32
ULARGE_INTEGER lpFreeBytesAvailableToCaller; // receives the number of bytes on
// disk available to the caller
ULARGE_INTEGER lpTotalNumberOfBytes; // receives the number of bytes on disk
ULARGE_INTEGER lpTotalNumberOfFreeBytes; // receives the free bytes on disk
if ( GetDiskFreeSpaceExW( (const WCHAR*)dcpp::Text::utf8ToWide(path).c_str(), &lpFreeBytesAvailableToCaller,
&lpTotalNumberOfBytes,
&lpTotalNumberOfFreeBytes ) == true ) {
*res = lpTotalNumberOfFreeBytes.QuadPart;
*res2 = lpTotalNumberOfBytes.QuadPart;
return true;
} else {
return false;
}
#else //_WIN32
struct fs_usage fsp;
if ( get_fs_usage(path.c_str(),path.c_str(),&fsp) == 0 ) {
*res = fsp.fsu_bavail*fsp.fsu_blocksize;
*res2 =fsp.fsu_blocks*fsp.fsu_blocksize;
return true;
} else {
return false;
}
#endif //_WIN32
}
|