reactos/lib/sdk/crt/string/splitp.c
Cameron Gutman 29fa274d6d - Create another branch for networking fixes
- TSVN choked repeatedly when attempting to merge ~9000 revs into the branch (tried 3 times on 2 different computers)
 - If someone wants to delete aicom-network-fixes, they are welcome to
 - Lesson learned: Letting a branch get thousands of revs out of date is a horrible idea

svn path=/branches/aicom-network-branch/; revision=44353
2009-12-02 03:23:19 +00:00

69 lines
1.3 KiB
C

#include <precomp.h>
#include <tchar.h>
/*
* @implemented
*/
void _tsplitpath(const _TCHAR* path, _TCHAR* drive, _TCHAR* dir, _TCHAR* fname, _TCHAR* ext)
{
_TCHAR* tmp_drive = NULL;
_TCHAR* tmp_dir = NULL;
_TCHAR* tmp_ext = NULL;
tmp_drive = (_TCHAR*)_tcschr(path,':');
if (drive)
{
if (tmp_drive)
{
_tcsncpy(drive,tmp_drive-1,2);
*(drive+2) = 0;
}
else
{
*drive = 0;
}
}
if (!tmp_drive)
{
tmp_drive = (_TCHAR*)path - 1;
}
tmp_dir = (_TCHAR*)_tcsrchr(path,'\\');
if (dir)
{
if (tmp_dir)
{
_tcsncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
*(dir+(tmp_dir-tmp_drive)) = 0;
}
else
{
*dir =0;
}
}
/* If the dot is before the last dir separator, it's part
* of a directory name, not the start of the extension */
if (!tmp_ext || tmp_ext < tmp_dir)
{
tmp_ext = (_TCHAR*)path+_tcslen(path);
}
if (ext)
{
_tcscpy(ext,tmp_ext);
}
if (fname)
{
if (tmp_dir)
{
_tcsncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
*(fname+(tmp_ext-tmp_dir-1)) = 0;
}
else
{
_tcsncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
*(fname+(tmp_ext-path))=0;
}
}
}