- Fixed _(w)splitpath.

svn path=/trunk/; revision=5451
This commit is contained in:
Hartmut Birr 2003-08-07 09:04:10 +00:00
parent fcd871c119
commit 0d5b332d52
3 changed files with 88 additions and 82 deletions

View file

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

View file

@ -12,40 +12,40 @@ void _wsplitpath(const wchar_t* path, wchar_t* drive, wchar_t* dir, wchar_t* fna
wchar_t* tmp_ext; wchar_t* tmp_ext;
tmp_drive = (wchar_t*)wcschr(path,L':'); tmp_drive = (wchar_t*)wcschr(path,L':');
if ( tmp_drive != (wchar_t*)NULL ) { if (drive) {
wcsncpy(drive,tmp_drive-1,1); if (tmp_drive) {
*(drive+1) = 0; wcsncpy(drive,tmp_drive-1,2);
*(drive+2) = 0;
} else {
*drive = 0;
}
} }
else { if (!tmp_drive) {
*drive = 0; tmp_drive = (wchar_t*)path - 1;
tmp_drive = (wchar_t*)path;
} }
tmp_dir = (wchar_t*)wcsrchr(path,L'\\'); tmp_dir = (wchar_t*)wcsrchr(path,L'\\');
if( tmp_dir != NULL && tmp_dir != tmp_drive + 1 ) { if (dir) {
wcsncpy(dir,tmp_drive+1,tmp_dir - tmp_drive); if (tmp_dir) {
*(dir + (tmp_dir - tmp_drive)) = 0; wcsncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
*(dir+(tmp_dir-tmp_drive)) = 0;
} else
*dir =0;
} }
else
*dir =0;
tmp_ext = (wchar_t*)wcsrchr(path,L'.'); tmp_ext = (wchar_t*)wcsrchr(path,L'.');
if ( tmp_ext != NULL ) { if (!tmp_ext) {
tmp_ext = (wchar_t*)path+wcslen(path);
}
if (ext) {
wcscpy(ext,tmp_ext); wcscpy(ext,tmp_ext);
} }
else
{
*ext = 0;
tmp_ext = (wchar_t*)path+wcslen(path);
}
if ( tmp_dir != NULL ) { if (tmp_dir) {
wcsncpy(fname,tmp_dir+1,tmp_ext - tmp_dir - 1); wcsncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
*(fname + (tmp_ext - tmp_dir -1)) = 0; *(fname+(tmp_ext-tmp_dir-1)) = 0;
} } else {
else wcsncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
{
wcsncpy(fname,path,tmp_ext - path);
*(fname+(tmp_ext-path))=0; *(fname+(tmp_ext-path))=0;
} }
} }

View file

@ -4,44 +4,49 @@
/* /*
* @implemented * @implemented
*/ */
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 ( tmp_drive != (char *)NULL ) { if (drive) {
strncpy(drive,tmp_drive-1,1); if (tmp_drive) {
*(drive+1) = 0; strncpy(drive,tmp_drive-1,2);
} *(drive+2) = 0;
else { } else {
*drive = 0; *drive = 0;
tmp_drive = (char *)path;
} }
}
if (!tmp_drive) {
tmp_drive = (char*)path - 1;
}
tmp_dir = (char *)strrchr(path,'\\'); tmp_dir = (char*)strrchr(path,'\\');
// if( tmp_dir != NULL && tmp_dir != tmp_drive + 1 ) if (dir) {
if( tmp_dir != NULL ) if (tmp_dir) {
{ strncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
strncpy(dir,tmp_drive+1,tmp_dir - tmp_drive); *(dir+(tmp_dir-tmp_drive)) = 0;
*(dir + (tmp_dir - tmp_drive)) = 0; } else {
*dir =0;
} }
else }
*dir =0;
tmp_ext = ( char *)strrchr(path,'.'); tmp_ext = (char*)strrchr(path,'.');
if ( tmp_ext != NULL ) { if (!tmp_ext) {
strcpy(ext,tmp_ext); tmp_ext = (char*)path+strlen(path);
} }
else if (ext) {
*ext = 0; strcpy(ext,tmp_ext);
if ( tmp_dir != NULL ) { }
strncpy(fname,tmp_dir+1,tmp_ext - tmp_dir - 1);
*(fname + (tmp_ext - tmp_dir -1)) = 0;
}
else
strncpy(fname,path,tmp_ext - path);
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;
}
} }