Handle NULL fname

svn path=/trunk/; revision=6909
This commit is contained in:
Gé van Geldorp 2003-12-08 10:25:26 +00:00
parent 89d0892531
commit 813825fd27
2 changed files with 98 additions and 63 deletions

View file

@ -7,46 +7,63 @@
*/ */
void _splitpath(const char* path, char* drive, char* dir, char* fname, char* ext) void _splitpath(const char* path, char* drive, char* dir, char* fname, char* ext)
{ {
char* tmp_drive; char* tmp_drive;
char* tmp_dir; char* tmp_dir;
char* tmp_ext; char* tmp_ext;
tmp_drive = (char*)strchr(path,':'); tmp_drive = (char*)strchr(path,':');
if (drive) { if (drive)
if (tmp_drive) { {
strncpy(drive,tmp_drive-1,2); if (tmp_drive)
*(drive+2) = 0; {
} else { strncpy(drive,tmp_drive-1,2);
*drive = 0; *(drive+2) = 0;
} }
else
{
*drive = 0;
}
} }
if (!tmp_drive) { if (!tmp_drive)
tmp_drive = (char*)path - 1; {
tmp_drive = (char*)path - 1;
} }
tmp_dir = (char*)strrchr(path,'\\'); tmp_dir = (char*)strrchr(path,'\\');
if (dir) { if (dir)
if (tmp_dir) { {
strncpy(dir,tmp_drive+1,tmp_dir-tmp_drive); if (tmp_dir)
*(dir+(tmp_dir-tmp_drive)) = 0; {
} else { strncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
*dir =0; *(dir+(tmp_dir-tmp_drive)) = 0;
} }
else
{
*dir =0;
}
} }
tmp_ext = (char*)strrchr(path,'.'); tmp_ext = (char*)strrchr(path,'.');
if (!tmp_ext) { if (!tmp_ext)
tmp_ext = (char*)path+strlen(path); {
tmp_ext = (char*)path+strlen(path);
} }
if (ext) { if (ext)
strcpy(ext,tmp_ext); {
strcpy(ext,tmp_ext);
} }
if (tmp_dir) { if (fname)
strncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1); {
*(fname+(tmp_ext-tmp_dir-1)) = 0; if (tmp_dir)
} else { {
strncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1); strncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
*(fname+(tmp_ext-path))=0; *(fname+(tmp_ext-tmp_dir-1)) = 0;
}
else
{
strncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
*(fname+(tmp_ext-path))=0;
}
} }
} }

View file

@ -7,45 +7,63 @@
*/ */
void _wsplitpath(const wchar_t* path, wchar_t* drive, wchar_t* dir, wchar_t* fname, wchar_t* ext) 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_drive;
wchar_t* tmp_dir; wchar_t* tmp_dir;
wchar_t* tmp_ext; wchar_t* tmp_ext;
tmp_drive = (wchar_t*)wcschr(path,L':'); tmp_drive = (wchar_t*)wcschr(path,L':');
if (drive) { if (drive)
if (tmp_drive) { {
wcsncpy(drive,tmp_drive-1,2); if (tmp_drive)
*(drive+2) = 0; {
} else { wcsncpy(drive,tmp_drive-1,2);
*drive = 0; *(drive+2) = 0;
} }
else
{
*drive = 0;
}
} }
if (!tmp_drive) { if (!tmp_drive)
tmp_drive = (wchar_t*)path - 1; {
tmp_drive = (wchar_t*)path - 1;
} }
tmp_dir = (wchar_t*)wcsrchr(path,L'\\'); tmp_dir = (wchar_t*)wcsrchr(path,L'\\');
if (dir) { if (dir)
if (tmp_dir) { {
wcsncpy(dir,tmp_drive+1,tmp_dir-tmp_drive); if (tmp_dir)
*(dir+(tmp_dir-tmp_drive)) = 0; {
} else wcsncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
*dir =0; *(dir+(tmp_dir-tmp_drive)) = 0;
}
else
{
*dir =0;
}
} }
tmp_ext = (wchar_t*)wcsrchr(path,L'.'); tmp_ext = (wchar_t*)wcsrchr(path,L'.');
if (!tmp_ext) { if (! tmp_ext)
tmp_ext = (wchar_t*)path+wcslen(path); {
tmp_ext = (wchar_t*)path+wcslen(path);
} }
if (ext) { if (ext)
wcscpy(ext,tmp_ext); {
wcscpy(ext,tmp_ext);
} }
if (tmp_dir) { if (fname)
wcsncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1); {
*(fname+(tmp_ext-tmp_dir-1)) = 0; if (tmp_dir)
} else { {
wcsncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1); wcsncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
*(fname+(tmp_ext-path))=0; *(fname+(tmp_ext-tmp_dir-1)) = 0;
}
else
{
wcsncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
*(fname+(tmp_ext-path))=0;
}
} }
} }