mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[core] use GetTickCount64() always where possible
* Damn you XP!!! * Also some more code cleanup
This commit is contained in:
parent
d20eb9262b
commit
250d46e401
15 changed files with 67 additions and 54 deletions
|
@ -778,8 +778,8 @@ INT_PTR CALLBACK ChecksumCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM
|
|||
DWORD WINAPI SumThread(void* param)
|
||||
{
|
||||
HANDLE h = INVALID_HANDLE_VALUE;
|
||||
DWORD rSize = 0, LastRefresh = 0;
|
||||
uint64_t rb;
|
||||
DWORD rSize = 0;
|
||||
uint64_t rb, LastRefresh = 0;
|
||||
char buffer[4096];
|
||||
SHA1_CONTEXT sha1_ctx;
|
||||
SHA256_CONTEXT sha256_ctx;
|
||||
|
@ -804,8 +804,8 @@ DWORD WINAPI SumThread(void* param)
|
|||
md5_init(&md5_ctx);
|
||||
|
||||
for (rb = 0; ; rb += rSize) {
|
||||
if (GetTickCount() > LastRefresh + 25) {
|
||||
LastRefresh = GetTickCount();
|
||||
if (_GetTickCount64() > LastRefresh + 25) {
|
||||
LastRefresh = _GetTickCount64();
|
||||
format_percent = (100.0f*rb) / (1.0f*img_report.projected_size);
|
||||
PrintInfo(0, MSG_271, format_percent);
|
||||
SendMessage(hProgress, PBM_SETPOS, (WPARAM)((format_percent/100.0f)*MAX_PROGRESS), 0);
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "rufus.h"
|
||||
#include "missing.h"
|
||||
#include "resource.h"
|
||||
|
||||
#include "dos.h"
|
||||
|
@ -325,7 +326,7 @@ static BOOL ExtractMSDOS(const char* path)
|
|||
goto out;
|
||||
|
||||
// Sanity check
|
||||
if (DiskImageSize < 700*1024) {
|
||||
if (DiskImageSize < 700*KB) {
|
||||
uprintf("MS-DOS disk image is too small (%d bytes)\n", dllname, DiskImageSize);
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -1189,7 +1189,7 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
// This helps us reselect the partition scheme option that was used when creating the
|
||||
// drive in Rufus. As far as I can tell, Windows doesn't care much if this signature
|
||||
// isn't unique for USB drives.
|
||||
CreateDisk.Mbr.Signature = mbr_uefi_marker?MBR_UEFI_MARKER:GetTickCount();
|
||||
CreateDisk.Mbr.Signature = mbr_uefi_marker?MBR_UEFI_MARKER:(DWORD)_GetTickCount64();
|
||||
|
||||
DriveLayoutEx.PartitionStyle = PARTITION_STYLE_MBR;
|
||||
DriveLayoutEx.PartitionCount = 4; // Must be multiple of 4 for MBR
|
||||
|
|
22
src/format.c
22
src/format.c
|
@ -55,7 +55,7 @@
|
|||
*/
|
||||
DWORD FormatStatus;
|
||||
badblocks_report report;
|
||||
static DWORD LastRefresh;
|
||||
static uint64_t LastRefresh;
|
||||
static float format_percent = 0.0f;
|
||||
static int task_number = 0;
|
||||
extern const int nb_steps[FS_MAX];
|
||||
|
@ -623,8 +623,8 @@ static BOOL FormatFAT32(DWORD DriveIndex)
|
|||
|
||||
format_percent = 0.0f;
|
||||
for (i=0; i<(SystemAreaSize+BurstSize-1); i+=BurstSize) {
|
||||
if (GetTickCount() > LastRefresh + 25) {
|
||||
LastRefresh = GetTickCount();
|
||||
if (_GetTickCount64() > LastRefresh + 25) {
|
||||
LastRefresh = _GetTickCount64();
|
||||
format_percent = (100.0f*i)/(1.0f*(SystemAreaSize+BurstSize));
|
||||
PrintInfo(0, MSG_217, format_percent);
|
||||
UpdateProgress(OP_FORMAT, format_percent);
|
||||
|
@ -1460,8 +1460,8 @@ DWORD WINAPI CloseFormatPromptThread(LPVOID param) {
|
|||
|
||||
void update_progress(const uint64_t processed_bytes)
|
||||
{
|
||||
if (GetTickCount() > LastRefresh + 25) {
|
||||
LastRefresh = GetTickCount();
|
||||
if (_GetTickCount64() > LastRefresh + 25) {
|
||||
LastRefresh = _GetTickCount64();
|
||||
format_percent = (100.0f*processed_bytes)/(1.0f*img_report.projected_size);
|
||||
PrintInfo(0, MSG_261, format_percent);
|
||||
UpdateProgress(OP_FORMAT, format_percent);
|
||||
|
@ -1613,8 +1613,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747.aspx does buffer sector alignment
|
||||
aligned_buffer = ((void *)((((uintptr_t)(buffer)) + (SectorSize)-1) & (~(((uintptr_t)(SectorSize)) - 1))));
|
||||
for (wb = 0, wSize = 0; wb < (uint64_t)SelectedDrive.DiskSize; wb += wSize) {
|
||||
if (GetTickCount() > LastRefresh + 25) {
|
||||
LastRefresh = GetTickCount();
|
||||
if (_GetTickCount64() > LastRefresh + 25) {
|
||||
LastRefresh = _GetTickCount64();
|
||||
format_percent = (100.0f*wb) / (1.0f*SelectedDrive.DiskSize);
|
||||
PrintInfo(0, MSG_286, format_percent);
|
||||
UpdateProgress(OP_FORMAT, format_percent);
|
||||
|
@ -1762,8 +1762,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
}
|
||||
if (rSize == 0)
|
||||
break;
|
||||
if (GetTickCount() > LastRefresh + 25) {
|
||||
LastRefresh = GetTickCount();
|
||||
if (_GetTickCount64() > LastRefresh + 25) {
|
||||
LastRefresh = _GetTickCount64();
|
||||
format_percent = (100.0f*wb)/(1.0f*img_report.projected_size);
|
||||
PrintInfo(0, MSG_261, format_percent);
|
||||
UpdateProgress(OP_FORMAT, format_percent);
|
||||
|
@ -2084,8 +2084,8 @@ DWORD WINAPI SaveImageThread(void* param)
|
|||
}
|
||||
if (rSize == 0)
|
||||
break;
|
||||
if (GetTickCount() > LastRefresh + 25) {
|
||||
LastRefresh = GetTickCount();
|
||||
if (_GetTickCount64() > LastRefresh + 25) {
|
||||
LastRefresh = _GetTickCount64();
|
||||
format_percent = (100.0f*wb)/(1.0f*SelectedDrive.DiskSize);
|
||||
PrintInfo(0, MSG_261, format_percent);
|
||||
UpdateProgress(OP_FORMAT, format_percent);
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "rufus.h"
|
||||
#include "missing.h"
|
||||
#include "resource.h"
|
||||
#include "msapi_utf8.h"
|
||||
|
||||
|
|
|
@ -446,7 +446,7 @@ static void CALLBACK OutputMessageTimeout(HWND hWnd, UINT uMsg, UINT_PTR idEvent
|
|||
KillTimer(hMainDialog, idEvent);
|
||||
bOutputTimerArmed[i] = FALSE;
|
||||
PrintMessage[i](output_msg[i]);
|
||||
last_msg_time[i] = GetTickCount64();
|
||||
last_msg_time[i] = _GetTickCount64();
|
||||
}
|
||||
|
||||
static void OutputMessage(BOOL info, char* msg)
|
||||
|
@ -459,7 +459,7 @@ static void OutputMessage(BOOL info, char* msg)
|
|||
output_msg[i] = msg;
|
||||
} else {
|
||||
// Find if we need to arm a timer
|
||||
delta = GetTickCount64() - last_msg_time[i];
|
||||
delta = _GetTickCount64() - last_msg_time[i];
|
||||
if (delta < MSG_DELAY) {
|
||||
// Not enough time has elapsed since our last output => arm a timer
|
||||
output_msg[i] = msg;
|
||||
|
@ -467,7 +467,7 @@ static void OutputMessage(BOOL info, char* msg)
|
|||
bOutputTimerArmed[i] = TRUE;
|
||||
} else {
|
||||
PrintMessage[i](msg);
|
||||
last_msg_time[i] = GetTickCount64();
|
||||
last_msg_time[i] = _GetTickCount64();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,6 +51,12 @@ static __inline void *_reallocf(void *ptr, size_t size) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* Why oh why does Microsoft have to make everybody suffer with their braindead use of Unicode? */
|
||||
#define _RT_ICON MAKEINTRESOURCEA(3)
|
||||
#define _RT_DIALOG MAKEINTRESOURCEA(5)
|
||||
#define _RT_RCDATA MAKEINTRESOURCEA(10)
|
||||
#define _RT_GROUP_ICON MAKEINTRESOURCEA((ULONG_PTR)(MAKEINTRESOURCEA(3) + 11))
|
||||
|
||||
/* UI redefinitions for WDK and MinGW */
|
||||
#ifndef PBM_SETSTATE
|
||||
#define PBM_SETSTATE (WM_USER+16)
|
||||
|
@ -212,3 +218,13 @@ typedef struct _ATTACH_VIRTUAL_DISK_PARAMETERS {
|
|||
#if !defined(ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY)
|
||||
#define ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY (INTERNET_ERROR_BASE + 174)
|
||||
#endif
|
||||
|
||||
/* Clang/MinGW32 has an issue with intptr_t */
|
||||
#ifndef _UINTPTR_T_DEFINED
|
||||
#define _UINTPTR_T_DEFINED
|
||||
#ifdef _WIN64
|
||||
typedef unsigned __int64 uintptr_t;
|
||||
#else
|
||||
typedef unsigned int uintptr_t;
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include <inttypes.h>
|
||||
|
||||
#include "rufus.h"
|
||||
#include "missing.h"
|
||||
#include "resource.h"
|
||||
#include "msapi_utf8.h"
|
||||
#include "localization.h"
|
||||
|
@ -38,7 +39,7 @@
|
|||
#include "settings.h"
|
||||
|
||||
/* Maximum download chunk size, in bytes */
|
||||
#define DOWNLOAD_BUFFER_SIZE 10240
|
||||
#define DOWNLOAD_BUFFER_SIZE 10*KB
|
||||
/* Default delay between update checks (1 day) */
|
||||
#define DEFAULT_UPDATE_INTERVAL (24*3600)
|
||||
|
||||
|
|
13
src/rufus.c
13
src/rufus.c
|
@ -94,6 +94,7 @@ OPENED_LIBRARIES_VARS;
|
|||
HINSTANCE hMainInstance;
|
||||
HWND hMainDialog, hLangToolbar = NULL, hUpdatesDlg = NULL;
|
||||
MY_BUTTON_IMAGELIST bi_iso = { 0 }, bi_up = { 0 }, bi_down = { 0 };
|
||||
GetTickCount64_t pfGetTickCount64 = NULL;
|
||||
char szFolderPath[MAX_PATH], app_dir[MAX_PATH], system_dir[MAX_PATH], sysnative_dir[MAX_PATH];
|
||||
char* image_path = NULL;
|
||||
float fScale = 1.0f;
|
||||
|
@ -2038,7 +2039,8 @@ void SaveVHD(void)
|
|||
*/
|
||||
static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static DWORD DeviceNum = 0, LastRefresh = 0;
|
||||
static DWORD DeviceNum = 0;
|
||||
static uint64_t LastRefresh = 0;
|
||||
static BOOL first_log_display = TRUE, isMarquee = FALSE;
|
||||
static ULONG ulRegister = 0;
|
||||
static LPITEMIDLIST pidlDesktop = NULL;
|
||||
|
@ -2078,15 +2080,15 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
case DBT_DEVICEARRIVAL:
|
||||
case DBT_DEVICEREMOVECOMPLETE:
|
||||
case DBT_CUSTOMEVENT: // Sent by our timer refresh function or for card reader media change
|
||||
LastRefresh = GetTickCount(); // Don't care about 49.7 days rollback of GetTickCount()
|
||||
LastRefresh = _GetTickCount64();
|
||||
KillTimer(hMainDialog, TID_REFRESH_TIMER);
|
||||
GetUSBDevices((DWORD)ComboBox_GetItemData(hDeviceList, ComboBox_GetCurSel(hDeviceList)));
|
||||
user_changed_label = FALSE;
|
||||
return (INT_PTR)TRUE;
|
||||
case DBT_DEVNODES_CHANGED:
|
||||
// If it's been more than a second since last device refresh, arm a refresh timer
|
||||
if (GetTickCount() > LastRefresh + 1000) {
|
||||
LastRefresh = GetTickCount();
|
||||
if (_GetTickCount64() > LastRefresh + 1000) {
|
||||
LastRefresh = _GetTickCount64();
|
||||
SetTimer(hMainDialog, TID_REFRESH_TIMER, 1000, RefreshTimer);
|
||||
}
|
||||
break;
|
||||
|
@ -2789,6 +2791,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||
#endif
|
||||
|
||||
uprintf("*** " APPLICATION_NAME " init ***\n");
|
||||
PF_INIT(GetTickCount64, kernel32);
|
||||
|
||||
// Reattach the console, if we were started from commandline
|
||||
if (AttachConsole(ATTACH_PARENT_PROCESS) != 0) {
|
||||
|
@ -3009,7 +3012,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||
uprintf("Failed to enable AutoMount");
|
||||
}
|
||||
}
|
||||
srand((unsigned int)GetTickCount());
|
||||
srand((unsigned int)_GetTickCount64());
|
||||
|
||||
relaunch:
|
||||
uprintf("localization: using locale '%s'\n", selected_locale->txt[0]);
|
||||
|
|
21
src/rufus.h
21
src/rufus.h
|
@ -23,7 +23,7 @@
|
|||
#if defined(_MSC_VER)
|
||||
// Disable some VS2012 Code Analysis warnings
|
||||
#pragma warning(disable: 4996) // Ignore deprecated (eg. GetVersionEx()), as we have to contend with XP
|
||||
#pragma warning(disable: 28159) // VS2012 wants us to use GetTickCount64(), but it's not available on XP
|
||||
#pragma warning(disable: 28159) // We use GetTickCount64() where possible, but it's not available on XP
|
||||
#pragma warning(disable: 6258) // I know what I'm using TerminateThread for
|
||||
#endif
|
||||
|
||||
|
@ -537,16 +537,6 @@ static __inline HMODULE GetLibraryHandle(char* szLibraryName) {
|
|||
if (pf##proc == NULL) {uprintf("Unable to locate %s() in %s.dll: %s\n", \
|
||||
#proc, #name, WindowsErrorString()); goto out;} } while(0)
|
||||
|
||||
/* Clang/MinGW32 has an issue with intptr_t */
|
||||
#ifndef _UINTPTR_T_DEFINED
|
||||
#define _UINTPTR_T_DEFINED
|
||||
#ifdef _WIN64
|
||||
typedef unsigned __int64 uintptr_t;
|
||||
#else
|
||||
typedef unsigned int uintptr_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Custom application errors */
|
||||
#define FAC(f) (f<<16)
|
||||
#define APPERR(err) (APPLICATION_ERROR_MASK|err)
|
||||
|
@ -563,8 +553,7 @@ static __inline HMODULE GetLibraryHandle(char* szLibraryName) {
|
|||
#define ERROR_CANT_ASSIGN_LETTER 0x120B
|
||||
#define ERROR_CANT_MOUNT_VOLUME 0x120C
|
||||
|
||||
/* Why oh why does Microsoft have to make everybody suffer with their braindead use of Unicode? */
|
||||
#define _RT_ICON MAKEINTRESOURCEA(3)
|
||||
#define _RT_DIALOG MAKEINTRESOURCEA(5)
|
||||
#define _RT_RCDATA MAKEINTRESOURCEA(10)
|
||||
#define _RT_GROUP_ICON MAKEINTRESOURCEA((ULONG_PTR)(MAKEINTRESOURCEA(3) + 11))
|
||||
/* GetTickCount64 not being available on XP is a massive bother */
|
||||
PF_TYPE(WINAPI, ULONGLONG, GetTickCount64, (void));
|
||||
extern GetTickCount64_t pfGetTickCount64;
|
||||
#define _GetTickCount64() ((pfGetTickCount64 != NULL)?(uint64_t)pfGetTickCount64():(uint64_t)GetTickCount())
|
||||
|
|
10
src/rufus.rc
10
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|||
IDD_DIALOG DIALOGEX 12, 12, 242, 376
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_ACCEPTFILES
|
||||
CAPTION "Rufus 2.8.866"
|
||||
CAPTION "Rufus 2.8.867"
|
||||
FONT 8, "Segoe UI Symbol", 400, 0, 0x0
|
||||
BEGIN
|
||||
LTEXT "Device",IDS_DEVICE_TXT,9,6,200,8
|
||||
|
@ -320,8 +320,8 @@ END
|
|||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 2,8,866,0
|
||||
PRODUCTVERSION 2,8,866,0
|
||||
FILEVERSION 2,8,867,0
|
||||
PRODUCTVERSION 2,8,867,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
@ -338,13 +338,13 @@ BEGIN
|
|||
BEGIN
|
||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||
VALUE "FileDescription", "Rufus"
|
||||
VALUE "FileVersion", "2.8.866"
|
||||
VALUE "FileVersion", "2.8.867"
|
||||
VALUE "InternalName", "Rufus"
|
||||
VALUE "LegalCopyright", "© 2011-2016 Pete Batard (GPL v3)"
|
||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||
VALUE "OriginalFilename", "rufus.exe"
|
||||
VALUE "ProductName", "Rufus"
|
||||
VALUE "ProductVersion", "2.8.866"
|
||||
VALUE "ProductVersion", "2.8.867"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
|
|
@ -31,7 +31,7 @@ extern char* ini_file;
|
|||
#define SETTING_LAST_UPDATE "LastUpdateCheck"
|
||||
#define SETTING_UPDATE_INTERVAL "UpdateCheckInterval"
|
||||
#define SETTING_INCLUDE_BETAS "CheckForBetas"
|
||||
#define SETTING_COMM_CHECK "CommCheck"
|
||||
#define SETTING_COMM_CHECK "CommCheck64"
|
||||
#define SETTING_LOCALE "Locale"
|
||||
#define SETTING_DISABLE_LGP "DisableLGP"
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <richedit.h>
|
||||
|
||||
#include "rufus.h"
|
||||
#include "missing.h"
|
||||
#include "resource.h"
|
||||
#include "msapi_utf8.h"
|
||||
#include "localization.h"
|
||||
|
@ -1358,14 +1359,14 @@ INT_PTR CALLBACK UpdateCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM l
|
|||
BOOL SetUpdateCheck(void)
|
||||
{
|
||||
BOOL enable_updates;
|
||||
DWORD commcheck = GetTickCount();
|
||||
uint64_t commcheck = _GetTickCount64();
|
||||
notification_info more_info = { IDD_UPDATE_POLICY, UpdateCallback };
|
||||
char filename[MAX_PATH] = "", exename[] = APPLICATION_NAME ".exe";
|
||||
size_t fn_len, exe_len;
|
||||
|
||||
// Test if we can read and write settings. If not, forget it.
|
||||
WriteSetting32(SETTING_COMM_CHECK, commcheck);
|
||||
if (ReadSetting32(SETTING_COMM_CHECK) != commcheck)
|
||||
WriteSetting64(SETTING_COMM_CHECK, commcheck);
|
||||
if (ReadSetting64(SETTING_COMM_CHECK) != commcheck)
|
||||
return FALSE;
|
||||
settings_commcheck = TRUE;
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <ctype.h>
|
||||
|
||||
#include "rufus.h"
|
||||
#include "missing.h"
|
||||
#include "resource.h"
|
||||
#include "msapi_utf8.h"
|
||||
#include "localization.h"
|
||||
|
|
|
@ -103,7 +103,7 @@ static char sevenzip_path[MAX_PATH];
|
|||
static const char conectix_str[] = VHD_FOOTER_COOKIE;
|
||||
static uint32_t wim_nb_files, wim_proc_files;
|
||||
static BOOL count_files;
|
||||
static DWORD LastRefresh;
|
||||
static uint64_t LastRefresh;
|
||||
|
||||
static BOOL Get7ZipPath(void)
|
||||
{
|
||||
|
@ -573,12 +573,12 @@ DWORD WINAPI WimProgressCallback(DWORD dwMsgId, WPARAM wParam, LPARAM lParam, PV
|
|||
wim_nb_files++;
|
||||
} else {
|
||||
wim_proc_files++;
|
||||
if (GetTickCount() > LastRefresh + 100) {
|
||||
if (_GetTickCount64() > LastRefresh + 100) {
|
||||
// At the end of an actual apply, the WIM API re-lists a bunch of directories it
|
||||
// already processed, so we end up with more entries than counted - ignore those.
|
||||
if (wim_proc_files > wim_nb_files)
|
||||
wim_proc_files = wim_nb_files;
|
||||
LastRefresh = GetTickCount();
|
||||
LastRefresh = _GetTickCount64();
|
||||
// x^3 progress, so as not to give a better idea right from the onset
|
||||
// as to the dismal speed with which the WIM API can actually apply files...
|
||||
apply_percent = 4.636942595f * ((float)wim_proc_files) / ((float)wim_nb_files);
|
||||
|
|
Loading…
Reference in a new issue