diff --git a/configure b/configure index 6fb9a9ef..284af7b2 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for rufus 3.1. +# Generated by GNU Autoconf 2.69 for rufus 3.2. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='rufus' PACKAGE_TARNAME='rufus' -PACKAGE_VERSION='3.1' -PACKAGE_STRING='rufus 3.1' +PACKAGE_VERSION='3.2' +PACKAGE_STRING='rufus 3.2' PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues' PACKAGE_URL='https://rufus.akeo.ie' @@ -1228,7 +1228,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures rufus 3.1 to adapt to many kinds of systems. +\`configure' configures rufus 3.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1294,7 +1294,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of rufus 3.1:";; + short | recursive ) echo "Configuration of rufus 3.2:";; esac cat <<\_ACEOF @@ -1385,7 +1385,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -rufus configure 3.1 +rufus configure 3.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1440,7 +1440,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by rufus $as_me 3.1, which was +It was created by rufus $as_me 3.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2303,7 +2303,7 @@ fi # Define the identity of the package. PACKAGE='rufus' - VERSION='3.1' + VERSION='3.2' cat >>confdefs.h <<_ACEOF @@ -4481,7 +4481,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by rufus $as_me 3.1, which was +This file was extended by rufus $as_me 3.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -4535,7 +4535,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -rufus config.status 3.1 +rufus config.status 3.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 259f1bd6..5cca5391 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([rufus], [3.1], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.akeo.ie]) +AC_INIT([rufus], [3.2], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.akeo.ie]) AM_INIT_AUTOMAKE([-Wno-portability foreign no-dist no-dependencies]) AC_CONFIG_SRCDIR([src/rufus.c]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/res/appstore/AppxManifest.xml b/res/appstore/AppxManifest.xml index 995d3f74..50ba0f02 100644 --- a/res/appstore/AppxManifest.xml +++ b/res/appstore/AppxManifest.xml @@ -8,7 +8,7 @@ for an interesting struggle, when you also happen to have a comma in one of the fields... --> diff --git a/res/appstore/packme.cmd b/res/appstore/packme.cmd index 57020955..66a8345f 100644 --- a/res/appstore/packme.cmd +++ b/res/appstore/packme.cmd @@ -1,5 +1,5 @@ @echo off -set VERSION=3.1 +set VERSION=3.2 rem Make sure you don't have anything you don't want included in the package, as anything residing in the rem current directory will be included, including any previous .appx, which makes for nice recursion... diff --git a/res/localization/ChangeLog.txt b/res/localization/ChangeLog.txt index b088e23a..6b67596c 100644 --- a/res/localization/ChangeLog.txt +++ b/res/localization/ChangeLog.txt @@ -15,7 +15,10 @@ content. PLEASE, do not just look at this Changelog when updating your translation, but always use the English section of rufus.loc as your base. For instance, MSG_114, that was introduced in v1.0.8 is MORE than one line! -o Version 1.0.23 (2018.??.??) +o Version 1.0.24 (2018.??.??) + - *NEW* MSG_087 + +o Version 1.0.23 (2018.03.27) - All positioning ('m', 's') has now been removed as well as some controls, for the 3.0 UI redesign - *NEW* IDS_DRIVE_PROPERTIES_TXT "Drive Properties" - *NEW* IDS_BOOT_SELECTION_TXT "Boot selection" diff --git a/res/localization/rufus.loc b/res/localization/rufus.loc index 51212061..d772e58e 100644 --- a/res/localization/rufus.loc +++ b/res/localization/rufus.loc @@ -208,7 +208,7 @@ t MSG_032 "UEFI (non CSM)" t MSG_033 "BIOS or UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d pass" -t MSG_035 "%d passes" +t MSG_035 "%d passes %s" t MSG_036 "ISO Image" t MSG_037 "Application" t MSG_038 "Abort" @@ -277,6 +277,7 @@ t MSG_084 "This ISO image seems to use an obsolete version of '%s'.\n" "'%s' exists there, it will be reused automatically." t MSG_085 "Downloading '%s'" t MSG_086 "No image selected" +t MSG_087 "for %s devices" t MSG_088 "Image is too big" t MSG_089 "The image is too big for the selected target." t MSG_090 "Unsupported ISO" @@ -683,7 +684,7 @@ t MSG_032 "UEFI (بدون CSM)" t MSG_033 "BIOS أو UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d تجاوز" -t MSG_035 "%d تجاوزات" +t MSG_035 "%d تجاوزات %s" t MSG_036 "ISO صورة" t MSG_037 "تطبيق" t MSG_038 "توقف" @@ -1135,7 +1136,7 @@ t MSG_032 "UEFI (yox CSM)" t MSG_033 "BIOS və ya UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d Keçid" -t MSG_035 "%d Keçid" +t MSG_035 "%d Keçid %s" t MSG_036 "ISO Əksi" t MSG_037 "Proqram" t MSG_038 "İmtina et" @@ -1582,7 +1583,7 @@ t MSG_030 "%s (Стандартно)" #t MSG_033 "%s дялова схема за UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d Пробег" -t MSG_035 "%d Пробега" +t MSG_035 "%d Пробега %s" t MSG_036 "ISO образ" t MSG_037 "Приложение" t MSG_038 "Прекрати" @@ -2027,7 +2028,7 @@ t MSG_032 "UEFI (非 CSM)" t MSG_033 "BIOS 或 UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d 遍" -t MSG_035 "%d 遍" +t MSG_035 "%d 遍 %s" t MSG_036 "ISO 镜像" t MSG_037 "程序" t MSG_038 "中止" @@ -2470,7 +2471,7 @@ t MSG_032 "UEFI (無 CSM)" t MSG_033 "BIOS 或 UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d 回" -t MSG_035 "%d 回" +t MSG_035 "%d 回 %s" t MSG_036 "ISO 映像" t MSG_037 "程式" t MSG_038 "終止" @@ -2884,7 +2885,7 @@ t MSG_032 "UEFI (bez CSM)" t MSG_033 "BIOS ili UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d prolaz" -t MSG_035 "%d prolaza" +t MSG_035 "%d prolaza %s" t MSG_036 "ISO slika" t MSG_037 "Aplikacija" t MSG_038 "Prekini" @@ -3339,7 +3340,7 @@ t MSG_032 "UEFI (ne CSM)" t MSG_033 "BIOS nebo UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d pokus" -t MSG_035 "%d pokusy" +t MSG_035 "%d pokusy %s" t MSG_036 "Obraz ISO" t MSG_037 "Aplikace" t MSG_038 "Přerušit" @@ -3791,7 +3792,7 @@ t MSG_032 "UEFI (ikke CSM)" t MSG_033 "BIOS eller UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d gennemløb" -t MSG_035 "%d gennemløb" +t MSG_035 "%d gennemløb %s" t MSG_036 "ISO-image" t MSG_037 "Applikation" t MSG_038 "Annuller" @@ -4227,7 +4228,7 @@ t MSG_032 "UEFI (geen CSM)" t MSG_033 "BIOS of UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d Ronde" -t MSG_035 "%d Rondes" +t MSG_035 "%d Rondes %s" t MSG_036 "ISO image" t MSG_037 "Applicatie" t MSG_038 "Afbreken" @@ -4665,7 +4666,7 @@ t MSG_032 "UEFI (ei-CSM)" t MSG_033 "BIOS tai UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d testi" -t MSG_035 "%d testiä" +t MSG_035 "%d testiä %s" t MSG_036 "ISO-kuva" t MSG_037 "Sovellus" t MSG_038 "Keskeytä" @@ -5103,7 +5104,7 @@ t MSG_031 "BIOS (ou UEFI-CSM)" t MSG_032 "UEFI (non CSM)" t MSG_033 "BIOS ou UEFI" t MSG_034 "%d passe" -t MSG_035 "%d passes" +t MSG_035 "%d passes %s" t MSG_036 "Image ISO" t MSG_037 "Application" t MSG_038 "Annuler" @@ -5526,7 +5527,7 @@ t MSG_032 "UEFI (ohne CSM)" t MSG_033 "BIOS oder UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d Durchgang" -t MSG_035 "%d Durchgänge" +t MSG_035 "%d Durchgänge %s" t MSG_036 "ISO-Abbild" t MSG_037 "Programm" t MSG_038 "Abbruch" @@ -5954,7 +5955,7 @@ t MSG_032 "UEFI (εκτός από CSM)" t MSG_033 "BIOS ή UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d Πέρασμα" -t MSG_035 "%d Περάσματα" +t MSG_035 "%d Περάσματα %s" t MSG_036 "Είδωλο ISO" t MSG_037 "Εφαρμογή" t MSG_038 "Τερματισμός" @@ -6410,7 +6411,7 @@ t MSG_032 "UEFI (שאינו CSM)" t MSG_033 "BIOS או UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "מעבר אחד" -t MSG_035 "%d מעברים" +t MSG_035 "%d מעברים %s" t MSG_036 "קובץ ISO" t MSG_037 "יישום" t MSG_038 "ביטול" @@ -6887,7 +6888,7 @@ t MSG_032 "UEFI (nem CSM)" t MSG_033 "BIOS vagy UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d vizsgálva" -t MSG_035 "%d vizsgálva" +t MSG_035 "%d vizsgálva %s" t MSG_036 "ISO kép" t MSG_037 "Alkalmazás" t MSG_038 "Megszakít" @@ -7339,7 +7340,7 @@ t MSG_032 "UEFI (non CSM)" t MSG_033 "BIOS atau UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d kali uji" -t MSG_035 "%d kali uji" +t MSG_035 "%d kali uji %s" t MSG_036 "ISO Image" t MSG_037 "Aplikasi" t MSG_038 "Batal" @@ -7787,7 +7788,7 @@ t MSG_031 "BIOS (o UEFI CSM)" t MSG_032 "UEFI (non CSM)" t MSG_033 "BIOS o UEFI" t MSG_034 "%d test" -t MSG_035 "%d test" +t MSG_035 "%d test %s" t MSG_036 "Immagine ISO" t MSG_037 "Applicazione" t MSG_038 "Annulla" @@ -8227,7 +8228,7 @@ t MSG_032 "UEFI (CSM無効)" t MSG_033 "BIOSまたはUEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d パス" -t MSG_035 "%d パス" +t MSG_035 "%d パス %s" t MSG_036 "ISOイメージ" t MSG_037 "アプリケーション" t MSG_038 "中止" @@ -8696,7 +8697,7 @@ t MSG_032 "UEFI (CSM 지원 안 됨)" t MSG_033 "BIOS 또는 UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "한번만 검사" -t MSG_035 "%d회 검사" +t MSG_035 "%d회 검사 %s" t MSG_036 "ISO 이미지" t MSG_037 "프로그램" t MSG_038 "취소" @@ -9144,7 +9145,7 @@ t MSG_032 "BIOS (bez CSM)" t MSG_033 "BIOS vai UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d mēģ." -t MSG_035 "%d mēģ." +t MSG_035 "%d mēģ. %s" t MSG_036 "ISO virtuālais attēls" t MSG_037 "Programma" t MSG_038 "Pārtraukt" @@ -9594,7 +9595,7 @@ t MSG_032 "UEFI (ne CSM)" t MSG_033 "BIOS arba UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d bandymas" -t MSG_035 "%d bandymai" +t MSG_035 "%d bandymai %s" t MSG_036 "ISO atvaizdas" t MSG_037 "Programa" t MSG_038 "Nutraukti" @@ -10049,7 +10050,7 @@ t MSG_030 "%s (Lalai)" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d kali lulus" -t MSG_035 "%d kali lulus" +t MSG_035 "%d kali lulus %s" t MSG_036 "Imej ISO" t MSG_037 "Aplikasi" t MSG_038 "Batal" @@ -10478,7 +10479,7 @@ t MSG_032 "UEFI (ikke CSM)" t MSG_033 "BIOS eller UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d Passering" -t MSG_035 "%d Passeringer" +t MSG_035 "%d Passeringer %s" t MSG_036 "ISO-bilde" t MSG_037 "Applikasjon" t MSG_038 "Avbryt" @@ -10957,7 +10958,7 @@ t MSG_032 "UEFI (non CSM)" t MSG_033 "BIOS یا UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d گذره" -t MSG_035 "%d گذره" +t MSG_035 "%d گذره %s" t MSG_036 "ایمیج ISO" t MSG_037 "برنامه" t MSG_038 "لغو" @@ -11425,7 +11426,7 @@ t MSG_032 "UEFI (bez CSM)" t MSG_033 "BIOS lub UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d Przebieg" -t MSG_035 "%d Przebiegi" +t MSG_035 "%d Przebiegi %s" t MSG_036 "Obraz ISO" t MSG_037 "Aplikacja" t MSG_038 "Przerwij" @@ -11889,7 +11890,7 @@ t MSG_032 "UEFI (não CSM)" t MSG_033 "BIOS ou UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d passo" -t MSG_035 "%d passos" +t MSG_035 "%d passos %s" t MSG_036 "Imagem ISO" t MSG_037 "Aplicativo" t MSG_038 "Abortar" @@ -12362,7 +12363,7 @@ t MSG_032 "UEFI (não CSM)" t MSG_033 "BIOS ou UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d passo" -t MSG_035 "%d passos" +t MSG_035 "%d passos %s" t MSG_036 "Imagem ISO" t MSG_037 "Aplicação" t MSG_038 "Abortar" @@ -12806,7 +12807,7 @@ t MSG_031 "BIOS (sau UEFI-CSM)" t MSG_032 "UEFI (non CSM)" t MSG_033 "BIOS sau UEFI" t MSG_034 "%d pas" -t MSG_035 "%d pași" +t MSG_035 "%d pași %s" t MSG_036 "Imagine ISO" t MSG_037 "Cerere" t MSG_038 "Anulează" @@ -13231,7 +13232,7 @@ t MSG_032 "UEFI (non-CSM)" t MSG_033 "BIOS или UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d проход" -t MSG_035 "%d прохода" +t MSG_035 "%d прохода %s" t MSG_036 "ISO-образ" t MSG_037 "Приложение" t MSG_038 "Отменить" @@ -13673,7 +13674,7 @@ t MSG_030 "%s (Uobičajeno)" #t MSG_033 "%s particijska šema za UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d sekvenca" -t MSG_035 "%d sekvence" +t MSG_035 "%d sekvence %s" t MSG_036 "ISO datoteke" t MSG_037 "Aplikacija" t MSG_038 "Prekini" @@ -14120,7 +14121,7 @@ t MSG_032 "UEFI (bez CSM)" t MSG_033 "BIOS alebo UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d pokus" -t MSG_035 "%d pokusy" +t MSG_035 "%d pokusy %s" t MSG_036 "Obraz ISO" t MSG_037 "Aplikácia" t MSG_038 "Ukončiť" @@ -14574,7 +14575,7 @@ t MSG_032 "UEFI (brez CSM)" t MSG_033 "BIOS ali UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d prehod" -t MSG_035 "%d prehoda/-i" +t MSG_035 "%d prehoda/-i %s" t MSG_036 "sliko ISO" t MSG_037 "Aplikacija" t MSG_038 "Prekini" @@ -15008,7 +15009,7 @@ t MSG_032 "UEFI (no CSM)" t MSG_033 "BIOS o UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d paso" -t MSG_035 "%d pasos" +t MSG_035 "%d pasos %s" t MSG_036 "Imagen ISO" t MSG_037 "Aplicación" t MSG_038 "Abortar" @@ -15465,7 +15466,7 @@ t MSG_032 "UEFI (icke CSM)" t MSG_033 "BIOS eller UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d gång" -t MSG_035 "%d gånger" +t MSG_035 "%d gånger %s" t MSG_036 "ISO-avbild" t MSG_037 "Program" t MSG_038 "Avbryt" @@ -15924,7 +15925,7 @@ t MSG_032 "UEFI (ที่ไม่ใช่ CSM)" t MSG_033 "BIOS หรือ UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d รอบ" -t MSG_035 "%d รอบ" +t MSG_035 "%d รอบ %s" t MSG_036 "อิมเมจ ISO" t MSG_037 "แอพพลิเคชั่น" t MSG_038 "ยกเลิก" @@ -16391,7 +16392,7 @@ t MSG_032 "UEFI (CSM yok)" t MSG_033 "BIOS ya da UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d Geçiş" -t MSG_035 "%d Geçiş" +t MSG_035 "%d Geçiş %s" t MSG_036 "ISO Yansıması" t MSG_037 "Uygulama" t MSG_038 "Vazgeç" @@ -16845,7 +16846,7 @@ t MSG_032 "UEFI (без CSM)" t MSG_033 "BIOS чи UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "%d прохід" -t MSG_035 "%d проходи" +t MSG_035 "%d проходи %s" t MSG_036 "ISO-образ" t MSG_037 "Додаток" t MSG_038 "Відмінити" @@ -17281,7 +17282,7 @@ t MSG_030 "%s (Mặc định)" #t MSG_033 "Sắp xếp phân vùng %s cho UEFI" # Number of bad block check passes (singular for 1 pass, plural for 2 or more passes) t MSG_034 "Qua %d lần" -t MSG_035 "Qua %d lần" +t MSG_035 "Qua %d lần %s" t MSG_036 "Ảnh ISO" t MSG_037 "Ứng dụng" t MSG_038 "Huỷ bỏ" diff --git a/src/badblocks.c b/src/badblocks.c index 4f7bc9b0..57a4fe43 100644 --- a/src/badblocks.c +++ b/src/badblocks.c @@ -7,7 +7,7 @@ * * Copyright 1995, 1996, 1997, 1998, 1999 by Theodore Ts'o * Copyright 1999 by David Beattie - * Copyright 2011-2016 by Pete Batard + * Copyright 2011-2018 by Pete Batard * * This file is based on the minix file system programs fsck and mkfs * written and copyrighted by Linus Torvalds @@ -350,13 +350,14 @@ static void pattern_fill(unsigned char *buffer, unsigned int pattern, unsigned char bpattern[sizeof(pattern)], *ptr; if (pattern == (unsigned int) ~0) { + PrintInfo(3500, MSG_236); srand((unsigned int)GetTickCount64()); for (ptr = buffer; ptr < buffer + n; ptr++) { // coverity[dont_call] (*ptr) = rand() % (1 << (8 * sizeof(char))); } - PrintInfo(3500, MSG_236); } else { + PrintInfo(3500, MSG_237, pattern); bpattern[0] = 0; for (i = 0; i < sizeof(bpattern); i++) { if (pattern == 0) @@ -372,7 +373,6 @@ static void pattern_fill(unsigned char *buffer, unsigned int pattern, else i--; } - PrintInfo(3500, MSG_237, bpattern[i]); cur_pattern++; } } @@ -422,16 +422,22 @@ static int64_t do_write(HANDLE hDrive, unsigned char * buffer, uint64_t tryout, } static unsigned int test_rw(HANDLE hDrive, blk_t last_block, size_t block_size, blk_t first_block, - size_t blocks_at_once, int nb_passes) + size_t blocks_at_once, int pattern_type, int nb_passes) { + const unsigned int pattern[BADLOCKS_PATTERN_TYPES][BADBLOCK_PATTERN_COUNT] = + { BADBLOCK_PATTERN_SLC, BADCLOCK_PATTERN_MLC, BADBLOCK_PATTERN_TLC }; unsigned char *buffer = NULL, *read_buffer; - const unsigned int pattern[] = BADBLOCK_PATTERNS; int i, pat_idx; unsigned int bb_count = 0; blk_t got, tryout, recover_block = ~0, *blk_id; size_t id_offset; - if ((nb_passes < 1) || (nb_passes > 4)) { + if ((pattern_type < 0) || (pattern_type >= BADLOCKS_PATTERN_TYPES)) { + uprintf("%sInvalid pattern type\n", bb_prefix); + cancel_ops = -1; + return 0; + } + if ((nb_passes < 1) || (nb_passes > BADBLOCK_PATTERN_COUNT)) { uprintf("%sInvalid number of passes\n", bb_prefix); cancel_ops = -1; return 0; @@ -446,26 +452,31 @@ static unsigned int test_rw(HANDLE hDrive, blk_t last_block, size_t block_size, return 0; } - uprintf("%sChecking from block %lu to %lu\n", bb_prefix, - (unsigned long) first_block, (unsigned long) last_block - 1); + uprintf("%sChecking from block %lu to %lu (1 block = %s)\n", bb_prefix, + (unsigned long) first_block, (unsigned long) last_block - 1, + SizeToHumanReadable(BADBLOCK_BLOCK_SIZE, FALSE, FALSE)); nr_pattern = nb_passes; cur_pattern = 0; for (pat_idx = 0; pat_idx < nb_passes; pat_idx++) { - srand((unsigned int)GetTickCount64()); - if (cancel_ops) goto out; + if (cancel_ops) + goto out; + if (detect_fakes && (pat_idx == 0)) { + srand((unsigned int)GetTickCount64()); + id_offset = rand() * (block_size - sizeof(blk_t)) / RAND_MAX; + uprintf("%sUsing offset %d for fake device check\n", bb_prefix, id_offset); + } // coverity[dont_call] - id_offset = rand() * (block_size-sizeof(blk_t)) / RAND_MAX; - pattern_fill(buffer, pattern[pat_idx], blocks_at_once * block_size); - uprintf("%sUsing offset %d for fake device check\n", bb_prefix, id_offset); + pattern_fill(buffer, pattern[pattern_type][pat_idx], blocks_at_once * block_size); num_blocks = last_block - 1; currently_testing = first_block; if (s_flag | v_flag) - uprintf("%sWriting test pattern 0x%02X\n", bb_prefix, pattern[pat_idx]); + uprintf("%sWriting test pattern 0x%02X\n", bb_prefix, pattern[pattern_type][pat_idx]); cur_op = OP_WRITE; tryout = blocks_at_once; while (currently_testing < last_block) { - if (cancel_ops) goto out; + if (cancel_ops) + goto out; if (max_bb && bb_count >= max_bb) { if (s_flag || v_flag) { uprintf(abort_msg); @@ -477,7 +488,7 @@ static unsigned int test_rw(HANDLE hDrive, blk_t last_block, size_t block_size, } if (currently_testing + tryout > last_block) tryout = last_block - currently_testing; - if (detect_fakes) { + if (detect_fakes && (pat_idx == 0)) { /* Add the block number at a fixed (random) offset during each pass to allow for the detection of 'fake' media (eg. 2GB USB masquerading as 16GB) */ for (i=0; i<(int)blocks_at_once; i++) { @@ -525,7 +536,7 @@ static unsigned int test_rw(HANDLE hDrive, blk_t last_block, size_t block_size, } if (currently_testing + tryout > last_block) tryout = last_block - currently_testing; - if (detect_fakes) { + if (detect_fakes && (pat_idx == 0)) { for (i=0; i<(int)blocks_at_once; i++) { blk_id = (blk_t*)(intptr_t)(buffer + id_offset+ i*block_size); *blk_id = (blk_t)(currently_testing + i); @@ -563,11 +574,11 @@ out: return bb_count; } -BOOL BadBlocks(HANDLE hPhysicalDrive, ULONGLONG disk_size, size_t block_size, - int nb_passes, badblocks_report *report, FILE* fd) +BOOL BadBlocks(HANDLE hPhysicalDrive, ULONGLONG disk_size, int nb_passes, + int flash_type, badblocks_report *report, FILE* fd) { errcode_t error_code; - blk_t first_block = 0, last_block = disk_size/block_size; + blk_t last_block = disk_size / BADBLOCK_BLOCK_SIZE; if (report == NULL) return FALSE; num_read_errors = 0; @@ -589,7 +600,7 @@ BOOL BadBlocks(HANDLE hPhysicalDrive, ULONGLONG disk_size, size_t block_size, cancel_ops = 0; /* use a timer to update status every second */ SetTimer(hMainDialog, TID_BADBLOCKS_UPDATE, 1000, alarm_intr); - report->bb_count = test_rw(hPhysicalDrive, last_block, block_size, first_block, BB_BLOCKS_AT_ONCE, nb_passes); + report->bb_count = test_rw(hPhysicalDrive, last_block, BADBLOCK_BLOCK_SIZE, 0, BB_BLOCKS_AT_ONCE, flash_type, nb_passes); KillTimer(hMainDialog, TID_BADBLOCKS_UPDATE); free(bb_list->list); free(bb_list); diff --git a/src/badblocks.h b/src/badblocks.h index 9bd502b7..45f6a303 100644 --- a/src/badblocks.h +++ b/src/badblocks.h @@ -7,7 +7,7 @@ * * Copyright 1995, 1996, 1997, 1998, 1999 by Theodore Ts'o * Copyright 1999 by David Beattie - * Copyright 2011-2013 by Pete Batard + * Copyright 2011-2018 by Pete Batard * * This file is based on the minix file system programs fsck and mkfs * written and copyrighted by Linus Torvalds @@ -55,5 +55,5 @@ typedef struct { /* * Shared prototypes */ -BOOL BadBlocks(HANDLE hPhysicalDrive, ULONGLONG disk_size, size_t block_size, - int test_type, badblocks_report *report, FILE* fd); +BOOL BadBlocks(HANDLE hPhysicalDrive, ULONGLONG disk_size, int nb_passes, + int flash_type, badblocks_report *report, FILE* fd); diff --git a/src/format.c b/src/format.c index a4bf7522..fd106faf 100644 --- a/src/format.c +++ b/src/format.c @@ -1783,6 +1783,7 @@ DWORD WINAPI FormatThread(void* param) if (IsChecked(IDC_BAD_BLOCKS)) { do { + int sel = ComboBox_GetCurSel(hNBPasses); // create a log file for bad blocks report. Since %USERPROFILE% may // have localized characters, we use the UTF-8 API. userdir = getenvU("USERPROFILE"); @@ -1801,8 +1802,8 @@ DWORD WINAPI FormatThread(void* param) fflush(log_fd); } - if (!BadBlocks(hPhysicalDrive, SelectedDrive.DiskSize, SelectedDrive.SectorSize, - ComboBox_GetCurSel(hNBPasses)+1, &report, log_fd)) { + if (!BadBlocks(hPhysicalDrive, SelectedDrive.DiskSize, (sel >= 2) ? 4 : sel +1, + (sel < 2) ? 0 : sel - 2, &report, log_fd)) { uprintf("Bad blocks: Check failed.\n"); if (!IS_ERROR(FormatStatus)) FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_BADBLOCKS_FAILURE); diff --git a/src/rufus.c b/src/rufus.c index fedab505..026ee9ce 100644 --- a/src/rufus.c +++ b/src/rufus.c @@ -51,6 +51,7 @@ static const char* cmdline_hogger = "rufus.com"; static const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "UDF", "exFAT", "ReFS" }; +static const char* flash_type[BADLOCKS_PATTERN_TYPES] = { "SLC", "MLC", "TLC" }; static const char* ep_reg = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"; static const char* vs_reg = "Software\\Microsoft\\VisualStudio"; // Number of steps for each FS for FCC_STRUCTURE_PROGRESS @@ -1164,9 +1165,12 @@ static __inline void MoveCtrlY(HWND hDlg, int nID, int vertical_shift) { static void SetPassesTooltip(void) { - const unsigned char pattern[] = BADBLOCK_PATTERNS; - CreateTooltip(hNBPasses, lmprintf(MSG_153 + ComboBox_GetCurSel(hNBPasses), - pattern[0], pattern[1], pattern[2], pattern[3]), -1); + const unsigned int pattern[BADLOCKS_PATTERN_TYPES][BADBLOCK_PATTERN_COUNT] = + { BADBLOCK_PATTERN_SLC, BADCLOCK_PATTERN_MLC, BADBLOCK_PATTERN_TLC }; + int sel = ComboBox_GetCurSel(hNBPasses); + int type = (sel < 2) ? 0 : sel - 2; + CreateTooltip(hNBPasses, lmprintf(MSG_153 + ((sel >= 2) ? 3 : sel), + pattern[type][0], pattern[type][1], pattern[type][2], pattern[type][3]), -1); } static void ResizeDialogs(int shift) @@ -2196,9 +2200,10 @@ static void GetHalfDropwdownWidth(HWND hDlg) hw = max(hw, GetTextSize(GetDlgItem(hDlg, IDC_TARGET_SYSTEM), lmprintf(msg_id)).cx); // Just in case, we also do the number of passes - for (i = 1; i <= 4; i++) - hw = max(hw, GetTextSize(GetDlgItem(hDlg, IDC_TARGET_SYSTEM), - lmprintf((i == 1) ? MSG_034 : MSG_035, i)).cx); + for (i = 1; i <= 5; i++) { + char* msg = (i == 1) ? lmprintf(MSG_034, 1) : lmprintf(MSG_035, (i == 2) ? 2 : 4, (i == 2) ? "" : lmprintf(MSG_087, flash_type[i - 3])); + hw = max(hw, GetTextSize(GetDlgItem(hDlg, IDC_TARGET_SYSTEM), msg).cx); + } // Finally, we must ensure that we'll have enough space for the 2 checkbox controls // that end up with a half dropdown @@ -2528,7 +2533,7 @@ static void InitDialog(HWND hDlg) DWORD len; HDC hDC; int i, lfHeight; - char tmp[128], *token, *buf, *ext; + char tmp[128], *token, *buf, *ext, *msg; static char* resource[2] = { MAKEINTRESOURCEA(IDR_SL_LDLINUX_V4_SYS), MAKEINTRESOURCEA(IDR_SL_LDLINUX_V6_SYS) }; #ifdef RUFUS_TEST @@ -2634,8 +2639,9 @@ static void InitDialog(HWND hDlg) SendMessage(hProgress, PBM_SETRANGE, 0, (MAX_PROGRESS<<16) & 0xFFFF0000); // Fill up the passes - for (i=0; i<4; i++) { - IGNORE_RETVAL(ComboBox_AddStringU(hNBPasses, lmprintf((i==0)?MSG_034:MSG_035, i+1))); + for (i = 1; i <= 5; i++) { + msg = (i == 1) ? lmprintf(MSG_034, 1) : lmprintf(MSG_035, (i == 2) ? 2 : 4, (i == 2) ? "" : lmprintf(MSG_087, flash_type[i - 3])); + IGNORE_RETVAL(ComboBox_AddStringU(hNBPasses, msg)); } IGNORE_RETVAL(ComboBox_SetCurSel(hNBPasses, 0)); SetPassesTooltip(); diff --git a/src/rufus.h b/src/rufus.h index 04c70a75..05a538e6 100644 --- a/src/rufus.h +++ b/src/rufus.h @@ -67,7 +67,12 @@ #define MARQUEE_TIMER_REFRESH 10 // Time between progress bar marquee refreshes, in ms #define FS_DEFAULT FS_FAT32 #define SINGLE_CLUSTERSIZE_DEFAULT 0x00000100 -#define BADBLOCK_PATTERNS {0xaa, 0x55, 0xff, 0x00} +#define BADLOCKS_PATTERN_TYPES 3 +#define BADBLOCK_PATTERN_COUNT 4 +#define BADBLOCK_PATTERN_SLC {0x00, 0xff, 0x55, 0xaa} +#define BADCLOCK_PATTERN_MLC {0x00, 0xff, 0x33, 0xcc} +#define BADBLOCK_PATTERN_TLC {0x00, 0xff, 0x1c71c7, 0xe38e38} +#define BADBLOCK_BLOCK_SIZE (128 * 1024) #define LARGE_FAT32_SIZE (32*1073741824LL) // Size at which we need to use fat32format #define UDF_FORMAT_SPEED 3.1f // Speed estimate at which we expect UDF drives to be formatted (GB/s) #define UDF_FORMAT_WARN 20 // Duration (in seconds) above which we warn about long UDF formatting times diff --git a/src/rufus.rc b/src/rufus.rc index 06a27776..62278d93 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 232, 326 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Rufus 3.1.1323" +CAPTION "Rufus 3.2.1324" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP @@ -389,8 +389,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,1,1323,0 - PRODUCTVERSION 3,1,1323,0 + FILEVERSION 3,2,1324,0 + PRODUCTVERSION 3,2,1324,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -407,13 +407,13 @@ BEGIN BEGIN VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "3.1.1323" + VALUE "FileVersion", "3.2.1324" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", " 2011-2018 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" VALUE "OriginalFilename", "rufus.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "3.1.1323" + VALUE "ProductVersion", "3.2.1324" END END BLOCK "VarFileInfo"