scrrun: Add IFileSystem3::GetBaseName implementation.
This commit is contained in:
parent
fab963cdcc
commit
dd64952040
|
@ -815,9 +815,39 @@ static HRESULT WINAPI filesys_GetFileName(IFileSystem3 *iface, BSTR Path,
|
|||
static HRESULT WINAPI filesys_GetBaseName(IFileSystem3 *iface, BSTR Path,
|
||||
BSTR *pbstrResult)
|
||||
{
|
||||
FIXME("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
|
||||
int i, end;
|
||||
|
||||
return E_NOTIMPL;
|
||||
TRACE("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
|
||||
|
||||
if(!pbstrResult)
|
||||
return E_POINTER;
|
||||
|
||||
if(!Path) {
|
||||
*pbstrResult = NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
for(end=strlenW(Path)-1; end>=0; end--)
|
||||
if(Path[end]!='/' && Path[end]!='\\')
|
||||
break;
|
||||
|
||||
for(i=end; i>=0; i--) {
|
||||
if(Path[i]=='.' && Path[end+1]!='.')
|
||||
end = i-1;
|
||||
if(Path[i]=='/' || Path[i]=='\\')
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
|
||||
if((i>end && Path[end+1]!='.') || (i==0 && end==1 && Path[1]==':')) {
|
||||
*pbstrResult = NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*pbstrResult = SysAllocStringLen(Path+i, end-i+1);
|
||||
if(!*pbstrResult)
|
||||
return E_OUTOFMEMORY;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI filesys_GetExtensionName(IFileSystem3 *iface, BSTR Path,
|
||||
|
|
|
@ -345,6 +345,52 @@ static void test_GetFileName(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void test_GetBaseName(void)
|
||||
{
|
||||
static const WCHAR path1[] = {'a',0};
|
||||
static const WCHAR path2[] = {'a','/','a','.','b','.','c',0};
|
||||
static const WCHAR path3[] = {'a','.','b','\\',0};
|
||||
static const WCHAR path4[] = {'c',':',0};
|
||||
static const WCHAR path5[] = {'/','\\',0};
|
||||
static const WCHAR path6[] = {'.','a',0};
|
||||
static const WCHAR result1[] = {'a',0};
|
||||
static const WCHAR result2[] = {'a','.','b',0};
|
||||
static const WCHAR result6[] = {0};
|
||||
|
||||
static const struct {
|
||||
const WCHAR *path;
|
||||
const WCHAR *result;
|
||||
} tests[] = {
|
||||
{NULL, NULL},
|
||||
{path1, result1},
|
||||
{path2, result2},
|
||||
{path3, result1},
|
||||
{path4, NULL},
|
||||
{path5, NULL},
|
||||
{path6, result6}
|
||||
};
|
||||
|
||||
BSTR path, result;
|
||||
HRESULT hr;
|
||||
int i;
|
||||
|
||||
hr = IFileSystem3_GetBaseName(fs3, NULL, NULL);
|
||||
ok(hr == E_POINTER, "GetBaseName returned %x, expected E_POINTER\n", hr);
|
||||
|
||||
for(i=0; i<sizeof(tests)/sizeof(tests[0]); i++) {
|
||||
result = (BSTR)0xdeadbeef;
|
||||
path = tests[i].path ? SysAllocString(tests[i].path) : NULL;
|
||||
hr = IFileSystem3_GetBaseName(fs3, path, &result);
|
||||
ok(hr == S_OK, "%d) GetBaseName returned %x, expected S_OK\n", i, hr);
|
||||
if(!tests[i].result)
|
||||
ok(!result, "%d) result = %s\n", i, wine_dbgstr_w(result));
|
||||
else
|
||||
ok(!lstrcmpW(result, tests[i].result), "%d) result = %s\n", i, wine_dbgstr_w(result));
|
||||
SysFreeString(path);
|
||||
SysFreeString(result);
|
||||
}
|
||||
}
|
||||
|
||||
START_TEST(filesystem)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
@ -364,6 +410,7 @@ START_TEST(filesystem)
|
|||
test_GetFileVersion();
|
||||
test_GetParentFolderName();
|
||||
test_GetFileName();
|
||||
test_GetBaseName();
|
||||
|
||||
IFileSystem3_Release(fs3);
|
||||
|
||||
|
|
Loading…
Reference in New Issue