Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mirrors
rufus
Rufus
提交
a9383b69
R
Rufus
项目概览
mirrors
/
rufus
/
Rufus
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rufus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a9383b69
编写于
1月 18, 2012
作者:
P
Pete Batard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[iso9660] add file extraction
上级
41e8ac7d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
61 addition
and
13 deletion
+61
-13
src/iso.c
src/iso.c
+55
-7
src/rufus.rc
src/rufus.rc
+6
-6
未找到文件。
src/iso.c
浏览文件 @
a9383b69
...
...
@@ -28,6 +28,8 @@
#include <windows.h>
#include <stdio.h>
#include <malloc.h>
#include <io.h>
#include <direct.h>
#ifndef ISO_TEST
#include "rufus.h"
#else
...
...
@@ -39,6 +41,10 @@
#include <cdio/iso9660.h>
#include <cdio/udf.h>
#ifndef CEILING
#define CEILING(x, y) ((x+(y-1))/y)
#endif
#define print_vd_info(title, fn) \
if
(
fn
(
p_iso
,
&
psz_str
))
{
\
uprintf
(
title
": %s
\n
"
,
psz_str
);
\
...
...
@@ -84,20 +90,28 @@ static void udf_list_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const char
}
}
const
char
*
extract_dir
=
"D:/tmp/iso"
;
static
void
iso_list_files
(
iso9660_t
*
p_iso
,
const
char
*
psz_path
)
{
char
filename
[
4096
],
*
p
;
FILE
*
fd
;
char
filename
[
4096
],
*
p
,
*
iso_filename
;
unsigned
char
buf
[
ISO_BLOCKSIZE
];
CdioListNode_t
*
p_entnode
;
iso9660_stat_t
*
p_statbuf
;
CdioList_t
*
p_entlist
;
size_t
i
,
i_blocks
;
lsn_t
lsn
;
if
(
(
p_iso
==
NULL
)
||
(
psz_path
==
NULL
))
return
;
strncpy
(
filename
,
psz_path
,
4094
);
p
=
&
filename
[
strlen
(
psz_path
)];
*
p
++
=
'/'
;
*
p
=
0
;
// TODO: safe_###
strcpy
(
filename
,
extract_dir
);
iso_filename
=
&
filename
[
strlen
(
filename
)];
strcat
(
filename
,
psz_path
);
strcat
(
filename
,
"/"
);
p
=
&
filename
[
strlen
(
filename
)];
p_entlist
=
iso9660_ifs_readdir
(
p_iso
,
psz_path
);
if
(
!
p_entlist
)
...
...
@@ -111,9 +125,43 @@ static void iso_list_files(iso9660_t* p_iso, const char *psz_path)
iso9660_name_translate
(
p_statbuf
->
filename
,
p
);
uprintf
(
"%s [LSN %6d] %8u %s
\n
"
,
(
p_statbuf
->
type
==
_STAT_DIR
)
?
"d"
:
"-"
,
p_statbuf
->
lsn
,
p_statbuf
->
size
,
filename
);
if
(
p_statbuf
->
type
==
_STAT_DIR
)
iso_list_files
(
p_iso
,
filename
);
if
(
p_statbuf
->
type
==
_STAT_DIR
)
{
// TODO: Joliet and Unicode support
_mkdir
(
filename
);
iso_list_files
(
p_iso
,
iso_filename
);
}
else
{
fd
=
fopen
(
filename
,
"wb"
);
if
(
fd
==
NULL
)
{
uprintf
(
"Unable to create file %s
\n
"
,
filename
);
goto
out
;
}
i_blocks
=
CEILING
(
p_statbuf
->
size
,
ISO_BLOCKSIZE
);
for
(
i
=
0
;
i
<
i_blocks
;
i
++
)
{
memset
(
buf
,
0
,
ISO_BLOCKSIZE
);
lsn
=
p_statbuf
->
lsn
+
i
;
if
(
iso9660_iso_seek_read
(
p_iso
,
buf
,
lsn
,
1
)
!=
ISO_BLOCKSIZE
)
{
uprintf
(
"Error reading ISO 9660 file %s at LSN %lu
\n
"
,
iso_filename
,
(
long
unsigned
int
)
lsn
);
goto
out
;
}
fwrite
(
buf
,
ISO_BLOCKSIZE
,
1
,
fd
);
if
(
ferror
(
fd
))
{
uprintf
(
"Error writing file %s
\n
"
,
filename
);
goto
out
;
}
}
// TODO: this is slowing us down! Compute the size to use with fwrite instead
fflush
(
fd
);
/* Make sure the file size has the exact same byte size. Without the
truncate below, the file will a multiple of ISO_BLOCKSIZE. */
if
(
_chsize
(
_fileno
(
fd
),
p_statbuf
->
size
))
{
uprintf
(
"Error adjusting file size for %s
\n
"
,
filename
);
goto
out
;
}
fclose
(
fd
);
}
}
out:
_cdio_list_free
(
p_entlist
,
true
);
}
...
...
src/rufus.rc
浏览文件 @
a9383b69
...
...
@@ -33,7 +33,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 206, 278
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Rufus v1.0.7.13
7
"
CAPTION "Rufus v1.0.7.13
8
"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,94,236,50,14
...
...
@@ -70,7 +70,7 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,231,175,50,14,WS_GROUP
CONTROL "<a href=""http://rufus.akeo.ie"">http://rufus.akeo.ie</a>",IDC_ABOUT_RUFUS_URL,
"SysLink",WS_TABSTOP,46,47,114,9
LTEXT "Version 1.0.7 (Build 13
7
)",IDC_STATIC,46,19,78,8
LTEXT "Version 1.0.7 (Build 13
8
)",IDC_STATIC,46,19,78,8
PUSHBUTTON "License...",IDC_ABOUT_LICENSE,46,175,50,14,WS_GROUP
EDITTEXT IDC_ABOUT_COPYRIGHTS,46,107,235,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL
LTEXT "Report bugs or request enhancements at:",IDC_STATIC,46,66,187,8
...
...
@@ -208,8 +208,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,7,13
7
PRODUCTVERSION 1,0,7,13
7
FILEVERSION 1,0,7,13
8
PRODUCTVERSION 1,0,7,13
8
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
...
...
@@ -226,13 +226,13 @@ BEGIN
BEGIN
VALUE "CompanyName", "akeo.ie"
VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "1.0.7.13
7
"
VALUE "FileVersion", "1.0.7.13
8
"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
VALUE "OriginalFilename", "rufus.exe"
VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "1.0.7.13
7
"
VALUE "ProductVersion", "1.0.7.13
8
"
END
END
BLOCK "VarFileInfo"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录