Module: wine Branch: master Commit: ff326fd0ffd4ad017634d6d068781d8a0736d4a2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ff326fd0ffd4ad017634d6d068...
Author: James Hawkins truiken@gmail.com Date: Wed Mar 28 01:55:46 2007 -0500
setupapi: The Inf file should be copied regardless of the destination buffer, with tests.
---
dlls/setupapi/misc.c | 26 ++++++++++-------- dlls/setupapi/tests/misc.c | 61 +++++++++++++++++++++++-------------------- 2 files changed, 47 insertions(+), 40 deletions(-)
diff --git a/dlls/setupapi/misc.c b/dlls/setupapi/misc.c index 8257828..eb3c3a1 100644 --- a/dlls/setupapi/misc.c +++ b/dlls/setupapi/misc.c @@ -887,20 +887,21 @@ BOOL WINAPI SetupCopyOEMInfA( PCSTR source, PCSTR location, { BOOL ret = FALSE; LPWSTR destW = NULL, sourceW = NULL, locationW = NULL; - INT size = MAX_PATH; + DWORD size;
TRACE("%s, %s, %d, %d, %p, %d, %p, %p\n", debugstr_a(source), debugstr_a(location), media_type, style, dest, buffer_size, required_size, component);
- if (dest && !(destW = MyMalloc( MAX_PATH * sizeof(WCHAR) ))) return FALSE; + if (dest && !(destW = MyMalloc( buffer_size * sizeof(WCHAR) ))) return FALSE; if (source && !(sourceW = strdupAtoW( source ))) goto done; if (location && !(locationW = strdupAtoW( location ))) goto done;
- if (!(ret = SetupCopyOEMInfW( sourceW, locationW, media_type, style, destW, size, NULL, NULL ))) + if (!(ret = SetupCopyOEMInfW( sourceW, locationW, media_type, style, destW, + buffer_size, &size, NULL ))) + { + if (required_size) *required_size = size; goto done; - - size = WideCharToMultiByte( CP_ACP, 0, destW, -1, NULL, 0, NULL, NULL ); - if (required_size) *required_size = size; + }
if (dest) { @@ -957,17 +958,18 @@ BOOL WINAPI SetupCopyOEMInfW( PCWSTR source, PCWSTR location, if ((p = strrchrW( source, '\' ))) strcatW( target, p + 1 );
+ if (!(ret = CopyFileW( source, target, (style & SP_COPY_NOOVERWRITE) != 0 ))) + return ret; + + if (style & SP_COPY_DELETESOURCE) + DeleteFileW( source ); + size = strlenW( target ) + 1; if (dest) { if (buffer_size >= size) { - /* FIXME: honour style flags */ - if ((ret = CopyFileW( source, target, (style & SP_COPY_NOOVERWRITE) != 0 ))) - { - if (style & SP_COPY_DELETESOURCE) DeleteFileW( source ); - strcpyW( dest, target ); - } + strcpyW( dest, target ); } else { diff --git a/dlls/setupapi/tests/misc.c b/dlls/setupapi/tests/misc.c index ea11a6c..27dcc77 100644 --- a/dlls/setupapi/tests/misc.c +++ b/dlls/setupapi/tests/misc.c @@ -102,7 +102,7 @@ static void test_SetupCopyOEMInf(void) { CHAR toolong[MAX_PATH * 2]; CHAR path[MAX_PATH], dest[MAX_PATH]; - CHAR tmpfile[MAX_PATH]; + CHAR tmpfile[MAX_PATH], dest_save[MAX_PATH]; LPSTR inf; DWORD size; BOOL res; @@ -134,11 +134,8 @@ static void test_SetupCopyOEMInf(void) SetLastError(0xdeadbeef); res = SetupCopyOEMInf(path, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL); ok(res == FALSE, "Expected FALSE, got %d\n", res); - todo_wine - { - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - } + ok(GetLastError() == ERROR_FILE_NOT_FOUND, + "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
/* try a long SourceInfFileName */ memset(toolong, 'a', MAX_PATH * 2); @@ -164,11 +161,8 @@ static void test_SetupCopyOEMInf(void) SetLastError(0xdeadbeef); res = SetupCopyOEMInf(path, NULL, SPOST_NONE, SP_COPY_REPLACEONLY, NULL, 0, NULL, NULL); ok(res == FALSE, "Expected FALSE, got %d\n", res); - todo_wine - { - ok(GetLastError() == ERROR_FILE_NOT_FOUND, - "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); - } + ok(GetLastError() == ERROR_FILE_NOT_FOUND, + "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError()); ok(file_exists(tmpfile), "Expected source inf to exist\n");
/* try an absolute SourceInfFileName, without DestinationInfFileName */ @@ -177,32 +171,23 @@ static void test_SetupCopyOEMInf(void) lstrcat(path, tmpfile); SetLastError(0xdeadbeef); res = SetupCopyOEMInf(path, NULL, SPOST_NONE, 0, NULL, 0, NULL, NULL); - todo_wine - { - ok(res == TRUE, "Expected TRUE, got %d\n", res); - ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); - } + ok(res == TRUE, "Expected TRUE, got %d\n", res); + ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); ok(file_exists(path), "Expected source inf to exist\n");
/* try SP_COPY_REPLACEONLY, dest exists */ SetLastError(0xdeadbeef); res = SetupCopyOEMInf(path, NULL, SPOST_NONE, SP_COPY_REPLACEONLY, NULL, 0, NULL, NULL); - todo_wine - { - ok(res == TRUE, "Expected TRUE, got %d\n", res); - ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); - } + ok(res == TRUE, "Expected TRUE, got %d\n", res); + ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); ok(file_exists(path), "Expected source inf to exist\n");
/* try SP_COPY_NOOVERWRITE */ SetLastError(0xdeadbeef); res = SetupCopyOEMInf(path, NULL, SPOST_NONE, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL); ok(res == FALSE, "Expected FALSE, got %d\n", res); - todo_wine - { - ok(GetLastError() == ERROR_FILE_EXISTS, - "Expected ERROR_FILE_EXISTS, got %d\n", GetLastError()); - } + ok(GetLastError() == ERROR_FILE_EXISTS, + "Expected ERROR_FILE_EXISTS, got %d\n", GetLastError());
/* get the DestinationInfFileName */ SetLastError(0xdeadbeef); @@ -217,6 +202,24 @@ static void test_SetupCopyOEMInf(void) } ok(file_exists(path), "Expected source inf to exist\n");
+ lstrcpy(dest_save, dest); + DeleteFile(dest_save); + + /* get the DestinationInfFileName, DestinationInfFileNameSize is too small + * - inf is still copied + */ + lstrcpy(dest, "aaa"); + size = 0; + SetLastError(0xdeadbeef); + res = SetupCopyOEMInf(path, NULL, SPOST_NONE, 0, dest, 5, &size, NULL); + ok(res == FALSE, "Expected FALSE, got %d\n", res); + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, + "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError()); + ok(file_exists(path), "Expected source inf to exist\n"); + ok(file_exists(dest_save), "Expected dest inf to exist\n"); + ok(!lstrcmp(dest, "aaa"), "Expected dest to be unchanged\n"); + ok(size == lstrlen(dest_save) + 1, "Expected size to be lstrlen(dest_save) + 1\n"); + /* get the DestinationInfFileName and DestinationInfFileNameSize */ SetLastError(0xdeadbeef); res = SetupCopyOEMInf(path, NULL, SPOST_NONE, 0, dest, MAX_PATH, &size, NULL); @@ -229,6 +232,7 @@ static void test_SetupCopyOEMInf(void) ok(check_format(dest, NULL), "Expected %%windir%%\inf\OEMx.inf, got %s\n", dest); } ok(file_exists(path), "Expected source inf to exist\n"); + ok(size == lstrlen(dest_save) + 1, "Expected size to be lstrlen(dest_save) + 1\n");
/* get the DestinationInfFileName, DestinationInfFileNameSize, and DestinationInfFileNameComponent */ SetLastError(0xdeadbeef); @@ -242,15 +246,16 @@ static void test_SetupCopyOEMInf(void) ok(check_format(dest, inf), "Expected %%windir%%\inf\OEMx.inf, got %s\n", dest); } ok(file_exists(path), "Expected source inf to exist\n"); + ok(size == lstrlen(dest_save) + 1, "Expected size to be lstrlen(dest_save) + 1\n");
/* try SP_COPY_DELETESOURCE */ SetLastError(0xdeadbeef); res = SetupCopyOEMInf(path, NULL, SPOST_NONE, SP_COPY_DELETESOURCE, NULL, 0, NULL, NULL); + ok(res == TRUE, "Expected TRUE, got %d\n", res); + ok(!file_exists(path), "Expected source inf to not exist\n"); todo_wine { - ok(res == TRUE, "Expected TRUE, got %d\n", res); ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", GetLastError()); - ok(!file_exists(path), "Expected source inf to not exist\n"); } }