regedit: Check for unicode file without using fseek.
This commit is contained in:
parent
2824aa2d33
commit
58801f0d73
|
@ -484,21 +484,14 @@ void processRegLines(FILE *in)
|
||||||
{
|
{
|
||||||
LPSTR line = NULL; /* line read from input stream */
|
LPSTR line = NULL; /* line read from input stream */
|
||||||
ULONG lineSize = REG_VAL_BUF_SIZE;
|
ULONG lineSize = REG_VAL_BUF_SIZE;
|
||||||
BYTE uni[2];
|
BOOL unicode_check = TRUE;
|
||||||
|
|
||||||
line = HeapAlloc(GetProcessHeap(), 0, lineSize);
|
line = HeapAlloc(GetProcessHeap(), 0, lineSize);
|
||||||
CHECK_ENOUGH_MEMORY(line);
|
CHECK_ENOUGH_MEMORY(line);
|
||||||
|
|
||||||
if (fread(uni, 2, 1, in) == 1) {
|
|
||||||
if (uni[0] == 0xff && uni[1] == 0xfe) {
|
|
||||||
printf("Trying to import from a unicode file: this isn't supported yet.\n"
|
|
||||||
"Please use export as Win 9x/NT4 files from native regedit\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fseek(in, -2, SEEK_CUR);
|
|
||||||
}
|
|
||||||
while (!feof(in)) {
|
while (!feof(in)) {
|
||||||
LPSTR s; /* The pointer into line for where the current fgets should read */
|
LPSTR s; /* The pointer into line for where the current fgets should read */
|
||||||
|
LPSTR check;
|
||||||
s = line;
|
s = line;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
size_t size_remaining;
|
size_t size_remaining;
|
||||||
|
@ -527,7 +520,34 @@ void processRegLines(FILE *in)
|
||||||
* eof, error, eol or getting the maximum amount. Abort on error.
|
* eof, error, eol or getting the maximum amount. Abort on error.
|
||||||
*/
|
*/
|
||||||
size_to_get = (size_remaining > INT_MAX ? INT_MAX : size_remaining);
|
size_to_get = (size_remaining > INT_MAX ? INT_MAX : size_remaining);
|
||||||
if (NULL == fgets (s, size_to_get, in)) {
|
|
||||||
|
if (unicode_check)
|
||||||
|
{
|
||||||
|
if (fread( s, 2, 1, in) == 1)
|
||||||
|
{
|
||||||
|
if ((BYTE)s[0] == 0xff && (BYTE)s[1] == 0xfe)
|
||||||
|
{
|
||||||
|
printf("Trying to import from a unicode file: this isn't supported yet.\n"
|
||||||
|
"Please use export as Win 9x/NT4 files from native regedit\n");
|
||||||
|
HeapFree(GetProcessHeap(), 0, line);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unicode_check = FALSE;
|
||||||
|
check = fgets (&s[2], size_to_get-2, in);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unicode_check = FALSE;
|
||||||
|
check = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
check = fgets (s, size_to_get, in);
|
||||||
|
|
||||||
|
if (check == NULL) {
|
||||||
if (ferror(in)) {
|
if (ferror(in)) {
|
||||||
perror ("While reading input");
|
perror ("While reading input");
|
||||||
exit (IO_ERROR);
|
exit (IO_ERROR);
|
||||||
|
|
Loading…
Reference in New Issue