ReactOS  0.4.13-dev-73-gcfe54aa
splitpath.c
Go to the documentation of this file.
1 /*
2  * Copyright 2000, 2004 Martin Fuchs
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 #include "winefile.h"
20 
21 
22 void _wsplitpath(const WCHAR* path, WCHAR* drv, WCHAR* dir, WCHAR* name, WCHAR* ext)
23 {
24  const WCHAR* end; /* end of processed string */
25  const WCHAR* p; /* search pointer */
26  const WCHAR* s; /* copy pointer */
27 
28  /* extract drive name */
29  if (path[0] && path[1]==':') {
30  if (drv) {
31  *drv++ = *path++;
32  *drv++ = *path++;
33  *drv = '\0';
34  }
35  } else if (drv)
36  *drv = '\0';
37 
38  /* Don't parse colons as stream separators when splitting paths */
39  end = path + lstrlenW(path);
40 
41  /* search for begin of file extension */
42  for(p=end; p>path && *--p!='\\' && *p!='/'; )
43  if (*p == '.') {
44  end = p;
45  break;
46  }
47 
48  if (ext)
49  for(s=end; (*ext=*s++); )
50  ext++;
51 
52  /* search for end of directory name */
53  for(p=end; p>path; )
54  if (*--p=='\\' || *p=='/') {
55  p++;
56  break;
57  }
58 
59  if (name) {
60  for(s=p; s<end; )
61  *name++ = *s++;
62 
63  *name = '\0';
64  }
65 
66  if (dir) {
67  for(s=path; s<p; )
68  *dir++ = *s++;
69 
70  *dir = '\0';
71  }
72 }
73 
74 
75 /*
76 void main() // test splipath()
77 {
78  WCHAR drv[_MAX_DRIVE+1], dir[_MAX_DIR], name[_MAX_FNAME], ext[_MAX_EXT];
79 
80  _wsplitpath(L"x\\y", drv, dir, name, ext);
81  _wsplitpath(L"x\\", drv, dir, name, ext);
82  _wsplitpath(L"\\x", drv, dir, name, ext);
83  _wsplitpath(L"x", drv, dir, name, ext);
84  _wsplitpath(L"", drv, dir, name, ext);
85  _wsplitpath(L".x", drv, dir, name, ext);
86  _wsplitpath(L":x", drv, dir, name, ext);
87  _wsplitpath(L"a:x", drv, dir, name, ext);
88  _wsplitpath(L"a.b:x", drv, dir, name, ext);
89  _wsplitpath(L"W:\\/\\abc/Z:~", drv, dir, name, ext);
90  _wsplitpath(L"abc.EFGH:12345", drv, dir, name, ext);
91  _wsplitpath(L"C:/dos/command.com", drv, dir, name, ext);
92 }
93 */
void _wsplitpath(const WCHAR *path, WCHAR *drv, WCHAR *dir, WCHAR *name, WCHAR *ext)
Definition: splitpath.c:22
GLsizei const GLchar ** path
Definition: glext.h:7234
GLuint GLuint end
Definition: gl.h:1545
#define lstrlenW
Definition: compat.h:407
char ext[3]
Definition: mkdosfs.c:358
unsigned int dir
Definition: maze.c:112
__wchar_t WCHAR
Definition: xmlstorage.h:180
GLdouble s
Definition: gl.h:2039
Definition: services.c:325
Definition: name.c:36
GLfloat GLfloat p
Definition: glext.h:8902