Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
29378268
Commit
29378268
authored
Oct 15, 2003
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rewrote splitpath and wsplitpath to avoid modifying the path
separators.
parent
2925d6ad
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
42 additions
and
124 deletions
+42
-124
dir.c
dlls/msvcrt/dir.c
+21
-63
string.c
dlls/ntdll/string.c
+21
-61
No files found.
dlls/msvcrt/dir.c
View file @
29378268
...
...
@@ -434,86 +434,44 @@ int _wrmdir(const MSVCRT_wchar_t * dir)
void
_wsplitpath
(
const
MSVCRT_wchar_t
*
inpath
,
MSVCRT_wchar_t
*
drv
,
MSVCRT_wchar_t
*
dir
,
MSVCRT_wchar_t
*
fname
,
MSVCRT_wchar_t
*
ext
)
{
/* Modified PD code from 'snippets' collection. */
MSVCRT_wchar_t
ch
,
*
ptr
,
*
p
;
MSVCRT_wchar_t
pathbuff
[
MAX_PATH
],
*
path
=
pathbuff
;
const
MSVCRT_wchar_t
*
p
,
*
end
;
/* FIXME: Should be an strncpyW or something */
strcpyW
(
pathbuff
,
inpath
);
TRACE
(
":splitting path %s
\n
"
,
debugstr_w
(
path
));
/* convert slashes to backslashes for searching */
for
(
ptr
=
(
MSVCRT_wchar_t
*
)
path
;
*
ptr
;
++
ptr
)
if
(
*
ptr
==
'/'
)
*
ptr
=
'\\'
;
/* look for drive spec */
if
((
ptr
=
strchrW
(
path
,
':'
))
!=
0
)
if
(
inpath
[
0
]
&&
inpath
[
1
]
==
':'
)
{
++
ptr
;
if
(
drv
)
{
strncpyW
(
drv
,
path
,
ptr
-
path
);
drv
[
ptr
-
path
]
=
0
;
drv
[
0
]
=
inpath
[
0
];
drv
[
1
]
=
inpath
[
1
];
drv
[
2
]
=
0
;
}
path
=
ptr
;
inpath
+=
2
;
}
else
if
(
drv
)
*
drv
=
0
;
else
if
(
drv
)
drv
[
0
]
=
0
;
/* find rightmost backslash or leftmost colon
*/
if
((
ptr
=
strrchrW
(
path
,
'\\'
))
==
NULL
)
ptr
=
(
strchrW
(
path
,
':'
))
;
/* look for end of directory part
*/
end
=
NULL
;
for
(
p
=
inpath
;
*
p
;
p
++
)
if
(
*
p
==
'/'
||
*
p
==
'\\'
)
end
=
p
+
1
;
if
(
!
ptr
)
if
(
end
)
/* got a directory */
{
ptr
=
(
MSVCRT_wchar_t
*
)
path
;
/* no path */
if
(
dir
)
*
dir
=
0
;
}
else
{
++
ptr
;
/* skip the delimiter */
if
(
dir
)
{
ch
=
*
ptr
;
*
ptr
=
0
;
strcpyW
(
dir
,
path
);
*
ptr
=
ch
;
memcpy
(
dir
,
inpath
,
(
end
-
inpath
)
*
sizeof
(
MSVCRT_wchar_t
)
);
dir
[
end
-
inpath
]
=
0
;
}
inpath
=
end
;
}
else
if
(
dir
)
dir
[
0
]
=
0
;
if
((
p
=
strrchrW
(
ptr
,
'.'
))
==
NULL
)
{
if
(
fname
)
strcpyW
(
fname
,
ptr
);
if
(
ext
)
*
ext
=
0
;
}
else
{
*
p
=
0
;
if
(
fname
)
strcpyW
(
fname
,
ptr
);
*
p
=
'.'
;
if
(
ext
)
strcpyW
(
ext
,
p
);
}
/* look for extension */
for
(
end
=
inpath
;
*
end
;
end
++
)
if
(
*
end
==
'.'
)
break
;
/* Fix pathological case - Win returns ':' as part of the
* directory when no drive letter is given.
*/
if
(
drv
&&
drv
[
0
]
==
':'
)
{
*
drv
=
0
;
if
(
dir
)
if
(
fname
)
{
pathbuff
[
0
]
=
':'
;
pathbuff
[
1
]
=
0
;
strcatW
(
pathbuff
,
dir
);
strcpyW
(
dir
,
pathbuff
);
}
memcpy
(
fname
,
inpath
,
(
end
-
inpath
)
*
sizeof
(
MSVCRT_wchar_t
)
);
fname
[
end
-
inpath
]
=
0
;
}
if
(
ext
)
strcpyW
(
ext
,
end
);
}
/* INTERNAL: Helper for _fullpath. Modified PD code from 'snippets'. */
...
...
dlls/ntdll/string.c
View file @
29378268
...
...
@@ -347,82 +347,42 @@ LONGLONG __cdecl _atoi64( char *str )
void
__cdecl
_splitpath
(
const
char
*
inpath
,
char
*
drv
,
char
*
dir
,
char
*
fname
,
char
*
ext
)
{
/* Modified PD code from 'snippets' collection. */
char
ch
,
*
ptr
,
*
p
;
char
pathbuff
[
MAX_PATH
],
*
path
=
pathbuff
;
const
char
*
p
,
*
end
;
strcpy
(
pathbuff
,
inpath
);
/* convert slashes to backslashes for searching */
for
(
ptr
=
(
char
*
)
path
;
*
ptr
;
++
ptr
)
if
(
'/'
==
*
ptr
)
*
ptr
=
'\\'
;
/* look for drive spec */
if
(
'\0'
!=
(
ptr
=
strchr
(
path
,
':'
)))
if
(
inpath
[
0
]
&&
inpath
[
1
]
==
':'
)
{
++
ptr
;
if
(
drv
)
{
strncpy
(
drv
,
path
,
ptr
-
path
);
drv
[
ptr
-
path
]
=
'\0'
;
drv
[
0
]
=
inpath
[
0
];
drv
[
1
]
=
inpath
[
1
];
drv
[
2
]
=
0
;
}
path
=
ptr
;
inpath
+=
2
;
}
else
if
(
drv
)
*
drv
=
'\0'
;
else
if
(
drv
)
drv
[
0
]
=
0
;
/* find rightmost backslash or leftmost colon
*/
if
(
NULL
==
(
ptr
=
strrchr
(
path
,
'\\'
)))
ptr
=
(
strchr
(
path
,
':'
))
;
/* look for end of directory part
*/
end
=
NULL
;
for
(
p
=
inpath
;
*
p
;
p
++
)
if
(
*
p
==
'/'
||
*
p
==
'\\'
)
end
=
p
+
1
;
if
(
!
ptr
)
{
ptr
=
(
char
*
)
path
;
/* no path */
if
(
dir
)
*
dir
=
'\0'
;
}
else
if
(
end
)
/* got a directory */
{
++
ptr
;
/* skip the delimiter */
if
(
dir
)
{
ch
=
*
ptr
;
*
ptr
=
'\0'
;
strcpy
(
dir
,
path
);
*
ptr
=
ch
;
memcpy
(
dir
,
inpath
,
end
-
inpath
);
dir
[
end
-
inpath
]
=
0
;
}
inpath
=
end
;
}
else
if
(
dir
)
dir
[
0
]
=
0
;
if
(
NULL
==
(
p
=
strrchr
(
ptr
,
'.'
)))
{
if
(
fname
)
strcpy
(
fname
,
ptr
);
if
(
ext
)
*
ext
=
'\0'
;
}
else
{
*
p
=
'\0'
;
if
(
fname
)
strcpy
(
fname
,
ptr
);
*
p
=
'.'
;
if
(
ext
)
strcpy
(
ext
,
p
);
}
/* look for extension */
for
(
end
=
inpath
;
*
end
;
end
++
)
if
(
*
end
==
'.'
)
break
;
/* Fix pathological case - Win returns ':' as part of the
* directory when no drive letter is given.
*/
if
(
drv
&&
drv
[
0
]
==
':'
)
{
*
drv
=
'\0'
;
if
(
dir
)
if
(
fname
)
{
pathbuff
[
0
]
=
':'
;
pathbuff
[
1
]
=
'\0'
;
strcat
(
pathbuff
,
dir
);
strcpy
(
dir
,
pathbuff
);
}
memcpy
(
fname
,
inpath
,
end
-
inpath
);
fname
[
end
-
inpath
]
=
0
;
}
if
(
ext
)
strcpy
(
ext
,
end
);
}
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