Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
c4d58a4b
Commit
c4d58a4b
authored
Sep 14, 2008
by
Alexander Nicolaysen Sørnes
Committed by
Alexandre Julliard
Sep 16, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
regedit: Add support for exporting unicode files.
parent
60cd9107
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
49 additions
and
24 deletions
+49
-24
framewnd.c
programs/regedit/framewnd.c
+2
-2
regedit.c
programs/regedit/regedit.c
+2
-2
regproc.c
programs/regedit/regproc.c
+41
-19
regproc.h
programs/regedit/regproc.h
+4
-1
No files found.
programs/regedit/framewnd.c
View file @
c4d58a4b
...
...
@@ -306,7 +306,7 @@ static BOOL InitOpenFileName(HWND hWnd, OPENFILENAMEW *pofn)
if
(
FilterBuffer
[
0
]
==
0
)
LoadStringW
(
hInst
,
IDS_FILEDIALOG_FILTER
,
FilterBuffer
,
_MAX_PATH
);
pofn
->
lpstrFilter
=
FilterBuffer
;
pofn
->
nFilterIndex
=
1
;
pofn
->
nFilterIndex
=
2
;
pofn
->
lpstrFile
=
FileNameBuffer
;
pofn
->
nMaxFile
=
_MAX_PATH
;
pofn
->
lpstrFileTitle
=
FileTitleBuffer
;
...
...
@@ -372,7 +372,7 @@ static BOOL ExportRegistryFile(HWND hWnd, BOOL export_branch)
ofn
.
lpTemplateName
=
MAKEINTRESOURCEW
(
IDD_EXPORT_TEMPLATE
);
if
(
GetSaveFileNameW
(
&
ofn
))
{
BOOL
result
;
result
=
export_registry_key
(
ofn
.
lpstrFile
,
(
LPWSTR
)
ofn
.
lCustData
);
result
=
export_registry_key
(
ofn
.
lpstrFile
,
(
LPWSTR
)
ofn
.
lCustData
,
ofn
.
nFilterIndex
);
if
(
!
result
)
{
/*printf("Can't open file \"%s\"\n", ofn.lpstrFile);*/
return
FALSE
;
...
...
programs/regedit/regedit.c
View file @
c4d58a4b
...
...
@@ -213,10 +213,10 @@ static BOOL PerformRegAction(REGEDIT_ACTION action, LPSTR s)
get_file_name
(
&
s
,
reg_key_name
);
reg_key_nameW
=
GetWideString
(
reg_key_name
);
export_registry_key
(
filenameW
,
reg_key_nameW
);
export_registry_key
(
filenameW
,
reg_key_nameW
,
REG_FORMAT_4
);
HeapFree
(
GetProcessHeap
(),
0
,
reg_key_nameW
);
}
else
{
export_registry_key
(
filenameW
,
NULL
);
export_registry_key
(
filenameW
,
NULL
,
REG_FORMAT_4
);
}
HeapFree
(
GetProcessHeap
(),
0
,
filenameW
);
break
;
...
...
programs/regedit/regproc.c
View file @
c4d58a4b
...
...
@@ -4,6 +4,7 @@
*
* Copyright 1999 Sylvain St-Germain
* Copyright 2002 Andriy Palamarchuk
* Copyright 2008 Alexander N. Sørnes <alex@thehandofagony.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
...
...
@@ -930,11 +931,17 @@ static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD
/******************************************************************************
* Writes the given line to a file, in multi-byte or wide characters
*/
static
void
REGPROC_write_line
(
FILE
*
file
,
const
WCHAR
*
str
)
static
void
REGPROC_write_line
(
FILE
*
file
,
const
WCHAR
*
str
,
BOOL
unicode
)
{
char
*
strA
=
GetMultiByteString
(
str
);
fprintf
(
file
,
strA
);
HeapFree
(
GetProcessHeap
(),
0
,
strA
);
if
(
unicode
)
{
fwrite
(
str
,
sizeof
(
WCHAR
),
lstrlenW
(
str
),
file
);
}
else
{
char
*
strA
=
GetMultiByteString
(
str
);
fprintf
(
file
,
strA
);
HeapFree
(
GetProcessHeap
(),
0
,
strA
);
}
}
/******************************************************************************
...
...
@@ -957,7 +964,8 @@ static void export_hkey(FILE *file, HKEY key,
WCHAR
**
reg_key_name_buf
,
DWORD
*
reg_key_name_len
,
WCHAR
**
val_name_buf
,
DWORD
*
val_name_len
,
BYTE
**
val_buf
,
DWORD
*
val_size
,
WCHAR
**
line_buf
,
DWORD
*
line_buf_size
)
WCHAR
**
line_buf
,
DWORD
*
line_buf_size
,
BOOL
unicode
)
{
DWORD
max_sub_key_len
;
DWORD
max_val_name_len
;
...
...
@@ -991,7 +999,7 @@ static void export_hkey(FILE *file, HKEY key,
REGPROC_resize_char_buffer
(
line_buf
,
line_buf_size
,
lstrlenW
(
*
reg_key_name_buf
)
+
4
);
/* output data for the current key */
wsprintfW
(
*
line_buf
,
key_format
,
*
reg_key_name_buf
);
REGPROC_write_line
(
file
,
*
line_buf
);
REGPROC_write_line
(
file
,
*
line_buf
,
unicode
);
/* print all the values */
i
=
0
;
...
...
@@ -1084,7 +1092,7 @@ static void export_hkey(FILE *file, HKEY key,
const
WCHAR
hex_format
[]
=
{
'h'
,
'e'
,
'x'
,
'('
,
'%'
,
'd'
,
')'
,
':'
,
0
};
hex_prefix
=
buf
;
wsprintfW
(
buf
,
hex_format
,
value_type
);
if
(
value_type
==
REG_MULTI_SZ
)
if
(
value_type
==
REG_MULTI_SZ
&&
!
unicode
)
val_buf1
=
(
BYTE
*
)
GetMultiByteStringN
((
WCHAR
*
)
*
val_buf
,
val_size1
/
sizeof
(
WCHAR
),
&
val_buf1_size
);
}
...
...
@@ -1114,13 +1122,13 @@ static void export_hkey(FILE *file, HKEY key,
cur_pos
=
2
;
}
}
if
(
value_type
==
REG_MULTI_SZ
)
if
(
value_type
==
REG_MULTI_SZ
&&
!
unicode
)
HeapFree
(
GetProcessHeap
(),
0
,
val_buf1
);
lstrcpyW
(
*
line_buf
+
line_pos
,
newline
);
break
;
}
}
REGPROC_write_line
(
file
,
*
line_buf
);
REGPROC_write_line
(
file
,
*
line_buf
,
unicode
);
}
}
...
...
@@ -1145,7 +1153,7 @@ static void export_hkey(FILE *file, HKEY key,
&
subkey
)
==
ERROR_SUCCESS
)
{
export_hkey
(
file
,
subkey
,
reg_key_name_buf
,
reg_key_name_len
,
val_name_buf
,
val_name_len
,
val_buf
,
val_size
,
line_buf
,
line_buf_size
);
line_buf
,
line_buf_size
,
unicode
);
RegCloseKey
(
subkey
);
}
else
{
REGPROC_print_error
();
...
...
@@ -1158,7 +1166,7 @@ static void export_hkey(FILE *file, HKEY key,
/******************************************************************************
* Open file for export.
*/
static
FILE
*
REGPROC_open_export_file
(
WCHAR
*
file_name
)
static
FILE
*
REGPROC_open_export_file
(
WCHAR
*
file_name
,
BOOL
unicode
)
{
FILE
*
file
;
WCHAR
dash
=
'-'
;
...
...
@@ -1177,7 +1185,17 @@ static FILE *REGPROC_open_export_file(WCHAR *file_name)
}
HeapFree
(
GetProcessHeap
(),
0
,
file_nameA
);
}
fputs
(
"REGEDIT4
\n
"
,
file
);
if
(
unicode
)
{
const
BYTE
unicode_seq
[]
=
{
0xff
,
0xfe
};
const
WCHAR
header
[]
=
{
'W'
,
'i'
,
'n'
,
'd'
,
'o'
,
'w'
,
's'
,
' '
,
'R'
,
'e'
,
'g'
,
'i'
,
's'
,
't'
,
'r'
,
'y'
,
' '
,
'E'
,
'd'
,
'i'
,
't'
,
'o'
,
'r'
,
' '
,
'V'
,
'e'
,
'r'
,
's'
,
'i'
,
'o'
,
'n'
,
' '
,
'5'
,
'.'
,
'0'
,
'0'
,
'\n'
};
fwrite
(
unicode_seq
,
sizeof
(
BYTE
),
sizeof
(
unicode_seq
)
/
sizeof
(
unicode_seq
[
0
]),
file
);
fwrite
(
header
,
sizeof
(
WCHAR
),
sizeof
(
header
)
/
sizeof
(
header
[
0
]),
file
);
}
else
{
fputs
(
"REGEDIT4
\n
"
,
file
);
}
return
file
;
}
...
...
@@ -1189,7 +1207,7 @@ static FILE *REGPROC_open_export_file(WCHAR *file_name)
* reg_key_name - registry branch to export. The whole registry is exported if
* reg_key_name is NULL or contains an empty string.
*/
BOOL
export_registry_key
(
WCHAR
*
file_name
,
WCHAR
*
reg_key_name
)
BOOL
export_registry_key
(
WCHAR
*
file_name
,
WCHAR
*
reg_key_name
,
DWORD
format
)
{
WCHAR
*
reg_key_name_buf
;
WCHAR
*
val_name_buf
;
...
...
@@ -1200,6 +1218,7 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name)
DWORD
val_size
=
REG_VAL_BUF_SIZE
;
DWORD
line_buf_size
=
KEY_MAX_LEN
+
REG_VAL_BUF_SIZE
;
FILE
*
file
=
NULL
;
BOOL
unicode
=
(
format
==
REG_FORMAT_5
);
reg_key_name_buf
=
HeapAlloc
(
GetProcessHeap
(),
0
,
reg_key_name_len
*
sizeof
(
*
reg_key_name_buf
));
...
...
@@ -1228,17 +1247,19 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name)
}
if
(
!
branch_name
[
0
])
{
/* no branch - registry class is specified */
file
=
REGPROC_open_export_file
(
file_name
);
file
=
REGPROC_open_export_file
(
file_name
,
unicode
);
export_hkey
(
file
,
reg_key_class
,
&
reg_key_name_buf
,
&
reg_key_name_len
,
&
val_name_buf
,
&
val_name_len
,
&
val_buf
,
&
val_size
,
&
line_buf
,
&
line_buf_size
);
&
val_buf
,
&
val_size
,
&
line_buf
,
&
line_buf_size
,
unicode
);
}
else
if
(
RegOpenKeyW
(
reg_key_class
,
branch_name
,
&
key
)
==
ERROR_SUCCESS
)
{
file
=
REGPROC_open_export_file
(
file_name
);
file
=
REGPROC_open_export_file
(
file_name
,
unicode
);
export_hkey
(
file
,
key
,
&
reg_key_name_buf
,
&
reg_key_name_len
,
&
val_name_buf
,
&
val_name_len
,
&
val_buf
,
&
val_size
,
&
line_buf
,
&
line_buf_size
);
&
val_buf
,
&
val_size
,
&
line_buf
,
&
line_buf_size
,
unicode
);
RegCloseKey
(
key
);
}
else
{
CHAR
*
key_nameA
=
GetMultiByteString
(
reg_key_name
);
...
...
@@ -1251,7 +1272,7 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name)
unsigned
int
i
;
/* export all registry classes */
file
=
REGPROC_open_export_file
(
file_name
);
file
=
REGPROC_open_export_file
(
file_name
,
unicode
);
for
(
i
=
0
;
i
<
REG_CLASS_NUMBER
;
i
++
)
{
/* do not export HKEY_CLASSES_ROOT */
if
(
reg_class_keys
[
i
]
!=
HKEY_CLASSES_ROOT
&&
...
...
@@ -1262,7 +1283,8 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name)
export_hkey
(
file
,
reg_class_keys
[
i
],
&
reg_key_name_buf
,
&
reg_key_name_len
,
&
val_name_buf
,
&
val_name_len
,
&
val_buf
,
&
val_size
,
&
line_buf
,
&
line_buf_size
);
&
val_buf
,
&
val_size
,
&
line_buf
,
&
line_buf_size
,
unicode
);
}
}
}
...
...
programs/regedit/regproc.h
View file @
c4d58a4b
...
...
@@ -19,9 +19,12 @@
#define KEY_MAX_LEN 1024
#define REG_FORMAT_5 1
#define REG_FORMAT_4 2
const
CHAR
*
getAppName
(
void
);
BOOL
export_registry_key
(
WCHAR
*
file_name
,
WCHAR
*
reg_key_name
);
BOOL
export_registry_key
(
WCHAR
*
file_name
,
WCHAR
*
reg_key_name
,
DWORD
format
);
BOOL
import_registry_file
(
FILE
*
in
);
void
delete_registry_key
(
WCHAR
*
reg_key_name
);
WCHAR
*
GetWideString
(
const
char
*
strA
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment