mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
Handle NULL fname
svn path=/trunk/; revision=6909
This commit is contained in:
parent
89d0892531
commit
813825fd27
2 changed files with 98 additions and 63 deletions
|
@ -7,46 +7,63 @@
|
|||
*/
|
||||
void _splitpath(const char* path, char* drive, char* dir, char* fname, char* ext)
|
||||
{
|
||||
char* tmp_drive;
|
||||
char* tmp_dir;
|
||||
char* tmp_ext;
|
||||
char* tmp_drive;
|
||||
char* tmp_dir;
|
||||
char* tmp_ext;
|
||||
|
||||
tmp_drive = (char*)strchr(path,':');
|
||||
if (drive) {
|
||||
if (tmp_drive) {
|
||||
strncpy(drive,tmp_drive-1,2);
|
||||
*(drive+2) = 0;
|
||||
} else {
|
||||
*drive = 0;
|
||||
}
|
||||
tmp_drive = (char*)strchr(path,':');
|
||||
if (drive)
|
||||
{
|
||||
if (tmp_drive)
|
||||
{
|
||||
strncpy(drive,tmp_drive-1,2);
|
||||
*(drive+2) = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*drive = 0;
|
||||
}
|
||||
}
|
||||
if (!tmp_drive) {
|
||||
tmp_drive = (char*)path - 1;
|
||||
if (!tmp_drive)
|
||||
{
|
||||
tmp_drive = (char*)path - 1;
|
||||
}
|
||||
|
||||
tmp_dir = (char*)strrchr(path,'\\');
|
||||
if (dir) {
|
||||
if (tmp_dir) {
|
||||
strncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
|
||||
*(dir+(tmp_dir-tmp_drive)) = 0;
|
||||
} else {
|
||||
*dir =0;
|
||||
}
|
||||
tmp_dir = (char*)strrchr(path,'\\');
|
||||
if (dir)
|
||||
{
|
||||
if (tmp_dir)
|
||||
{
|
||||
strncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
|
||||
*(dir+(tmp_dir-tmp_drive)) = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*dir =0;
|
||||
}
|
||||
}
|
||||
|
||||
tmp_ext = (char*)strrchr(path,'.');
|
||||
if (!tmp_ext) {
|
||||
tmp_ext = (char*)path+strlen(path);
|
||||
tmp_ext = (char*)strrchr(path,'.');
|
||||
if (!tmp_ext)
|
||||
{
|
||||
tmp_ext = (char*)path+strlen(path);
|
||||
}
|
||||
if (ext) {
|
||||
strcpy(ext,tmp_ext);
|
||||
if (ext)
|
||||
{
|
||||
strcpy(ext,tmp_ext);
|
||||
}
|
||||
|
||||
if (tmp_dir) {
|
||||
strncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
|
||||
*(fname+(tmp_ext-tmp_dir-1)) = 0;
|
||||
} else {
|
||||
strncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
|
||||
*(fname+(tmp_ext-path))=0;
|
||||
if (fname)
|
||||
{
|
||||
if (tmp_dir)
|
||||
{
|
||||
strncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
|
||||
*(fname+(tmp_ext-tmp_dir-1)) = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
strncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
|
||||
*(fname+(tmp_ext-path))=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,45 +7,63 @@
|
|||
*/
|
||||
void _wsplitpath(const wchar_t* path, wchar_t* drive, wchar_t* dir, wchar_t* fname, wchar_t* ext)
|
||||
{
|
||||
wchar_t* tmp_drive;
|
||||
wchar_t* tmp_dir;
|
||||
wchar_t* tmp_ext;
|
||||
wchar_t* tmp_drive;
|
||||
wchar_t* tmp_dir;
|
||||
wchar_t* tmp_ext;
|
||||
|
||||
tmp_drive = (wchar_t*)wcschr(path,L':');
|
||||
if (drive) {
|
||||
if (tmp_drive) {
|
||||
wcsncpy(drive,tmp_drive-1,2);
|
||||
*(drive+2) = 0;
|
||||
} else {
|
||||
*drive = 0;
|
||||
}
|
||||
tmp_drive = (wchar_t*)wcschr(path,L':');
|
||||
if (drive)
|
||||
{
|
||||
if (tmp_drive)
|
||||
{
|
||||
wcsncpy(drive,tmp_drive-1,2);
|
||||
*(drive+2) = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*drive = 0;
|
||||
}
|
||||
}
|
||||
if (!tmp_drive) {
|
||||
tmp_drive = (wchar_t*)path - 1;
|
||||
if (!tmp_drive)
|
||||
{
|
||||
tmp_drive = (wchar_t*)path - 1;
|
||||
}
|
||||
|
||||
tmp_dir = (wchar_t*)wcsrchr(path,L'\\');
|
||||
if (dir) {
|
||||
if (tmp_dir) {
|
||||
wcsncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
|
||||
*(dir+(tmp_dir-tmp_drive)) = 0;
|
||||
} else
|
||||
*dir =0;
|
||||
tmp_dir = (wchar_t*)wcsrchr(path,L'\\');
|
||||
if (dir)
|
||||
{
|
||||
if (tmp_dir)
|
||||
{
|
||||
wcsncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
|
||||
*(dir+(tmp_dir-tmp_drive)) = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*dir =0;
|
||||
}
|
||||
}
|
||||
|
||||
tmp_ext = (wchar_t*)wcsrchr(path,L'.');
|
||||
if (!tmp_ext) {
|
||||
tmp_ext = (wchar_t*)path+wcslen(path);
|
||||
tmp_ext = (wchar_t*)wcsrchr(path,L'.');
|
||||
if (! tmp_ext)
|
||||
{
|
||||
tmp_ext = (wchar_t*)path+wcslen(path);
|
||||
}
|
||||
if (ext) {
|
||||
wcscpy(ext,tmp_ext);
|
||||
if (ext)
|
||||
{
|
||||
wcscpy(ext,tmp_ext);
|
||||
}
|
||||
|
||||
if (tmp_dir) {
|
||||
wcsncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
|
||||
*(fname+(tmp_ext-tmp_dir-1)) = 0;
|
||||
} else {
|
||||
wcsncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
|
||||
*(fname+(tmp_ext-path))=0;
|
||||
if (fname)
|
||||
{
|
||||
if (tmp_dir)
|
||||
{
|
||||
wcsncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
|
||||
*(fname+(tmp_ext-tmp_dir-1)) = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
wcsncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
|
||||
*(fname+(tmp_ext-path))=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue