mirror of
https://github.com/pbatard/rufus.git
synced 2024-08-14 23:57:05 +00:00
[misc] pocketful of enhancement and fixes - part 5
* Check compressed DD images for boot capability * Add DisableLGP setting * Silence libcdio errors when scanning non ISO images * Ensure UI displays "No image selected" when relevant * Also update Bled to latest
This commit is contained in:
parent
63bb91493a
commit
818fa4da88
18 changed files with 156 additions and 70 deletions
|
@ -5,6 +5,8 @@ Features:
|
|||
- Creates DOS bootable USB drives, using FreeDOS or MS-DOS with no external files required
|
||||
- Creates MBR or GPT/UEFI bootable drives
|
||||
- Creates bootable drives from bootable ISOs (Windows, Linux, etc.)
|
||||
- Creates bootbale drives from disk images, including compressed ones
|
||||
- Creates Windows To Go drives
|
||||
- Twice as fast as Microsoft's USB/DVD tool or UNetbootin, on ISO->USB (1)
|
||||
- Can perform bad blocks check, with fake drive detection
|
||||
- Modern and familiar UI, with more than 30 languages natively supported (2)
|
||||
|
|
|
@ -15,3 +15,7 @@ LastUpdateCheck = 13068056756
|
|||
UpdateCheckInterval = 86400
|
||||
; Use this to increases the log verbosity, for the update checks
|
||||
VerboseUpdateCheck = 0
|
||||
; If you are paranoid about apps writing to the registry, you can uncomment the
|
||||
; following. It will disable the Local Group Policy calls that Rufus issues, to
|
||||
; temporarily prevent the *annoying* notices Windows issues about new drives.
|
||||
; DisableLGP = 1
|
|
@ -225,7 +225,6 @@ typedef struct transformer_state_t {
|
|||
|
||||
void init_transformer_state(transformer_state_t *xstate) FAST_FUNC;
|
||||
ssize_t transformer_write(transformer_state_t *xstate, const void *buf, size_t bufsize) FAST_FUNC;
|
||||
ssize_t xtransformer_write(transformer_state_t *xstate, const void *buf, size_t bufsize) FAST_FUNC;
|
||||
int check_signature16(transformer_state_t *xstate, unsigned magic16) FAST_FUNC;
|
||||
|
||||
IF_DESKTOP(long long) int inflate_unzip(transformer_state_t *xstate) FAST_FUNC;
|
||||
|
|
|
@ -28,18 +28,19 @@ jmp_buf bb_error_jmp;
|
|||
|
||||
static long long int unpack_none(transformer_state_t *xstate)
|
||||
{
|
||||
bb_printf("BLED_COMPRESSION_NONE is not supported");
|
||||
bb_printf("This compression type is not supported");
|
||||
return -1;
|
||||
}
|
||||
|
||||
unpacker_t unpacker[BLED_COMPRESSION_MAX] = {
|
||||
unpack_none,
|
||||
inflate_unzip,
|
||||
unpack_none,
|
||||
unpack_Z_stream,
|
||||
unpack_gz_stream,
|
||||
unpack_lzma_stream,
|
||||
unpack_bz2_stream,
|
||||
unpack_xz_stream
|
||||
unpack_xz_stream,
|
||||
unpack_none
|
||||
};
|
||||
|
||||
/* Uncompress file 'src', compressed using 'type', to file 'dst' */
|
||||
|
@ -125,6 +126,48 @@ int64_t bled_uncompress_with_handles(HANDLE hSrc, HANDLE hDst, int type)
|
|||
return unpacker[type](&xstate);
|
||||
}
|
||||
|
||||
/* Uncompress file 'src', compressed using 'type', to buffer 'buf' of size 'size' */
|
||||
int64_t bled_uncompress_to_buffer(const char* src, char* buf, size_t size, int type)
|
||||
{
|
||||
transformer_state_t xstate;
|
||||
int64_t ret;
|
||||
|
||||
if (!bled_initialized)
|
||||
return -1;
|
||||
|
||||
bb_total_rb = 0;
|
||||
init_transformer_state(&xstate);
|
||||
xstate.src_fd = -1;
|
||||
xstate.dst_fd = -1;
|
||||
xstate.check_signature = 1;
|
||||
|
||||
xstate.src_fd = _openU(src, _O_RDONLY | _O_BINARY, 0);
|
||||
if (xstate.src_fd < 0) {
|
||||
bb_printf("Could not open '%s' (errno: %d)", src, errno);
|
||||
goto err;
|
||||
}
|
||||
|
||||
xstate.mem_output_buf = buf;
|
||||
xstate.mem_output_size = 0;
|
||||
xstate.mem_output_size_max = size;
|
||||
|
||||
if ((type < 0) || (type >= BLED_COMPRESSION_MAX)) {
|
||||
bb_printf("unsupported compression format");
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (setjmp(bb_error_jmp))
|
||||
goto err;
|
||||
ret = unpacker[type](&xstate);
|
||||
_close(xstate.src_fd);
|
||||
return ret;
|
||||
|
||||
err:
|
||||
if (xstate.src_fd > 0)
|
||||
_close(xstate.src_fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Initialize the library.
|
||||
* When the parameters are not NULL you can:
|
||||
* - specify the printf-like function you want to use to output message
|
||||
|
@ -150,7 +193,9 @@ void bled_exit(void)
|
|||
bled_printf = NULL;
|
||||
bled_progress = NULL;
|
||||
bled_cancel_request = NULL;
|
||||
if (global_crc32_table)
|
||||
if (global_crc32_table) {
|
||||
free(global_crc32_table);
|
||||
global_crc32_table = NULL;
|
||||
}
|
||||
bled_initialized = false;
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ typedef enum {
|
|||
BLED_COMPRESSION_LZMA, // .lzma
|
||||
BLED_COMPRESSION_BZIP2, // .bz2
|
||||
BLED_COMPRESSION_XZ, // .xz
|
||||
// BLED_COMPRESSION_7ZIP // .7z
|
||||
BLED_COMPRESSION_7ZIP, // .7z
|
||||
BLED_COMPRESSION_MAX
|
||||
} bled_compression_type;
|
||||
|
||||
|
@ -36,6 +36,9 @@ int64_t bled_uncompress(const char* src, const char* dst, int type);
|
|||
/* Uncompress using Windows handles */
|
||||
int64_t bled_uncompress_with_handles(HANDLE hSrc, HANDLE hDst, int type);
|
||||
|
||||
/* Uncompress file 'src', compressed using 'type', to buffer 'buf' of size 'size' */
|
||||
int64_t bled_uncompress_to_buffer(const char* src, char* buf, size_t size, int type);
|
||||
|
||||
/* Initialize the library.
|
||||
* When the parameters are not NULL you can:
|
||||
* - specify the printf-like function you want to use to output message
|
||||
|
|
|
@ -736,7 +736,7 @@ unpack_bz2_stream(transformer_state_t *xstate)
|
|||
IF_DESKTOP(long long total_written = 0;)
|
||||
bunzip_data *bd;
|
||||
char *outbuf;
|
||||
int i;
|
||||
int i, nwrote;
|
||||
unsigned len;
|
||||
|
||||
if (check_signature16(xstate, BZIP2_MAGIC))
|
||||
|
@ -756,8 +756,9 @@ unpack_bz2_stream(transformer_state_t *xstate)
|
|||
i = IOBUF_SIZE - i; /* number of bytes produced */
|
||||
if (i == 0) /* EOF? */
|
||||
break;
|
||||
if (i != transformer_write(xstate, outbuf, i)) {
|
||||
i = RETVAL_SHORT_WRITE;
|
||||
nwrote = (int)transformer_write(xstate, outbuf, i);
|
||||
if (nwrote != i) {
|
||||
i = (nwrote == -ENOSPC)?(int)xstate->mem_output_size_max:RETVAL_SHORT_WRITE;
|
||||
goto release_mem;
|
||||
}
|
||||
IF_DESKTOP(total_written += i;)
|
||||
|
|
|
@ -1003,8 +1003,9 @@ inflate_unzip_internal(STATE_PARAM transformer_state_t *xstate)
|
|||
while (1) {
|
||||
int r = inflate_get_next_window(PASS_STATE_ONLY);
|
||||
nwrote = transformer_write(xstate, gunzip_window, gunzip_outbuf_count);
|
||||
if (nwrote == (ssize_t)-1) {
|
||||
n = -1;
|
||||
if (nwrote != (ssize_t)gunzip_outbuf_count) {
|
||||
huft_free_all(PASS_STATE_ONLY);
|
||||
n = (nwrote <0)?nwrote:-1;
|
||||
goto ret;
|
||||
}
|
||||
IF_DESKTOP(n += nwrote;)
|
||||
|
@ -1226,7 +1227,7 @@ unpack_gz_stream(transformer_state_t *xstate)
|
|||
|
||||
n = inflate_unzip_internal(PASS_STATE xstate);
|
||||
if (n < 0) {
|
||||
total = -1;
|
||||
total = (n == -ENOSPC)?xstate->mem_output_size_max:n;
|
||||
goto ret;
|
||||
}
|
||||
total += n;
|
||||
|
|
|
@ -274,7 +274,11 @@ unpack_Z_stream(transformer_state_t *xstate)
|
|||
}
|
||||
|
||||
if (outpos >= OBUFSIZ) {
|
||||
xtransformer_write(xstate, outbuf, outpos);
|
||||
retval = transformer_write(xstate, outbuf, outpos);
|
||||
if (retval != (ssize_t)outpos) {
|
||||
retval = (retval == -ENOSPC)?xstate->mem_output_size_max:-1;
|
||||
goto err;
|
||||
}
|
||||
IF_DESKTOP(total_written += outpos;)
|
||||
outpos = 0;
|
||||
}
|
||||
|
@ -301,7 +305,9 @@ unpack_Z_stream(transformer_state_t *xstate)
|
|||
} while (rsize > 0);
|
||||
|
||||
if (outpos > 0) {
|
||||
xtransformer_write(xstate, outbuf, outpos);
|
||||
retval = transformer_write(xstate, outbuf, outpos);
|
||||
if (retval != (ssize_t)outpos)
|
||||
retval = (retval == -ENOSPC)?xstate->mem_output_size_max:-1;
|
||||
IF_DESKTOP(total_written += outpos;)
|
||||
}
|
||||
|
||||
|
|
|
@ -220,6 +220,7 @@ unpack_lzma_stream(transformer_state_t *xstate)
|
|||
uint8_t *buffer;
|
||||
uint8_t previous_byte = 0;
|
||||
size_t buffer_pos = 0, global_pos = 0;
|
||||
ssize_t nwrote;
|
||||
int len = 0;
|
||||
int state = 0;
|
||||
uint32_t rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
|
||||
|
@ -307,7 +308,8 @@ unpack_lzma_stream(transformer_state_t *xstate)
|
|||
if (buffer_pos == header.dict_size) {
|
||||
buffer_pos = 0;
|
||||
global_pos += header.dict_size;
|
||||
if (transformer_write(xstate, buffer, header.dict_size) != (ssize_t)header.dict_size)
|
||||
nwrote = transformer_write(xstate, buffer, header.dict_size);
|
||||
if (nwrote != (ssize_t)header.dict_size)
|
||||
goto bad;
|
||||
IF_DESKTOP(total_written += header.dict_size;)
|
||||
}
|
||||
|
@ -441,7 +443,8 @@ unpack_lzma_stream(transformer_state_t *xstate)
|
|||
if (buffer_pos == header.dict_size) {
|
||||
buffer_pos = 0;
|
||||
global_pos += header.dict_size;
|
||||
if (transformer_write(xstate, buffer, header.dict_size) != (ssize_t)header.dict_size)
|
||||
nwrote = transformer_write(xstate, buffer, header.dict_size);
|
||||
if (nwrote != (ssize_t)header.dict_size)
|
||||
goto bad;
|
||||
IF_DESKTOP(total_written += header.dict_size;)
|
||||
}
|
||||
|
@ -456,9 +459,10 @@ unpack_lzma_stream(transformer_state_t *xstate)
|
|||
{
|
||||
IF_NOT_DESKTOP(int total_written = 0; /* success */)
|
||||
IF_DESKTOP(total_written += buffer_pos;)
|
||||
if (transformer_write(xstate, buffer, buffer_pos) != (ssize_t)buffer_pos) {
|
||||
nwrote = transformer_write(xstate, buffer, buffer_pos);
|
||||
if (nwrote != (ssize_t)buffer_pos) {
|
||||
bad:
|
||||
total_written = -1; /* failure */
|
||||
total_written = (nwrote == -ENOSPC)?xstate->mem_output_size_max:-1;
|
||||
}
|
||||
rc_free(rc);
|
||||
free(p);
|
||||
|
|
|
@ -70,7 +70,11 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate
|
|||
|
||||
if (b.out_pos == BUFSIZ) {
|
||||
nwrote = transformer_write(xstate, b.out, b.out_pos);
|
||||
if (nwrote == (ssize_t)-1) {
|
||||
if (nwrote == -ENOSPC) {
|
||||
ret = XZ_BUF_FULL;
|
||||
goto out;
|
||||
}
|
||||
if (nwrote < 0) {
|
||||
ret = XZ_DATA_ERROR;
|
||||
bb_error_msg_and_err("write error (errno: %d)", errno);
|
||||
}
|
||||
|
@ -89,7 +93,11 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate
|
|||
#endif
|
||||
|
||||
nwrote = transformer_write(xstate, b.out, b.out_pos);
|
||||
if (nwrote == (ssize_t)-1) {
|
||||
if (nwrote == -ENOSPC) {
|
||||
ret = XZ_BUF_FULL;
|
||||
goto out;
|
||||
}
|
||||
if (nwrote < 0) {
|
||||
ret = XZ_DATA_ERROR;
|
||||
bb_error_msg_and_err("write error (errno: %d)", errno);
|
||||
}
|
||||
|
@ -99,24 +107,20 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate
|
|||
case XZ_STREAM_END:
|
||||
ret = XZ_OK;
|
||||
goto out;
|
||||
|
||||
case XZ_MEM_ERROR:
|
||||
bb_error_msg_and_err("memory allocation error");
|
||||
|
||||
case XZ_MEMLIMIT_ERROR:
|
||||
bb_error_msg_and_err("memory usage limit error");
|
||||
|
||||
case XZ_FORMAT_ERROR:
|
||||
bb_error_msg_and_err("not a .xz file");
|
||||
|
||||
case XZ_OPTIONS_ERROR:
|
||||
bb_error_msg_and_err("unsupported XZ header option");
|
||||
|
||||
case XZ_DATA_ERROR:
|
||||
bb_error_msg_and_err("corrupted archive");
|
||||
case XZ_BUF_ERROR:
|
||||
bb_error_msg_and_err("corrupted buffer");
|
||||
|
||||
case XZ_BUF_FULL:
|
||||
break;
|
||||
default:
|
||||
bb_error_msg_and_err("XZ decompression bug!");
|
||||
}
|
||||
|
@ -127,5 +131,10 @@ err:
|
|||
xz_dec_end(s);
|
||||
free(in);
|
||||
free(out);
|
||||
return (ret == XZ_OK)?n:-ret;
|
||||
if (ret == XZ_OK)
|
||||
return n;
|
||||
else if (ret == XZ_BUF_FULL)
|
||||
return xstate->mem_output_size_max;
|
||||
else
|
||||
return -ret;
|
||||
}
|
||||
|
|
|
@ -33,20 +33,14 @@ ssize_t FAST_FUNC transformer_write(transformer_state_t *xstate, const void *buf
|
|||
|
||||
if (xstate->mem_output_size_max != 0) {
|
||||
size_t pos = xstate->mem_output_size;
|
||||
size_t size;
|
||||
|
||||
size = (xstate->mem_output_size += bufsize);
|
||||
if (size > xstate->mem_output_size_max) {
|
||||
free(xstate->mem_output_buf);
|
||||
xstate->mem_output_buf = NULL;
|
||||
bb_perror_msg("buffer %u too small", (unsigned)xstate->mem_output_size_max);
|
||||
nwrote = -1;
|
||||
goto ret;
|
||||
}
|
||||
xstate->mem_output_buf = xrealloc(xstate->mem_output_buf, size + 1);
|
||||
memcpy(xstate->mem_output_buf + pos, buf, bufsize);
|
||||
xstate->mem_output_buf[size] = '\0';
|
||||
nwrote = bufsize;
|
||||
if ((pos + bufsize) > xstate->mem_output_size_max) {
|
||||
bufsize = xstate->mem_output_size_max - pos;
|
||||
// Use ENOSPC as an indicator that our buffer is full
|
||||
nwrote = -ENOSPC;
|
||||
}
|
||||
memcpy(xstate->mem_output_buf + pos, buf, bufsize);
|
||||
xstate->mem_output_size += bufsize;
|
||||
} else {
|
||||
nwrote = full_write(xstate->dst_fd, buf, (unsigned)bufsize);
|
||||
if (nwrote != (ssize_t)bufsize) {
|
||||
|
@ -59,15 +53,6 @@ ssize_t FAST_FUNC transformer_write(transformer_state_t *xstate, const void *buf
|
|||
return nwrote;
|
||||
}
|
||||
|
||||
ssize_t FAST_FUNC xtransformer_write(transformer_state_t *xstate, const void *buf, size_t bufsize)
|
||||
{
|
||||
ssize_t nwrote = transformer_write(xstate, buf, bufsize);
|
||||
if (nwrote != (ssize_t)bufsize) {
|
||||
xfunc_die();
|
||||
}
|
||||
return nwrote;
|
||||
}
|
||||
|
||||
void check_errors_in_children(int signo)
|
||||
{
|
||||
int status;
|
||||
|
|
|
@ -125,7 +125,8 @@ enum xz_ret {
|
|||
XZ_FORMAT_ERROR,
|
||||
XZ_OPTIONS_ERROR,
|
||||
XZ_DATA_ERROR,
|
||||
XZ_BUF_ERROR
|
||||
XZ_BUF_ERROR,
|
||||
XZ_BUF_FULL
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -661,7 +661,7 @@ try_iso:
|
|||
|
||||
p_iso = iso9660_open_ext(src_iso, iso_extension_mask);
|
||||
if (p_iso == NULL) {
|
||||
uprintf("Unable to open '%s' as an ISO image.\n", src_iso);
|
||||
uprintf("'%s' doesn't look like an ISO image\n", src_iso);
|
||||
r = 1;
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -263,7 +263,7 @@ static bool
|
|||
check_pvd (const iso9660_pvd_t *p_pvd, cdio_log_level_t log_level)
|
||||
{
|
||||
if ( ISO_VD_PRIMARY != from_711(p_pvd->type) ) {
|
||||
cdio_log (log_level, "unexpected PVD type %d", p_pvd->type);
|
||||
// cdio_log (log_level, "unexpected PVD type %d", p_pvd->type);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -442,7 +442,7 @@ iso9660_ifs_read_pvd_loglevel (const iso9660_t *p_iso,
|
|||
cdio_log_level_t log_level)
|
||||
{
|
||||
if (0 == iso9660_iso_seek_read (p_iso, p_pvd, ISO_PVD_SECTOR, 1)) {
|
||||
cdio_log ( log_level, "error reading PVD sector (%d)", ISO_PVD_SECTOR );
|
||||
// cdio_log ( log_level, "error reading PVD sector (%d)", ISO_PVD_SECTOR );
|
||||
return false;
|
||||
}
|
||||
return check_pvd(p_pvd, log_level);
|
||||
|
|
|
@ -981,11 +981,14 @@ DWORD WINAPI ISOScanThread(LPVOID param)
|
|||
SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0);
|
||||
PrintInfoDebug(0, MSG_203);
|
||||
safe_free(image_path);
|
||||
PrintStatus(0, MSG_086);
|
||||
SetMBRProps();
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (iso_report.is_bootable_img) {
|
||||
uprintf("Using bootable %s image: '%s'", iso_report.is_vhd?"VHD":"disk", image_path);
|
||||
uprintf("'%s' is a %sbootable %s image", image_path,
|
||||
(iso_report.compression_type != BLED_COMPRESSION_NONE)?"compressed ":"", iso_report.is_vhd?"VHD":"disk");
|
||||
selection_default = DT_IMG;
|
||||
} else {
|
||||
DisplayISOProps();
|
||||
|
|
16
src/rufus.rc
16
src/rufus.rc
|
@ -32,7 +32,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
|
||||
CAPTION "Rufus 2.0.614"
|
||||
CAPTION "Rufus 2.0.615"
|
||||
FONT 8, "Segoe UI", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
|
||||
|
@ -157,7 +157,7 @@ END
|
|||
|
||||
IDD_DIALOG_XP DIALOGEX 12, 12, 242, 376
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Rufus 2.0.614"
|
||||
CAPTION "Rufus 2.0.615"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
|
||||
|
@ -283,7 +283,7 @@ END
|
|||
IDD_DIALOG_RTL DIALOGEX 12, 12, 242, 376
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
|
||||
CAPTION "Rufus 2.0.614"
|
||||
CAPTION "Rufus 2.0.615"
|
||||
FONT 8, "Segoe UI", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
|
||||
|
@ -415,7 +415,7 @@ END
|
|||
IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 242, 376
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
|
||||
CAPTION "Rufus 2.0.614"
|
||||
CAPTION "Rufus 2.0.615"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
|
||||
|
@ -671,8 +671,8 @@ END
|
|||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 2,0,614,0
|
||||
PRODUCTVERSION 2,0,614,0
|
||||
FILEVERSION 2,0,615,0
|
||||
PRODUCTVERSION 2,0,615,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
@ -689,13 +689,13 @@ BEGIN
|
|||
BEGIN
|
||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||
VALUE "FileDescription", "Rufus"
|
||||
VALUE "FileVersion", "2.0.614"
|
||||
VALUE "FileVersion", "2.0.615"
|
||||
VALUE "InternalName", "Rufus"
|
||||
VALUE "LegalCopyright", "© 2011-2015 Pete Batard (GPL v3)"
|
||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||
VALUE "OriginalFilename", "rufus.exe"
|
||||
VALUE "ProductName", "Rufus"
|
||||
VALUE "ProductVersion", "2.0.614"
|
||||
VALUE "ProductVersion", "2.0.615"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
|
|
@ -754,8 +754,15 @@ error:
|
|||
BOOL SetLGP(BOOL bRestore, BOOL* bExistingKey, const char* szPath, const char* szPolicy, DWORD dwValue)
|
||||
{
|
||||
SetLGP_Params params = {bRestore, bExistingKey, szPath, szPolicy, dwValue};
|
||||
HANDLE thread_id = CreateThread(NULL, 0, SetLGPThread, (LPVOID)¶ms, 0, NULL);
|
||||
DWORD r = FALSE;
|
||||
HANDLE thread_id;
|
||||
|
||||
if (ReadSettingBool(SETTING_DISABLE_LGP)) {
|
||||
uprintf("LPG handling disabled, per settings");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
thread_id = CreateThread(NULL, 0, SetLGPThread, (LPVOID)¶ms, 0, NULL);
|
||||
if (thread_id == NULL) {
|
||||
uprintf("SetLGP: Unable to start thread");
|
||||
return FALSE;
|
||||
|
|
30
src/vhd.c
30
src/vhd.c
|
@ -224,7 +224,7 @@ typedef struct {
|
|||
bled_compression_type type;
|
||||
} comp_assoc;
|
||||
|
||||
static comp_assoc blah[] = {
|
||||
static comp_assoc file_assoc[] = {
|
||||
{ ".xz", BLED_COMPRESSION_XZ },
|
||||
{ ".gz", BLED_COMPRESSION_GZIP },
|
||||
{ ".lzma", BLED_COMPRESSION_LZMA },
|
||||
|
@ -233,11 +233,14 @@ static comp_assoc blah[] = {
|
|||
};
|
||||
|
||||
// For now we consider that an image that matches a known extension is bootable
|
||||
// TODO: uncompress header and check for bootable flag
|
||||
#define MBR_SIZE 512 // Might need to review this once we see bootable 4k systems
|
||||
BOOL IsCompressedBootableImage(const char* path)
|
||||
{
|
||||
char* p;
|
||||
char *p;
|
||||
unsigned char *buf = NULL;
|
||||
int i;
|
||||
BOOL r = FALSE;
|
||||
int64_t dc;
|
||||
|
||||
iso_report.compression_type = BLED_COMPRESSION_NONE;
|
||||
for (p = (char*)&path[strlen(path)-1]; (*p != '.') && (p != path); p--);
|
||||
|
@ -245,10 +248,23 @@ BOOL IsCompressedBootableImage(const char* path)
|
|||
if (p == path)
|
||||
return FALSE;
|
||||
|
||||
for (i = 0; i<ARRAYSIZE(blah); i++) {
|
||||
if (strcmp(p, blah[i].ext) == 0) {
|
||||
iso_report.compression_type = blah[i].type;
|
||||
return TRUE;
|
||||
for (i = 0; i<ARRAYSIZE(file_assoc); i++) {
|
||||
if (strcmp(p, file_assoc[i].ext) == 0) {
|
||||
iso_report.compression_type = file_assoc[i].type;
|
||||
buf = malloc(MBR_SIZE);
|
||||
if (buf == NULL)
|
||||
return FALSE;
|
||||
FormatStatus = 0;
|
||||
bled_init(_uprintf, NULL, &FormatStatus);
|
||||
dc = bled_uncompress_to_buffer(path, (char*)buf, MBR_SIZE, file_assoc[i].type);
|
||||
bled_exit();
|
||||
if (dc != MBR_SIZE) {
|
||||
free(buf);
|
||||
return FALSE;
|
||||
}
|
||||
r = (buf[0x1FE] == 0x55) && (buf[0x1FF] == 0xAA);
|
||||
free(buf);
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue