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
bcd05e99
Commit
bcd05e99
authored
Nov 25, 1998
by
Juergen Schmied
Committed by
Alexandre Julliard
Nov 25, 1998
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved existing path - functions to shellpatch.c.
New: PathRemoveBlanks32A|W, PathMatchSpec32A|W, PathSetDlgItemPath32A|W.
parent
71097995
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
711 additions
and
522 deletions
+711
-522
Makefile.in
dlls/shell32/Makefile.in
+2
-0
pidl.c
dlls/shell32/pidl.c
+3
-2
shell32_main.c
dlls/shell32/shell32_main.c
+3
-1
shellord.c
dlls/shell32/shellord.c
+36
-502
shellpath.c
dlls/shell32/shellpath.c
+633
-0
shlview.c
dlls/shell32/shlview.c
+17
-13
shell.h
include/shell.h
+14
-1
shell32.spec
relay32/shell32.spec
+3
-3
No files found.
dlls/shell32/Makefile.in
View file @
bcd05e99
...
...
@@ -15,8 +15,10 @@ C_SRCS = \
iconcache.c
\
pidl.c
\
shell32_main.c
\
shelllink.c
\
shellole.c
\
shellord.c
\
shellpath.c
\
shlfolder.c
\
shlview.c
...
...
dlls/shell32/pidl.c
View file @
bcd05e99
...
...
@@ -977,8 +977,9 @@ BOOL32 WINAPI _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT32 uOutSize)
default:
return
FALSE
;
}
sprintf
(
stemp
,
"%lu"
,
pdata
->
u
.
file
.
dwFileSize
);
return
GetNumberFormat32A
(
LOCALE_USER_DEFAULT
,
0
,
stemp
,
NULL
,
pOut
,
uOutSize
);
StrFormatByteSize32A
(
pdata
->
u
.
file
.
dwFileSize
,
stemp
,
20
);
strncpy
(
pOut
,
stemp
,
20
);
return
TRUE
;
}
BOOL32
WINAPI
_ILGetExtension
(
LPCITEMIDLIST
pidl
,
LPSTR
pOut
,
UINT32
uOutSize
)
...
...
dlls/shell32/shell32_main.c
View file @
bcd05e99
...
...
@@ -909,11 +909,13 @@ DWORD WINAPI SHGetPathFromIDList32A (LPCITEMIDLIST pidl,LPSTR pszPath)
DWORD
WINAPI
SHGetPathFromIDList32W
(
LPCITEMIDLIST
pidl
,
LPWSTR
pszPath
)
{
char
sTemp
[
MAX_PATH
];
FIXM
E
(
shell
,
"(pidl=%p)
\n
"
,
pidl
);
TRAC
E
(
shell
,
"(pidl=%p)
\n
"
,
pidl
);
SHGetPathFromIDList32A
(
pidl
,
sTemp
);
lstrcpyAtoW
(
pszPath
,
sTemp
);
TRACE
(
shell
,
"-- (%s)
\n
"
,
debugstr_w
(
pszPath
));
return
NOERROR
;
}
...
...
dlls/shell32/shellord.c
View file @
bcd05e99
...
...
@@ -62,433 +62,6 @@ SHChangeNotifyDeregister(LONG x1,LONG x2)
}
/*************************************************************************
* PathIsRoot [SHELL32.29]
*/
BOOL32
WINAPI
PathIsRoot32A
(
LPCSTR
x
)
{
TRACE
(
shell
,
"%s
\n
"
,
x
);
if
(
*
(
x
+
1
)
==
':'
&&
*
(
x
+
2
)
==
'\\'
)
/* "X:\" */
return
1
;
if
(
*
x
==
'\\'
)
/* "\" */
return
0
;
if
(
x
[
0
]
==
'\\'
&&
x
[
1
]
==
'\\'
)
/* UNC "\\<xx>\" */
{
int
foundbackslash
=
0
;
x
=
x
+
2
;
while
(
*
x
)
{
if
(
*
x
++==
'\\'
)
foundbackslash
++
;
}
if
(
foundbackslash
<=
1
)
/* max 1 \ more ... */
return
1
;
}
return
0
;
}
BOOL32
WINAPI
PathIsRoot32W
(
LPCWSTR
x
)
{
TRACE
(
shell
,
"%s
\n
"
,
debugstr_w
(
x
));
if
(
*
(
x
+
1
)
==
':'
&&
*
(
x
+
2
)
==
'\\'
)
/* "X:\" */
return
1
;
if
(
*
x
==
(
WCHAR
)
'\\'
)
/* "\" */
return
0
;
if
(
x
[
0
]
==
(
WCHAR
)
'\\'
&&
x
[
1
]
==
(
WCHAR
)
'\\'
)
/* UNC "\\<xx>\" */
{
int
foundbackslash
=
0
;
x
=
x
+
2
;
while
(
*
x
)
{
if
(
*
x
++==
(
WCHAR
)
'\\'
)
foundbackslash
++
;
}
if
(
foundbackslash
<=
1
)
/* max 1 \ more ... */
return
1
;
}
return
0
;
}
BOOL32
WINAPI
PathIsRoot32AW
(
LPCVOID
x
)
{
if
(
VERSION_OsIsUnicode
())
return
PathIsRoot32W
(
x
);
return
PathIsRoot32A
(
x
);
}
/*************************************************************************
* PathBuildRoot [SHELL32.30]
*/
LPSTR
WINAPI
PathBuildRoot
(
LPSTR
root
,
BYTE
drive
)
{
TRACE
(
shell
,
"%p %i
\n
"
,
root
,
drive
);
strcpy
(
root
,
"A:
\\
"
);
root
[
0
]
+=
drive
;
return
root
;
}
/*************************************************************************
* PathFindExtension [SHELL32.31]
*
* NOTES
* returns pointer to last . in last pathcomponent or at \0.
*/
LPCSTR
WINAPI
PathFindExtension32A
(
LPCSTR
path
)
{
LPCSTR
lastpoint
=
NULL
;
TRACE
(
shell
,
"%p %s
\n
"
,
path
,
path
);
while
(
*
path
)
{
if
(
*
path
==
'\\'
||*
path
==
' '
)
lastpoint
=
NULL
;
if
(
*
path
==
'.'
)
lastpoint
=
path
;
path
++
;
}
return
lastpoint
?
lastpoint
:
path
;
}
LPCWSTR
WINAPI
PathFindExtension32W
(
LPCWSTR
path
)
{
LPCWSTR
lastpoint
=
NULL
;
TRACE
(
shell
,
"%p L%s
\n
"
,
path
,
debugstr_w
(
path
));
while
(
*
path
)
{
if
(
*
path
==
(
WCHAR
)
'\\'
||*
path
==
(
WCHAR
)
' '
)
lastpoint
=
NULL
;
if
(
*
path
==
(
WCHAR
)
'.'
)
lastpoint
=
path
;
path
++
;
}
return
lastpoint
?
lastpoint
:
path
;
}
LPCVOID
WINAPI
PathFindExtension32AW
(
LPCVOID
path
)
{
if
(
VERSION_OsIsUnicode
())
return
PathFindExtension32W
(
path
);
return
PathFindExtension32A
(
path
);
}
/*************************************************************************
* PathAddBackslash [SHELL32.32]
*
* NOTES
* append \ if there is none
*/
LPSTR
WINAPI
PathAddBackslash32A
(
LPSTR
path
)
{
int
len
;
TRACE
(
shell
,
"%p->%s
\n
"
,
path
,
path
);
len
=
strlen
(
path
);
if
(
len
&&
path
[
len
-
1
]
!=
'\\'
)
{
path
[
len
]
=
'\\'
;
path
[
len
+
1
]
=
0x00
;
return
path
+
len
+
1
;
}
return
path
+
len
;
}
LPWSTR
WINAPI
PathAddBackslash32W
(
LPWSTR
path
)
{
int
len
;
TRACE
(
shell
,
"%p->%s
\n
"
,
path
,
debugstr_w
(
path
));
len
=
lstrlen32W
(
path
);
if
(
len
&&
path
[
len
-
1
]
!=
(
WCHAR
)
'\\'
)
{
path
[
len
]
=
(
WCHAR
)
'\\'
;
path
[
len
+
1
]
=
0x00
;
return
path
+
len
+
1
;
}
return
path
+
len
;
}
LPVOID
WINAPI
PathAddBackslash32AW
(
LPVOID
path
)
{
if
(
VERSION_OsIsUnicode
())
return
PathAddBackslash32W
(
path
);
return
PathAddBackslash32A
(
path
);
}
/*************************************************************************
* PathRemoveBlanks [SHELL32.33]
*
* NOTES
* remove spaces from beginning and end of passed string
*/
LPSTR
WINAPI
PathRemoveBlanks
(
LPSTR
str
)
{
LPSTR
x
=
str
;
TRACE
(
shell
,
"%s
\n
"
,
str
);
while
(
*
x
==
' '
)
x
++
;
if
(
x
!=
str
)
strcpy
(
str
,
x
);
if
(
!*
str
)
return
str
;
x
=
str
+
strlen
(
str
)
-
1
;
while
(
*
x
==
' '
)
x
--
;
if
(
*
x
==
' '
)
*
x
=
'\0'
;
return
x
;
}
/*************************************************************************
* PathFindFilename [SHELL32.34]
*
* NOTES
* basename(char *fn);
*/
LPCSTR
WINAPI
PathFindFilename32A
(
LPCSTR
aptr
)
{
LPCSTR
aslash
;
aslash
=
aptr
;
TRACE
(
shell
,
"%s
\n
"
,
aslash
);
while
(
aptr
[
0
])
{
if
(((
aptr
[
0
]
==
'\\'
)
||
(
aptr
[
0
]
==
':'
))
&&
aptr
[
1
]
&&
aptr
[
1
]
!=
'\\'
)
aslash
=
aptr
+
1
;
aptr
++
;
}
return
aslash
;
}
LPCWSTR
WINAPI
PathFindFilename32W
(
LPCWSTR
wptr
)
{
LPCWSTR
wslash
;
wslash
=
wptr
;
TRACE
(
shell
,
"L%s
\n
"
,
debugstr_w
(
wslash
));
while
(
wptr
[
0
])
{
if
(((
wptr
[
0
]
==
'\\'
)
||
(
wptr
[
0
]
==
':'
))
&&
wptr
[
1
]
&&
wptr
[
1
]
!=
'\\'
)
wslash
=
wptr
+
1
;
wptr
++
;
}
return
wslash
;
}
LPCVOID
WINAPI
PathFindFilename32AW
(
LPCVOID
fn
)
{
if
(
VERSION_OsIsUnicode
())
return
PathFindFilename32W
(
fn
);
return
PathFindFilename32A
(
fn
);
}
/*************************************************************************
* PathRemoveFileSpec [SHELL32.35]
*
* NOTES
* bool getpath(char *pathname); truncates passed argument to a valid path
* returns if the string was modified or not.
* "\foo\xx\foo"-> "\foo\xx"
* "\" -> "\"
* "a:\foo" -> "a:\"
*/
DWORD
WINAPI
PathRemoveFileSpec
(
LPSTR
fn
)
{
LPSTR
x
,
cutplace
;
TRACE
(
shell
,
"%s
\n
"
,
fn
);
if
(
!
fn
[
0
])
return
0
;
x
=
fn
;
cutplace
=
fn
;
while
(
*
x
)
{
if
(
*
x
==
'\\'
)
{
cutplace
=
x
++
;
continue
;
}
if
(
*
x
==
':'
)
{
x
++
;
if
(
*
x
==
'\\'
)
cutplace
=++
x
;
continue
;
/* already x++ed */
}
x
++
;
}
if
(
!*
cutplace
)
return
0
;
if
(
cutplace
==
fn
)
{
if
(
fn
[
0
]
==
'\\'
)
{
if
(
!
fn
[
1
])
return
0
;
fn
[
0
]
=
'\0'
;
return
1
;
}
}
*
cutplace
=
'\0'
;
return
1
;
}
/*************************************************************************
* PathAppend [SHELL32.36]
*
* NOTES
* concat_paths(char*target,const char*add);
* concats "target\\add" and writes them to target
*/
LPSTR
WINAPI
PathAppend
(
LPSTR
x1
,
LPSTR
x2
)
{
TRACE
(
shell
,
"%s %s
\n
"
,
x1
,
x2
);
while
(
x2
[
0
]
==
'\\'
)
x2
++
;
return
PathCombine32A
(
x1
,
x1
,
x2
);
}
/*************************************************************************
* PathCombine [SHELL32.37]
*
* NOTES
* if lpszFile='.' skip it
* szDest can be equal to lpszFile. Thats why we use sTemp
*/
LPSTR
WINAPI
PathCombine32A
(
LPSTR
szDest
,
LPCSTR
lpszDir
,
LPCSTR
lpszFile
)
{
char
sTemp
[
MAX_PATH
];
TRACE
(
shell
,
"%p %p->%s %p->%s
\n
"
,
szDest
,
lpszDir
,
lpszDir
,
lpszFile
,
lpszFile
);
if
(
!
lpszFile
||
!
lpszFile
[
0
]
||
(
lpszFile
[
0
]
==
'.'
&&
!
lpszFile
[
1
])
)
{
strcpy
(
szDest
,
lpszDir
);
return
szDest
;
}
/* if lpszFile is a complete path don't care about lpszDir */
if
(
PathIsRoot32A
(
lpszFile
))
{
strcpy
(
szDest
,
lpszFile
);
}
strcpy
(
sTemp
,
lpszDir
);
PathAddBackslash32A
(
sTemp
);
strcat
(
sTemp
,
lpszFile
);
strcpy
(
szDest
,
sTemp
);
return
szDest
;
}
LPWSTR
WINAPI
PathCombine32W
(
LPWSTR
szDest
,
LPCWSTR
lpszDir
,
LPCWSTR
lpszFile
)
{
WCHAR
sTemp
[
MAX_PATH
];
TRACE
(
shell
,
"%p %p->%s %p->%s
\n
"
,
szDest
,
lpszDir
,
debugstr_w
(
lpszDir
),
lpszFile
,
debugstr_w
(
lpszFile
));
if
(
!
lpszFile
||
!
lpszFile
[
0
]
||
(
lpszFile
[
0
]
==
(
WCHAR
)
'.'
&&
!
lpszFile
[
1
])
)
{
lstrcpy32W
(
szDest
,
lpszDir
);
return
szDest
;
}
/* if lpszFile is a complete path don't care about lpszDir */
if
(
PathIsRoot32W
(
lpszFile
))
{
lstrcpy32W
(
szDest
,
lpszFile
);
}
lstrcpy32W
(
sTemp
,
lpszDir
);
PathAddBackslash32W
(
sTemp
);
lstrcat32W
(
sTemp
,
lpszFile
);
lstrcpy32W
(
szDest
,
sTemp
);
return
szDest
;
}
LPVOID
WINAPI
PathCombine32AW
(
LPVOID
szDest
,
LPCVOID
lpszDir
,
LPCVOID
lpszFile
)
{
if
(
VERSION_OsIsUnicode
())
return
PathCombine32W
(
szDest
,
lpszDir
,
lpszFile
);
return
PathCombine32A
(
szDest
,
lpszDir
,
lpszFile
);
}
/*************************************************************************
* PathIsUNC [SHELL32.39]
*
* NOTES
* PathIsUNC(char*path);
*/
BOOL32
WINAPI
PathIsUNC
(
LPCSTR
path
)
{
TRACE
(
shell
,
"%s
\n
"
,
path
);
if
((
path
[
0
]
==
'\\'
)
&&
(
path
[
1
]
==
'\\'
))
return
TRUE
;
return
FALSE
;
}
/*************************************************************************
* PathIsExe [SHELL32.43]
*
*/
BOOL32
WINAPI
PathIsExe
(
LPCSTR
path
)
{
TRACE
(
shell
,
"path=%s
\n
"
,
path
);
return
FALSE
;
}
/*************************************************************************
* PathFileExists [SHELL32.45]
*
* NOTES
* file_exists(char *fn);
*/
BOOL32
WINAPI
PathFileExists
(
LPSTR
fn
)
{
TRACE
(
shell
,
"%s
\n
"
,
fn
);
if
(
GetFileAttributes32A
(
fn
)
==-
1
)
return
FALSE
;
else
return
TRUE
;
}
/*************************************************************************
* PathMatchSpec [SHELL32.46]
*
* NOTES
* used from COMDLG32
*/
BOOL32
WINAPI
PathMatchSpec
(
LPSTR
x
,
LPSTR
y
)
{
FIXME
(
shell
,
"%s %s stub
\n
"
,
x
,
y
);
return
TRUE
;
}
/*************************************************************************
* PathResolve [SHELL32.51]
*/
DWORD
WINAPI
PathResolve
(
LPCSTR
s
,
DWORD
x2
,
DWORD
x3
)
{
FIXME
(
shell
,
"(%s,0x%08lx,0x%08lx),stub!
\n
"
,
s
,
x2
,
x3
);
return
0
;
}
/*************************************************************************
* PathGetArgs [SHELL32.52]
*
* NOTES
* look for next arg in string. handle "quoted" strings
* returns pointer to argument *AFTER* the space. Or to the \0.
*/
LPVOID
WINAPI
PathGetArgs
(
LPVOID
cmdline
)
{
BOOL32
qflag
=
FALSE
;
LPWSTR
wptr
;
LPSTR
aptr
;
if
(
VERSION_OsIsUnicode
())
{
TRACE
(
shell
,
"%sL
\n
"
,
debugstr_w
((
LPWSTR
)
cmdline
));
wptr
=
(
LPWSTR
)
cmdline
;
while
(
*
wptr
)
{
if
((
*
wptr
==
' '
)
&&
!
qflag
)
return
wptr
+
1
;
if
(
*
wptr
==
'"'
)
qflag
=!
qflag
;
wptr
++
;
}
return
(
LPVOID
)
wptr
;
}
TRACE
(
shell
,
"%s
\n
"
,(
LPSTR
)
cmdline
);
aptr
=
(
LPSTR
)
cmdline
;
while
(
*
aptr
)
{
if
((
*
aptr
==
' '
)
&&
!
qflag
)
return
aptr
+
1
;
if
(
*
aptr
==
'"'
)
qflag
=!
qflag
;
aptr
++
;
}
return
(
LPVOID
)
aptr
;
}
/*************************************************************************
* PathQuoteSpaces [SHELL32.55]
*
* NOTES
* basename(char *fn);
*/
LPSTR
WINAPI
PathQuoteSpaces32A
(
LPCSTR
aptr
)
{
FIXME
(
shell
,
"%s
\n
"
,
aptr
);
return
0
;
}
LPWSTR
WINAPI
PathQuoteSpaces32W
(
LPCWSTR
wptr
)
{
FIXME
(
shell
,
"L%s
\n
"
,
debugstr_w
(
wptr
));
return
0
;
}
LPVOID
WINAPI
PathQuoteSpaces32AW
(
LPCVOID
fn
)
{
if
(
VERSION_OsIsUnicode
())
return
PathQuoteSpaces32W
(
fn
);
return
PathQuoteSpaces32A
(
fn
);
}
/*************************************************************************
* PathUnquoteSpaces [SHELL32.56]
*
* NOTES
* unquote string (remove ")
*/
VOID
WINAPI
PathUnquoteSpaces
(
LPSTR
str
)
{
DWORD
len
=
lstrlen32A
(
str
);
TRACE
(
shell
,
"%s
\n
"
,
str
);
if
(
*
str
!=
'"'
)
return
;
if
(
str
[
len
-
1
]
!=
'"'
)
return
;
str
[
len
-
1
]
=
'\0'
;
lstrcpy32A
(
str
,
str
+
1
);
return
;
}
/*************************************************************************
* ParseField [SHELL32.58]
*
*/
...
...
@@ -569,17 +142,6 @@ int WINAPI SHShellFolderView_Message(HWND32 hwndCabinet,UINT32 uMsg,LPARAM lPara
}
/*************************************************************************
* PathYetAnotherMakeUniqueName [SHELL32.75]
*
* NOTES
* exported by ordinal
*/
BOOL32
WINAPI
PathYetAnotherMakeUniqueName
(
LPDWORD
x
,
LPDWORD
y
)
{
FIXME
(
shell
,
"(%p,%p):stub.
\n
"
,
x
,
y
);
return
TRUE
;
}
/*************************************************************************
* OleStrToStrN [SHELL32.78]
*
* NOTES
...
...
@@ -628,19 +190,6 @@ LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND32 hwndOwner,DWORD nFolder,DWORD x3
return
ppidl
;
}
/*************************************************************************
* IsLFNDrive [SHELL32.119]
*
* NOTES
* exported by ordinal Name
*/
BOOL32
WINAPI
IsLFNDrive
(
LPCSTR
path
)
{
DWORD
fnlen
;
if
(
!
GetVolumeInformation32A
(
path
,
NULL
,
0
,
NULL
,
&
fnlen
,
NULL
,
NULL
,
0
))
return
FALSE
;
return
fnlen
>
12
;
}
/*************************************************************************
* SHGetSpecialFolderPath [SHELL32.175]
...
...
@@ -734,28 +283,6 @@ DWORD WINAPI SHRestricted (DWORD pol) {
}
/*************************************************************************
* PathGetExtension [SHELL32.158]
*
* NOTES
* exported by ordinal
*/
LPCSTR
WINAPI
PathGetExtension32A
(
LPCSTR
path
,
DWORD
y
,
DWORD
z
)
{
TRACE
(
shell
,
"(%s,%08lx,%08lx)
\n
"
,
path
,
y
,
z
);
path
=
PathFindExtension32A
(
path
);
return
*
path
?
(
path
+
1
)
:
path
;
}
LPCWSTR
WINAPI
PathGetExtension32W
(
LPCWSTR
path
,
DWORD
y
,
DWORD
z
)
{
TRACE
(
shell
,
"(L%s,%08lx,%08lx)
\n
"
,
debugstr_w
(
path
),
y
,
z
);
path
=
PathFindExtension32W
(
path
);
return
*
path
?
(
path
+
1
)
:
path
;
}
LPCVOID
WINAPI
PathGetExtension32AW
(
LPCVOID
path
,
DWORD
y
,
DWORD
z
)
{
if
(
VERSION_OsIsUnicode
())
return
PathGetExtension32W
(
path
,
y
,
z
);
return
PathGetExtension32A
(
path
,
y
,
z
);
}
/*************************************************************************
* SHCreateDirectory [SHELL32.165]
*
* NOTES
...
...
@@ -1552,14 +1079,6 @@ HRESULT WINAPI Shell_MergeMenus32 (HMENU32 hmDst, HMENU32 hmSrc, UINT32 uInsert,
}
/*************************************************************************
* PathGetDriveNumber32 [SHELL32.57]
*
*/
HRESULT
WINAPI
PathGetDriveNumber32
(
LPSTR
u
)
{
FIXME
(
shell
,
"%s stub
\n
"
,
debugstr_a
(
u
));
return
0
;
}
/*************************************************************************
* DriveType32 [SHELL32.64]
*
*/
...
...
@@ -1592,23 +1111,6 @@ HRESULT WINAPI SHFlushClipboard(void)
return
1
;
}
/*************************************************************************
* SheGetDirW [SHELL32.281]
*
*/
HRESULT
WINAPI
SheGetDir32W
(
LPWSTR
u
,
LPWSTR
v
)
{
FIXME
(
shell
,
"%s %s stub
\n
"
,
debugstr_w
(
u
),
debugstr_w
(
v
)
);
return
0
;
}
/*************************************************************************
* SheChangeDirW [SHELL32.274]
*
*/
HRESULT
WINAPI
SheChangeDir32W
(
LPWSTR
u
)
{
FIXME
(
shell
,
"(%s),stub
\n
"
,
debugstr_w
(
u
));
return
0
;
}
/*************************************************************************
* StrRChrW [SHELL32.320]
*
*/
...
...
@@ -1631,9 +1133,41 @@ LPWSTR WINAPI StrRChrW(LPWSTR lpStart, LPWSTR lpEnd, DWORD wMatch)
return
wptr
;
}
/*************************************************************************
*
PathProcessCommand [SHELL32.653
]
*
StrFormatByteSize [SHLWAPI
]
*/
HRESULT
WINAPI
PathProcessCommand
(
DWORD
u
,
DWORD
v
,
DWORD
w
,
DWORD
x
)
{
FIXME
(
shell
,
"0x%04lx 0x%04lx 0x%04lx 0x%04lx stub
\n
"
,
u
,
v
,
w
,
x
);
return
0
;
LPSTR
WINAPI
StrFormatByteSize32A
(
DWORD
dw
,
LPSTR
pszBuf
,
UINT32
cchBuf
)
{
char
buf
[
64
];
TRACE
(
shell
,
"%lx %p %i
\n
"
,
dw
,
pszBuf
,
cchBuf
);
if
(
dw
<
1024L
)
{
sprintf
(
buf
,
"%3.1f bytes"
,
(
FLOAT
)
dw
);
}
else
if
(
dw
<
1048576L
)
{
sprintf
(
buf
,
"%3.1f KB"
,
(
FLOAT
)
dw
/
1024
);
}
else
if
(
dw
<
1073741824L
)
{
sprintf
(
buf
,
"%3.1f MB"
,
(
FLOAT
)
dw
/
1048576L
);
}
else
{
sprintf
(
buf
,
"%3.1f GB"
,
(
FLOAT
)
dw
/
1073741824L
);
}
strncpy
(
pszBuf
,
buf
,
cchBuf
);
return
pszBuf
;
}
LPWSTR
WINAPI
StrFormatByteSize32W
(
DWORD
dw
,
LPWSTR
pszBuf
,
UINT32
cchBuf
)
{
char
buf
[
64
];
TRACE
(
shell
,
"%lx %p %i
\n
"
,
dw
,
pszBuf
,
cchBuf
);
if
(
dw
<
1024L
)
{
sprintf
(
buf
,
"%3.1f bytes"
,
(
FLOAT
)
dw
);
}
else
if
(
dw
<
1048576L
)
{
sprintf
(
buf
,
"%3.1f KB"
,
(
FLOAT
)
dw
/
1024
);
}
else
if
(
dw
<
1073741824L
)
{
sprintf
(
buf
,
"%3.1f MB"
,
(
FLOAT
)
dw
/
1048576L
);
}
else
{
sprintf
(
buf
,
"%3.1f GB"
,
(
FLOAT
)
dw
/
1073741824L
);
}
lstrcpynAtoW
(
pszBuf
,
buf
,
cchBuf
);
return
pszBuf
;
}
dlls/shell32/shellpath.c
0 → 100644
View file @
bcd05e99
/*
* Path Functions
*
* Many of this functions are in SHLWAPI.DLL also
*
*/
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "windows.h"
#include "winerror.h"
#include "file.h"
#include "shell.h"
#include "shlobj.h"
#include "debug.h"
#include "winnls.h"
#include "winversion.h"
#include "shell32_main.h"
/*************************************************************************
* PathIsRoot [SHELL32.29]
*/
BOOL32
WINAPI
PathIsRoot32A
(
LPCSTR
x
)
{
TRACE
(
shell
,
"%s
\n
"
,
x
);
if
(
*
(
x
+
1
)
==
':'
&&
*
(
x
+
2
)
==
'\\'
)
/* "X:\" */
return
1
;
if
(
*
x
==
'\\'
)
/* "\" */
return
0
;
if
(
x
[
0
]
==
'\\'
&&
x
[
1
]
==
'\\'
)
/* UNC "\\<xx>\" */
{
int
foundbackslash
=
0
;
x
=
x
+
2
;
while
(
*
x
)
{
if
(
*
x
++==
'\\'
)
foundbackslash
++
;
}
if
(
foundbackslash
<=
1
)
/* max 1 \ more ... */
return
1
;
}
return
0
;
}
BOOL32
WINAPI
PathIsRoot32W
(
LPCWSTR
x
)
{
TRACE
(
shell
,
"%s
\n
"
,
debugstr_w
(
x
));
if
(
*
(
x
+
1
)
==
':'
&&
*
(
x
+
2
)
==
'\\'
)
/* "X:\" */
return
1
;
if
(
*
x
==
(
WCHAR
)
'\\'
)
/* "\" */
return
0
;
if
(
x
[
0
]
==
(
WCHAR
)
'\\'
&&
x
[
1
]
==
(
WCHAR
)
'\\'
)
/* UNC "\\<xx>\" */
{
int
foundbackslash
=
0
;
x
=
x
+
2
;
while
(
*
x
)
{
if
(
*
x
++==
(
WCHAR
)
'\\'
)
foundbackslash
++
;
}
if
(
foundbackslash
<=
1
)
/* max 1 \ more ... */
return
1
;
}
return
0
;
}
BOOL32
WINAPI
PathIsRoot32AW
(
LPCVOID
x
)
{
if
(
VERSION_OsIsUnicode
())
return
PathIsRoot32W
(
x
);
return
PathIsRoot32A
(
x
);
}
/*************************************************************************
* PathBuildRoot [SHELL32.30]
*/
LPSTR
WINAPI
PathBuildRoot
(
LPSTR
root
,
BYTE
drive
)
{
TRACE
(
shell
,
"%p %i
\n
"
,
root
,
drive
);
strcpy
(
root
,
"A:
\\
"
);
root
[
0
]
+=
drive
;
return
root
;
}
/*************************************************************************
* PathFindExtension [SHELL32.31]
*
* NOTES
* returns pointer to last . in last pathcomponent or at \0.
*/
LPCSTR
WINAPI
PathFindExtension32A
(
LPCSTR
path
)
{
LPCSTR
lastpoint
=
NULL
;
TRACE
(
shell
,
"%p %s
\n
"
,
path
,
path
);
while
(
*
path
)
{
if
(
*
path
==
'\\'
||*
path
==
' '
)
lastpoint
=
NULL
;
if
(
*
path
==
'.'
)
lastpoint
=
path
;
path
++
;
}
return
lastpoint
?
lastpoint
:
path
;
}
LPCWSTR
WINAPI
PathFindExtension32W
(
LPCWSTR
path
)
{
LPCWSTR
lastpoint
=
NULL
;
TRACE
(
shell
,
"%p L%s
\n
"
,
path
,
debugstr_w
(
path
));
while
(
*
path
)
{
if
(
*
path
==
(
WCHAR
)
'\\'
||*
path
==
(
WCHAR
)
' '
)
lastpoint
=
NULL
;
if
(
*
path
==
(
WCHAR
)
'.'
)
lastpoint
=
path
;
path
++
;
}
return
lastpoint
?
lastpoint
:
path
;
}
LPCVOID
WINAPI
PathFindExtension32AW
(
LPCVOID
path
)
{
if
(
VERSION_OsIsUnicode
())
return
PathFindExtension32W
(
path
);
return
PathFindExtension32A
(
path
);
}
/*************************************************************************
* PathAddBackslash [SHELL32.32]
*
* NOTES
* append \ if there is none
*/
LPSTR
WINAPI
PathAddBackslash32A
(
LPSTR
path
)
{
int
len
;
TRACE
(
shell
,
"%p->%s
\n
"
,
path
,
path
);
len
=
strlen
(
path
);
if
(
len
&&
path
[
len
-
1
]
!=
'\\'
)
{
path
[
len
]
=
'\\'
;
path
[
len
+
1
]
=
0x00
;
return
path
+
len
+
1
;
}
return
path
+
len
;
}
LPWSTR
WINAPI
PathAddBackslash32W
(
LPWSTR
path
)
{
int
len
;
TRACE
(
shell
,
"%p->%s
\n
"
,
path
,
debugstr_w
(
path
));
len
=
lstrlen32W
(
path
);
if
(
len
&&
path
[
len
-
1
]
!=
(
WCHAR
)
'\\'
)
{
path
[
len
]
=
(
WCHAR
)
'\\'
;
path
[
len
+
1
]
=
0x00
;
return
path
+
len
+
1
;
}
return
path
+
len
;
}
LPVOID
WINAPI
PathAddBackslash32AW
(
LPVOID
path
)
{
if
(
VERSION_OsIsUnicode
())
return
PathAddBackslash32W
(
path
);
return
PathAddBackslash32A
(
path
);
}
/*************************************************************************
* PathRemoveBlanks [SHELL32.33]
*
* NOTES
* remove spaces from beginning and end of passed string
*/
LPSTR
WINAPI
PathRemoveBlanks32A
(
LPSTR
str
)
{
LPSTR
x
=
str
;
TRACE
(
shell
,
"%s
\n
"
,
str
);
while
(
*
x
==
' '
)
x
++
;
if
(
x
!=
str
)
strcpy
(
str
,
x
);
if
(
!*
str
)
return
str
;
x
=
str
+
strlen
(
str
)
-
1
;
while
(
*
x
==
' '
)
x
--
;
if
(
*
x
==
' '
)
*
x
=
'\0'
;
return
x
;
}
LPWSTR
WINAPI
PathRemoveBlanks32W
(
LPWSTR
str
)
{
LPWSTR
x
=
str
;
TRACE
(
shell
,
"%s
\n
"
,
debugstr_w
(
str
));
while
(
*
x
==
' '
)
x
++
;
if
(
x
!=
str
)
lstrcpy32W
(
str
,
x
);
if
(
!*
str
)
return
str
;
x
=
str
+
lstrlen32W
(
str
)
-
1
;
while
(
*
x
==
' '
)
x
--
;
if
(
*
x
==
' '
)
*
x
=
'\0'
;
return
x
;
}
LPVOID
WINAPI
PathRemoveBlanks32AW
(
LPVOID
str
)
{
if
(
VERSION_OsIsUnicode
())
return
PathRemoveBlanks32W
(
str
);
return
PathRemoveBlanks32A
(
str
);
}
/*************************************************************************
* PathFindFilename [SHELL32.34]
*
* NOTES
* basename(char *fn);
*/
LPCSTR
WINAPI
PathFindFilename32A
(
LPCSTR
aptr
)
{
LPCSTR
aslash
;
aslash
=
aptr
;
TRACE
(
shell
,
"%s
\n
"
,
aslash
);
while
(
aptr
[
0
])
{
if
(((
aptr
[
0
]
==
'\\'
)
||
(
aptr
[
0
]
==
':'
))
&&
aptr
[
1
]
&&
aptr
[
1
]
!=
'\\'
)
aslash
=
aptr
+
1
;
aptr
++
;
}
return
aslash
;
}
LPCWSTR
WINAPI
PathFindFilename32W
(
LPCWSTR
wptr
)
{
LPCWSTR
wslash
;
wslash
=
wptr
;
TRACE
(
shell
,
"L%s
\n
"
,
debugstr_w
(
wslash
));
while
(
wptr
[
0
])
{
if
(((
wptr
[
0
]
==
'\\'
)
||
(
wptr
[
0
]
==
':'
))
&&
wptr
[
1
]
&&
wptr
[
1
]
!=
'\\'
)
wslash
=
wptr
+
1
;
wptr
++
;
}
return
wslash
;
}
LPCVOID
WINAPI
PathFindFilename32AW
(
LPCVOID
fn
)
{
if
(
VERSION_OsIsUnicode
())
return
PathFindFilename32W
(
fn
);
return
PathFindFilename32A
(
fn
);
}
/*************************************************************************
* PathRemoveFileSpec [SHELL32.35]
*
* NOTES
* bool getpath(char *pathname); truncates passed argument to a valid path
* returns if the string was modified or not.
* "\foo\xx\foo"-> "\foo\xx"
* "\" -> "\"
* "a:\foo" -> "a:\"
*/
DWORD
WINAPI
PathRemoveFileSpec
(
LPSTR
fn
)
{
LPSTR
x
,
cutplace
;
TRACE
(
shell
,
"%s
\n
"
,
fn
);
if
(
!
fn
[
0
])
return
0
;
x
=
fn
;
cutplace
=
fn
;
while
(
*
x
)
{
if
(
*
x
==
'\\'
)
{
cutplace
=
x
++
;
continue
;
}
if
(
*
x
==
':'
)
{
x
++
;
if
(
*
x
==
'\\'
)
cutplace
=++
x
;
continue
;
/* already x++ed */
}
x
++
;
}
if
(
!*
cutplace
)
return
0
;
if
(
cutplace
==
fn
)
{
if
(
fn
[
0
]
==
'\\'
)
{
if
(
!
fn
[
1
])
return
0
;
fn
[
0
]
=
'\0'
;
return
1
;
}
}
*
cutplace
=
'\0'
;
return
1
;
}
/*************************************************************************
* PathAppend [SHELL32.36]
*
* NOTES
* concat_paths(char*target,const char*add);
* concats "target\\add" and writes them to target
*/
LPSTR
WINAPI
PathAppend
(
LPSTR
x1
,
LPSTR
x2
)
{
TRACE
(
shell
,
"%s %s
\n
"
,
x1
,
x2
);
while
(
x2
[
0
]
==
'\\'
)
x2
++
;
return
PathCombine32A
(
x1
,
x1
,
x2
);
}
/*************************************************************************
* PathCombine [SHELL32.37]
*
* NOTES
* if lpszFile='.' skip it
* szDest can be equal to lpszFile. Thats why we use sTemp
*/
LPSTR
WINAPI
PathCombine32A
(
LPSTR
szDest
,
LPCSTR
lpszDir
,
LPCSTR
lpszFile
)
{
char
sTemp
[
MAX_PATH
];
TRACE
(
shell
,
"%p %p->%s %p->%s
\n
"
,
szDest
,
lpszDir
,
lpszDir
,
lpszFile
,
lpszFile
);
if
(
!
lpszFile
||
!
lpszFile
[
0
]
||
(
lpszFile
[
0
]
==
'.'
&&
!
lpszFile
[
1
])
)
{
strcpy
(
szDest
,
lpszDir
);
return
szDest
;
}
/* if lpszFile is a complete path don't care about lpszDir */
if
(
PathIsRoot32A
(
lpszFile
))
{
strcpy
(
szDest
,
lpszFile
);
}
strcpy
(
sTemp
,
lpszDir
);
PathAddBackslash32A
(
sTemp
);
strcat
(
sTemp
,
lpszFile
);
strcpy
(
szDest
,
sTemp
);
return
szDest
;
}
LPWSTR
WINAPI
PathCombine32W
(
LPWSTR
szDest
,
LPCWSTR
lpszDir
,
LPCWSTR
lpszFile
)
{
WCHAR
sTemp
[
MAX_PATH
];
TRACE
(
shell
,
"%p %p->%s %p->%s
\n
"
,
szDest
,
lpszDir
,
debugstr_w
(
lpszDir
),
lpszFile
,
debugstr_w
(
lpszFile
));
if
(
!
lpszFile
||
!
lpszFile
[
0
]
||
(
lpszFile
[
0
]
==
(
WCHAR
)
'.'
&&
!
lpszFile
[
1
])
)
{
lstrcpy32W
(
szDest
,
lpszDir
);
return
szDest
;
}
/* if lpszFile is a complete path don't care about lpszDir */
if
(
PathIsRoot32W
(
lpszFile
))
{
lstrcpy32W
(
szDest
,
lpszFile
);
}
lstrcpy32W
(
sTemp
,
lpszDir
);
PathAddBackslash32W
(
sTemp
);
lstrcat32W
(
sTemp
,
lpszFile
);
lstrcpy32W
(
szDest
,
sTemp
);
return
szDest
;
}
LPVOID
WINAPI
PathCombine32AW
(
LPVOID
szDest
,
LPCVOID
lpszDir
,
LPCVOID
lpszFile
)
{
if
(
VERSION_OsIsUnicode
())
return
PathCombine32W
(
szDest
,
lpszDir
,
lpszFile
);
return
PathCombine32A
(
szDest
,
lpszDir
,
lpszFile
);
}
/*************************************************************************
* PathIsUNC [SHELL32.39]
*
* NOTES
* PathIsUNC(char*path);
*/
BOOL32
WINAPI
PathIsUNC
(
LPCSTR
path
)
{
TRACE
(
shell
,
"%s
\n
"
,
path
);
if
((
path
[
0
]
==
'\\'
)
&&
(
path
[
1
]
==
'\\'
))
return
TRUE
;
return
FALSE
;
}
/*************************************************************************
* PathIsExe [SHELL32.43]
*
*/
BOOL32
WINAPI
PathIsExe
(
LPCSTR
path
)
{
TRACE
(
shell
,
"path=%s
\n
"
,
path
);
return
FALSE
;
}
/*************************************************************************
* PathFileExists [SHELL32.45]
*
* NOTES
* file_exists(char *fn);
*/
BOOL32
WINAPI
PathFileExists
(
LPSTR
fn
)
{
TRACE
(
shell
,
"%s
\n
"
,
fn
);
if
(
GetFileAttributes32A
(
fn
)
==-
1
)
return
FALSE
;
else
return
TRUE
;
}
/*************************************************************************
* PathMatchSpec [SHELL32.46]
*
* NOTES
* used from COMDLG32
*/
BOOL32
WINAPI
PathMatchSpec32A
(
LPCSTR
name
,
LPCSTR
mask
)
{
LPCSTR
_name
;
TRACE
(
shell
,
"%s %s stub
\n
"
,
name
,
mask
);
_name
=
name
;
while
(
*
_name
&&
*
mask
)
{
if
(
*
mask
==
';'
)
{
mask
++
;
_name
=
name
;
}
else
if
(
*
mask
==
'*'
)
{
mask
++
;
while
(
*
mask
==
'*'
)
mask
++
;
/* Skip consecutive '*' */
if
(
!*
mask
||
*
mask
==
';'
)
return
TRUE
;
/* '*' matches everything */
while
(
*
_name
&&
(
toupper
(
*
_name
)
!=
toupper
(
*
mask
)))
_name
++
;
if
(
!*
_name
)
{
while
(
*
mask
&&
*
mask
!=
';'
)
mask
++
;
_name
=
name
;
}
}
else
if
(
(
*
mask
==
'?'
)
||
(
toupper
(
*
mask
)
==
toupper
(
*
_name
))
)
{
mask
++
;
_name
++
;
}
else
{
while
(
*
mask
&&
*
mask
!=
';'
)
mask
++
;
}
}
return
(
!*
_name
&&
(
!*
mask
||
*
mask
==
';'
));
}
BOOL32
WINAPI
PathMatchSpec32W
(
LPCWSTR
name
,
LPCWSTR
mask
)
{
WCHAR
stemp
[
4
];
LPCWSTR
_name
;
TRACE
(
shell
,
"%s %s stub
\n
"
,
debugstr_w
(
name
),
debugstr_w
(
mask
));
lstrcpyAtoW
(
stemp
,
"*.*"
);
if
(
!
lstrcmp32W
(
mask
,
stemp
))
return
1
;
_name
=
name
;
while
(
*
_name
&&
*
mask
)
{
if
(
*
mask
==
';'
)
{
mask
++
;
_name
=
name
;
}
else
if
(
*
mask
==
'*'
)
{
mask
++
;
while
(
*
mask
==
'*'
)
mask
++
;
/* Skip consecutive '*' */
if
(
!*
mask
||
*
mask
==
';'
)
return
TRUE
;
/* '*' matches everything */
while
(
*
_name
&&
(
towupper
(
*
_name
)
!=
towupper
(
*
mask
)))
_name
++
;
if
(
!*
_name
)
{
while
(
*
mask
&&
*
mask
!=
';'
)
mask
++
;
_name
=
name
;
}
}
else
if
(
(
*
mask
==
'?'
)
||
(
towupper
(
*
mask
)
==
towupper
(
*
_name
))
)
{
mask
++
;
_name
++
;
}
else
{
while
(
*
mask
&&
*
mask
!=
';'
)
mask
++
;
}
}
return
(
!*
_name
&&
(
!*
mask
||
*
mask
==
';'
));
}
BOOL32
WINAPI
PathMatchSpec32AW
(
LPVOID
name
,
LPVOID
mask
)
{
if
(
VERSION_OsIsUnicode
())
return
PathMatchSpec32W
(
name
,
mask
);
return
PathMatchSpec32A
(
name
,
mask
);
}
/*************************************************************************
* PathSetDlgItemPath32AW [SHELL32.48]
* NOTES
* use PathCompactPath to make sure, the path fits into the control
*/
BOOL32
WINAPI
PathSetDlgItemPath32A
(
HWND32
hDlg
,
int
id
,
LPCSTR
pszPath
)
{
TRACE
(
shell
,
"%x %x %s
\n
"
,
hDlg
,
id
,
pszPath
);
return
SetDlgItemText32A
(
hDlg
,
id
,
pszPath
);
}
BOOL32
WINAPI
PathSetDlgItemPath32W
(
HWND32
hDlg
,
int
id
,
LPCWSTR
pszPath
)
{
TRACE
(
shell
,
"%x %x %s
\n
"
,
hDlg
,
id
,
debugstr_w
(
pszPath
));
return
SetDlgItemText32W
(
hDlg
,
id
,
pszPath
);
}
BOOL32
WINAPI
PathSetDlgItemPath32AW
(
HWND32
hDlg
,
int
id
,
LPCVOID
pszPath
)
{
if
(
VERSION_OsIsUnicode
())
return
PathSetDlgItemPath32W
(
hDlg
,
id
,
pszPath
);
return
PathSetDlgItemPath32A
(
hDlg
,
id
,
pszPath
);
}
/*************************************************************************
* PathResolve [SHELL32.51]
*/
DWORD
WINAPI
PathResolve
(
LPCSTR
s
,
DWORD
x2
,
DWORD
x3
)
{
FIXME
(
shell
,
"(%s,0x%08lx,0x%08lx),stub!
\n
"
,
s
,
x2
,
x3
);
return
0
;
}
/*************************************************************************
* PathGetArgs [SHELL32.52]
*
* NOTES
* look for next arg in string. handle "quoted" strings
* returns pointer to argument *AFTER* the space. Or to the \0.
*/
LPVOID
WINAPI
PathGetArgs
(
LPVOID
cmdline
)
{
BOOL32
qflag
=
FALSE
;
LPWSTR
wptr
;
LPSTR
aptr
;
if
(
VERSION_OsIsUnicode
())
{
TRACE
(
shell
,
"%sL
\n
"
,
debugstr_w
((
LPWSTR
)
cmdline
));
wptr
=
(
LPWSTR
)
cmdline
;
while
(
*
wptr
)
{
if
((
*
wptr
==
' '
)
&&
!
qflag
)
return
wptr
+
1
;
if
(
*
wptr
==
'"'
)
qflag
=!
qflag
;
wptr
++
;
}
return
(
LPVOID
)
wptr
;
}
TRACE
(
shell
,
"%s
\n
"
,(
LPSTR
)
cmdline
);
aptr
=
(
LPSTR
)
cmdline
;
while
(
*
aptr
)
{
if
((
*
aptr
==
' '
)
&&
!
qflag
)
return
aptr
+
1
;
if
(
*
aptr
==
'"'
)
qflag
=!
qflag
;
aptr
++
;
}
return
(
LPVOID
)
aptr
;
}
/*************************************************************************
* PathQuoteSpaces [SHELL32.55]
*
* NOTES
* basename(char *fn);
*/
LPSTR
WINAPI
PathQuoteSpaces32A
(
LPCSTR
aptr
)
{
FIXME
(
shell
,
"%s
\n
"
,
aptr
);
return
0
;
}
LPWSTR
WINAPI
PathQuoteSpaces32W
(
LPCWSTR
wptr
)
{
FIXME
(
shell
,
"L%s
\n
"
,
debugstr_w
(
wptr
));
return
0
;
}
LPVOID
WINAPI
PathQuoteSpaces32AW
(
LPCVOID
fn
)
{
if
(
VERSION_OsIsUnicode
())
return
PathQuoteSpaces32W
(
fn
);
return
PathQuoteSpaces32A
(
fn
);
}
/*************************************************************************
* PathUnquoteSpaces [SHELL32.56]
*
* NOTES
* unquote string (remove ")
*/
VOID
WINAPI
PathUnquoteSpaces
(
LPSTR
str
)
{
DWORD
len
=
lstrlen32A
(
str
);
TRACE
(
shell
,
"%s
\n
"
,
str
);
if
(
*
str
!=
'"'
)
return
;
if
(
str
[
len
-
1
]
!=
'"'
)
return
;
str
[
len
-
1
]
=
'\0'
;
lstrcpy32A
(
str
,
str
+
1
);
return
;
}
/*************************************************************************
* PathGetDriveNumber32 [SHELL32.57]
*
*/
HRESULT
WINAPI
PathGetDriveNumber32
(
LPSTR
u
)
{
FIXME
(
shell
,
"%s stub
\n
"
,
debugstr_a
(
u
));
return
0
;
}
/*************************************************************************
* PathYetAnotherMakeUniqueName [SHELL32.75]
*
* NOTES
* exported by ordinal
*/
BOOL32
WINAPI
PathYetAnotherMakeUniqueName
(
LPDWORD
x
,
LPDWORD
y
)
{
FIXME
(
shell
,
"(%p,%p):stub.
\n
"
,
x
,
y
);
return
TRUE
;
}
/*************************************************************************
* IsLFNDrive [SHELL32.119]
*
* NOTES
* exported by ordinal Name
*/
BOOL32
WINAPI
IsLFNDrive
(
LPCSTR
path
)
{
DWORD
fnlen
;
if
(
!
GetVolumeInformation32A
(
path
,
NULL
,
0
,
NULL
,
&
fnlen
,
NULL
,
NULL
,
0
))
return
FALSE
;
return
fnlen
>
12
;
}
/*************************************************************************
* PathGetExtension [SHELL32.158]
*
* NOTES
* exported by ordinal
*/
LPCSTR
WINAPI
PathGetExtension32A
(
LPCSTR
path
,
DWORD
y
,
DWORD
z
)
{
TRACE
(
shell
,
"(%s,%08lx,%08lx)
\n
"
,
path
,
y
,
z
);
path
=
PathFindExtension32A
(
path
);
return
*
path
?
(
path
+
1
)
:
path
;
}
LPCWSTR
WINAPI
PathGetExtension32W
(
LPCWSTR
path
,
DWORD
y
,
DWORD
z
)
{
TRACE
(
shell
,
"(L%s,%08lx,%08lx)
\n
"
,
debugstr_w
(
path
),
y
,
z
);
path
=
PathFindExtension32W
(
path
);
return
*
path
?
(
path
+
1
)
:
path
;
}
LPCVOID
WINAPI
PathGetExtension32AW
(
LPCVOID
path
,
DWORD
y
,
DWORD
z
)
{
if
(
VERSION_OsIsUnicode
())
return
PathGetExtension32W
(
path
,
y
,
z
);
return
PathGetExtension32A
(
path
,
y
,
z
);
}
/*************************************************************************
* SheGetDirW [SHELL32.281]
*
*/
HRESULT
WINAPI
SheGetDir32W
(
LPWSTR
u
,
LPWSTR
v
)
{
FIXME
(
shell
,
"%s %s stub
\n
"
,
debugstr_w
(
u
),
debugstr_w
(
v
)
);
return
0
;
}
/*************************************************************************
* SheChangeDirW [SHELL32.274]
*
*/
HRESULT
WINAPI
SheChangeDir32W
(
LPWSTR
u
)
{
FIXME
(
shell
,
"(%s),stub
\n
"
,
debugstr_w
(
u
));
return
0
;
}
/*************************************************************************
* PathProcessCommand [SHELL32.653]
*/
HRESULT
WINAPI
PathProcessCommand
(
DWORD
u
,
DWORD
v
,
DWORD
w
,
DWORD
x
)
{
FIXME
(
shell
,
"0x%04lx 0x%04lx 0x%04lx 0x%04lx stub
\n
"
,
u
,
v
,
w
,
x
);
return
0
;
}
dlls/shell32/shlview.c
View file @
bcd05e99
...
...
@@ -206,13 +206,13 @@ static void MergeToolBar(LPSHELLVIEW this)
IShellBrowser_SendControlMsg
(
this
->
pShellBrowser
,
FCW_TOOLBAR
,
TB_ADDBITMAP
,
8
,
(
LPARAM
)
&
ab
,
&
iStdBMOffset
);
TRACE
(
shell
,
"TB_ADDBITMAP returns %x
\n
"
,
iStdBMOffset
);
TRACE
(
shell
,
"TB_ADDBITMAP returns %
l
x
\n
"
,
iStdBMOffset
);
ab
.
nID
=
IDB_VIEW_SMALL_COLOR
;
// std view bitmaps
IShellBrowser_SendControlMsg
(
this
->
pShellBrowser
,
FCW_TOOLBAR
,
TB_ADDBITMAP
,
8
,
(
LPARAM
)
&
ab
,
&
iViewBMOffset
);
TRACE
(
shell
,
"TB_ADDBITMAP returns %x
\n
"
,
iViewBMOffset
);
TRACE
(
shell
,
"TB_ADDBITMAP returns %
l
x
\n
"
,
iViewBMOffset
);
for
(
i
=
0
;
i
<
6
;
++
i
)
{
tbActual
[
i
]
=
c_tbDefault
[
i
];
...
...
@@ -279,7 +279,7 @@ BOOL32 ShellView_CreateList (LPSHELLVIEW this)
* internal
*/
int
nColumn1
=
120
;
/* width of column */
int
nColumn2
=
5
0
;
int
nColumn2
=
8
0
;
int
nColumn3
=
170
;
int
nColumn4
=
60
;
...
...
@@ -883,7 +883,7 @@ void ShellView_DoContextMenu(LPSHELLVIEW this, WORD x, WORD y, BOOL32 fDefault)
}
}
else
{
TRACE
(
shell
,
"-- invoke command
\n
"
,
this
->
aSelectedItems
[
0
]
);
{
TRACE
(
shell
,
"-- invoke command
\n
"
);
ZeroMemory
(
&
cmi
,
sizeof
(
cmi
));
cmi
.
cbSize
=
sizeof
(
cmi
);
cmi
.
hwnd
=
this
->
hWndParent
;
...
...
@@ -1011,20 +1011,24 @@ LRESULT ShellView_OnNotify(LPSHELLVIEW this, UINT32 CtlID, LPNMHDR lpnmh)
{
if
(
lpdi
->
item
.
mask
&
LVIF_TEXT
)
/*is the text being requested?*/
{
if
(
_ILIsValue
(
pidl
))
/*is this a value or a folder?*/
{
switch
(
lpdi
->
item
.
iSubItem
)
{
case
1
:
{
case
1
:
/* size */
_ILGetFileSize
(
pidl
,
lpdi
->
item
.
pszText
,
lpdi
->
item
.
cchTextMax
);
break
;
case
2
:
case
2
:
/* extension */
{
char
sTemp
[
64
];
if
(
!
(
_ILGetExtension
(
pidl
,
sTemp
,
64
)
&&
HCR_MapTypeToValue
(
sTemp
,
sTemp
,
64
)
&&
HCR_MapTypeToValue
(
sTemp
,
lpdi
->
item
.
pszText
,
lpdi
->
item
.
cchTextMax
)))
{
strncpy
(
lpdi
->
item
.
pszText
,
sTemp
,
lpdi
->
item
.
cchTextMax
);
strncat
(
lpdi
->
item
.
pszText
,
"-file"
,
lpdi
->
item
.
cchTextMax
);
}
if
(
_ILGetExtension
(
pidl
,
sTemp
,
64
))
{
if
(
!
(
HCR_MapTypeToValue
(
sTemp
,
sTemp
,
64
)
&&
HCR_MapTypeToValue
(
sTemp
,
lpdi
->
item
.
pszText
,
lpdi
->
item
.
cchTextMax
)))
{
strncpy
(
lpdi
->
item
.
pszText
,
sTemp
,
lpdi
->
item
.
cchTextMax
);
strncat
(
lpdi
->
item
.
pszText
,
"-file"
,
lpdi
->
item
.
cchTextMax
);
}
}
else
/* no extension found */
{
lpdi
->
item
.
pszText
[
0
]
=
0x00
;
}
}
break
;
case
3
:
case
3
:
/* date */
_ILGetFileDate
(
pidl
,
lpdi
->
item
.
pszText
,
lpdi
->
item
.
cchTextMax
);
break
;
}
...
...
include/shell.h
View file @
bcd05e99
...
...
@@ -283,7 +283,20 @@ LPCWSTR WINAPI PathFindFilename32W(LPCWSTR path);
#define PathFindFilename WINELIB_NAME_AW(PathFindFilename)
LPCVOID
WINAPI
PathFindFilename32AW
(
LPCVOID
path
);
LPSTR
WINAPI
PathRemoveBlanks
(
LPSTR
str
);
BOOL32
WINAPI
PathMatchSpec32A
(
LPCSTR
x
,
LPCSTR
y
);
BOOL32
WINAPI
PathMatchSpec32W
(
LPCWSTR
x
,
LPCWSTR
y
);
#define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
BOOL32
WINAPI
PathMatchSpec32AW
(
LPVOID
x
,
LPVOID
y
);
LPSTR
WINAPI
PathRemoveBlanks32A
(
LPSTR
str
);
LPWSTR
WINAPI
PathRemoveBlanks32W
(
LPWSTR
str
);
#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
LPVOID
WINAPI
PathRemoveBlanks32AW
(
LPVOID
str
);
LPSTR
WINAPI
StrFormatByteSize32A
(
DWORD
dw
,
LPSTR
pszBuf
,
UINT32
cchBuf
);
LPWSTR
WINAPI
StrFormatByteSize32W
(
DWORD
dw
,
LPWSTR
pszBuf
,
UINT32
cchBuf
);
#define StrFormatByteSize WINELIB_NAME_AW(StrFormatByteSize)
/****************************************************************************
* other functions
*/
...
...
relay32/shell32.spec
View file @
bcd05e99
...
...
@@ -38,7 +38,7 @@ init Shell32LibMain
30 stdcall PathBuildRoot(ptr long) PathBuildRoot
31 stdcall PathFindExtension(ptr) PathFindExtension32AW
32 stdcall PathAddBackslash(ptr) PathAddBackslash32AW
33 stdcall PathRemoveBlanks(str) PathRemoveBlanks
33 stdcall PathRemoveBlanks(str) PathRemoveBlanks
32AW
34 stdcall PathFindFilename(ptr) PathFindFilename32AW
35 stdcall PathRemoveFileSpec(str) PathRemoveFileSpec
36 stdcall PathAppend(str str) PathAppend
...
...
@@ -51,9 +51,9 @@ init Shell32LibMain
43 stdcall PathIsExe (ptr) PathIsExe
44 stub DoEnvironmentSubstA@8
45 stdcall PathFileExists(str) PathFileExists
46 stdcall PathMatchSpec (str str) PathMatchSpec
46 stdcall PathMatchSpec (str str) PathMatchSpec
32AW
47 stub PathMakeUniqueName@20
48 st
ub PathSetDlgItemPath@12
48 st
dcall PathSetDlgItemPath (long long ptr) PathSetDlgItemPath32AW
49 stub PathQualify@4
50 stub PathStripToRoot@4
51 stdcall PathResolve(str long long) PathResolve
...
...
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