Several bug fixes in save_key().

This commit is contained in:
Alexandre Julliard 1999-11-25 22:15:11 +00:00
parent 2c655f5e6e
commit 6b34fedc8c

View File

@ -181,10 +181,12 @@ static void save_key( HKEY hkey, const char *filename )
int count = 0; int count = 0;
DWORD ret; DWORD ret;
HANDLE handle; HANDLE handle;
char *p;
char *name = HeapAlloc( GetProcessHeap(), 0, strlen(filename) + 20 );
char *name = xmalloc( strlen(filename) + 10 ); if (!name) return;
char *p = strrchr( name, '/' ); strcpy( name, filename );
if (p) p++; if ((p = strrchr( name, '/' ))) p++;
else p = name; else p = name;
for (;;) for (;;)
@ -193,20 +195,24 @@ static void save_key( HKEY hkey, const char *filename )
handle = FILE_CreateFile( name, GENERIC_WRITE, 0, NULL, handle = FILE_CreateFile( name, GENERIC_WRITE, 0, NULL,
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, -1 ); CREATE_NEW, FILE_ATTRIBUTE_NORMAL, -1 );
if (handle != INVALID_HANDLE_VALUE) break; if (handle != INVALID_HANDLE_VALUE) break;
if ((ret = GetLastError()) != ERROR_FILE_EXISTS) return; if ((ret = GetLastError()) != ERROR_FILE_EXISTS) break;
} }
req->hkey = hkey; if (handle != INVALID_HANDLE_VALUE)
req->file = handle;
ret = server_call_noerr( REQ_SAVE_REGISTRY );
CloseHandle( handle );
if (ret) unlink( name );
else if (rename( name, filename ) == -1)
{ {
ERR( "Failed to move %s to %s: ", name, filename ); req->hkey = hkey;
perror( "rename" ); req->file = handle;
unlink( name ); ret = server_call_noerr( REQ_SAVE_REGISTRY );
CloseHandle( handle );
if (ret) unlink( name );
else if (rename( name, filename ) == -1)
{
ERR( "Failed to move %s to %s: ", name, filename );
perror( "rename" );
unlink( name );
}
} }
HeapFree( GetProcessHeap(), 0, name );
} }