Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
f90092c4
Commit
f90092c4
authored
Feb 09, 2004
by
Jon Griffiths
Committed by
Alexandre Julliard
Feb 09, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use Unicode calls instead of ASCII where applicable.
Documentation updates.
parent
541545b2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
238 additions
and
40 deletions
+238
-40
dir.c
dlls/msvcrt/dir.c
+238
-40
No files found.
dlls/msvcrt/dir.c
View file @
f90092c4
...
...
@@ -128,6 +128,18 @@ static void msvcrt_wfttofdi64( const WIN32_FIND_DATAW *fd, struct _wfinddatai64_
/*********************************************************************
* _chdir (MSVCRT.@)
*
* Change the current working directory.
*
* PARAMS
* newdir [I] Directory to change to
*
* RETURNS
* Success: 0. The current working directory is set to newdir.
* Failure: -1. errno indicates the error.
*
* NOTES
* See SetCurrentDirectoryA.
*/
int
_chdir
(
const
char
*
newdir
)
{
...
...
@@ -141,6 +153,8 @@ int _chdir(const char * newdir)
/*********************************************************************
* _wchdir (MSVCRT.@)
*
* Unicode version of _chdir.
*/
int
_wchdir
(
const
MSVCRT_wchar_t
*
newdir
)
{
...
...
@@ -154,12 +168,25 @@ int _wchdir(const MSVCRT_wchar_t * newdir)
/*********************************************************************
* _chdrive (MSVCRT.@)
*
* Change the current drive.
*
* PARAMS
* newdrive [I] Drive number to change to (1 = 'A', 2 = 'B', ...)
*
* RETURNS
* Success: 0. The current drive is set to newdrive.
* Failure: -1. errno indicates the error.
*
* NOTES
* See SetCurrentDirectoryA.
*/
int
_chdrive
(
int
newdrive
)
{
char
buffer
[
3
]
=
"A:"
;
WCHAR
buffer
[
3
]
=
{
'A'
,
':'
,
0
};
buffer
[
0
]
+=
newdrive
-
1
;
if
(
!
SetCurrentDirectory
A
(
buffer
))
if
(
!
SetCurrentDirectory
W
(
buffer
))
{
MSVCRT__set_errno
(
GetLastError
());
if
(
newdrive
<=
0
)
...
...
@@ -171,6 +198,18 @@ int _chdrive(int newdrive)
/*********************************************************************
* _findclose (MSVCRT.@)
*
* Close a handle returned by _findfirst().
*
* PARAMS
* hand [I] Handle to close
*
* RETURNS
* Success: 0. All resources associated with hand are freed.
* Failure: -1. errno indicates the error.
*
* NOTES
* See FindClose.
*/
int
_findclose
(
long
hand
)
{
...
...
@@ -185,6 +224,20 @@ int _findclose(long hand)
/*********************************************************************
* _findfirst (MSVCRT.@)
*
* Open a handle for iterating through a directory.
*
* PARAMS
* fspec [I] File specification of files to iterate.
* ft [O] Information for the first file found.
*
* RETURNS
* Success: A handle suitable for passing to _findnext() and _findclose().
* ft is populated with the details of the found file.
* Failure: -1. errno indicates the error.
*
* NOTES
* See FindFirstFileA.
*/
long
_findfirst
(
const
char
*
fspec
,
struct
_finddata_t
*
ft
)
{
...
...
@@ -204,6 +257,8 @@ long _findfirst(const char * fspec, struct _finddata_t* ft)
/*********************************************************************
* _wfindfirst (MSVCRT.@)
*
* Unicode version of _findfirst.
*/
long
_wfindfirst
(
const
MSVCRT_wchar_t
*
fspec
,
struct
_wfinddata_t
*
ft
)
{
...
...
@@ -223,6 +278,8 @@ long _wfindfirst(const MSVCRT_wchar_t * fspec, struct _wfinddata_t* ft)
/*********************************************************************
* _findfirsti64 (MSVCRT.@)
*
* 64-bit version of _findfirst.
*/
long
_findfirsti64
(
const
char
*
fspec
,
struct
_finddatai64_t
*
ft
)
{
...
...
@@ -242,6 +299,8 @@ long _findfirsti64(const char * fspec, struct _finddatai64_t* ft)
/*********************************************************************
* _wfindfirsti64 (MSVCRT.@)
*
* Unicode version of _findfirsti64.
*/
long
_wfindfirsti64
(
const
MSVCRT_wchar_t
*
fspec
,
struct
_wfinddatai64_t
*
ft
)
{
...
...
@@ -261,6 +320,19 @@ long _wfindfirsti64(const MSVCRT_wchar_t * fspec, struct _wfinddatai64_t* ft)
/*********************************************************************
* _findnext (MSVCRT.@)
*
* Find the next file from a file search handle.
*
* PARAMS
* hand [I] Handle to the search returned from _findfirst().
* ft [O] Information for the file found.
*
* RETURNS
* Success: 0. ft is populated with the details of the found file.
* Failure: -1. errno indicates the error.
*
* NOTES
* See FindNextFileA.
*/
int
_findnext
(
long
hand
,
struct
_finddata_t
*
ft
)
{
...
...
@@ -278,6 +350,8 @@ int _findnext(long hand, struct _finddata_t * ft)
/*********************************************************************
* _wfindnext (MSVCRT.@)
*
* Unicode version of _findnext.
*/
int
_wfindnext
(
long
hand
,
struct
_wfinddata_t
*
ft
)
{
...
...
@@ -295,6 +369,8 @@ int _wfindnext(long hand, struct _wfinddata_t * ft)
/*********************************************************************
* _findnexti64 (MSVCRT.@)
*
* 64-bit version of _findnext.
*/
int
_findnexti64
(
long
hand
,
struct
_finddatai64_t
*
ft
)
{
...
...
@@ -312,6 +388,8 @@ int _findnexti64(long hand, struct _finddatai64_t * ft)
/*********************************************************************
* _wfindnexti64 (MSVCRT.@)
*
* Unicode version of _findnexti64.
*/
int
_wfindnexti64
(
long
hand
,
struct
_wfinddatai64_t
*
ft
)
{
...
...
@@ -329,6 +407,17 @@ int _wfindnexti64(long hand, struct _wfinddatai64_t * ft)
/*********************************************************************
* _getcwd (MSVCRT.@)
*
* Get the current working directory.
*
* PARAMS
* buf [O] Destination for current working directory.
* size [I] Size of buf in characters
*
* RETURNS
* Success: If buf is NULL, returns an allocated string containing the path.
* Otherwise populates buf with the path and returns it.
* Failure: NULL. errno indicates the error.
*/
char
*
_getcwd
(
char
*
buf
,
int
size
)
{
...
...
@@ -355,6 +444,8 @@ char* _getcwd(char * buf, int size)
/*********************************************************************
* _wgetcwd (MSVCRT.@)
*
* Unicode version of _getcwd.
*/
MSVCRT_wchar_t
*
_wgetcwd
(
MSVCRT_wchar_t
*
buf
,
int
size
)
{
...
...
@@ -381,17 +472,39 @@ MSVCRT_wchar_t* _wgetcwd(MSVCRT_wchar_t * buf, int size)
/*********************************************************************
* _getdrive (MSVCRT.@)
*
* Get the current drive number.
*
* PARAMS
* None.
*
* RETURNS
* Success: The drive letter number from 1 to 26 ("A:" to "Z:").
* Failure: 0.
*/
int
_getdrive
(
void
)
{
char
buffer
[
MAX_PATH
];
if
(
!
GetCurrentDirectoryA
(
sizeof
(
buffer
),
buffer
))
return
0
;
if
(
buffer
[
1
]
!=
':'
)
return
0
;
return
toupper
(
buffer
[
0
])
-
'A'
+
1
;
WCHAR
buffer
[
MAX_PATH
];
if
(
GetCurrentDirectoryW
(
MAX_PATH
,
buffer
)
&&
buffer
[
0
]
>=
'A'
&&
buffer
[
0
]
<=
'z'
&&
buffer
[
1
]
==
':'
)
return
toupperW
(
buffer
[
0
])
-
'A'
+
1
;
return
0
;
}
/*********************************************************************
* _getdcwd (MSVCRT.@)
*
* Get the current working directory on a given disk.
*
* PARAMS
* drive [I] Drive letter to get the current working directory from.
* buf [O] Destination for the current working directory.
* size [I] Length of drive in characters.
*
* RETURNS
* Success: If drive is NULL, returns an allocated string containing the path.
* Otherwise populates drive with the path and returns it.
* Failure: NULL. errno indicates the error.
*/
char
*
_getdcwd
(
int
drive
,
char
*
buf
,
int
size
)
{
...
...
@@ -432,6 +545,8 @@ char* _getdcwd(int drive, char * buf, int size)
/*********************************************************************
* _wgetdcwd (MSVCRT.@)
*
* Unicode version of _wgetdcwd.
*/
MSVCRT_wchar_t
*
_wgetdcwd
(
int
drive
,
MSVCRT_wchar_t
*
buf
,
int
size
)
{
...
...
@@ -471,10 +586,23 @@ MSVCRT_wchar_t* _wgetdcwd(int drive, MSVCRT_wchar_t * buf, int size)
/*********************************************************************
* _getdiskfree (MSVCRT.@)
*
* Get information about the free space on a drive.
*
* PARAMS
* disk [I] Drive number to get information about (1 = 'A', 2 = 'B', ...)
* info [O] Destination for the resulting information.
*
* RETURNS
* Success: 0. info is updated with the free space information.
* Failure: An error code from GetLastError().
*
* NOTES
* See GetLastError().
*/
unsigned
int
_getdiskfree
(
unsigned
int
disk
,
struct
_diskfree_t
*
d
)
{
char
drivespec
[
4
]
=
{
'@'
,
':'
,
'\\'
,
0
};
WCHAR
drivespec
[
4
]
=
{
'@'
,
':'
,
'\\'
,
0
};
DWORD
ret
[
4
];
unsigned
int
err
;
...
...
@@ -483,7 +611,7 @@ unsigned int _getdiskfree(unsigned int disk, struct _diskfree_t* d)
drivespec
[
0
]
+=
disk
;
/* make a drive letter */
if
(
GetDiskFreeSpace
A
(
disk
==
0
?
NULL
:
drivespec
,
ret
,
ret
+
1
,
ret
+
2
,
ret
+
3
))
if
(
GetDiskFreeSpace
W
(
disk
==
0
?
NULL
:
drivespec
,
ret
,
ret
+
1
,
ret
+
2
,
ret
+
3
))
{
d
->
sectors_per_cluster
=
(
unsigned
)
ret
[
0
];
d
->
bytes_per_sector
=
(
unsigned
)
ret
[
1
];
...
...
@@ -498,6 +626,18 @@ unsigned int _getdiskfree(unsigned int disk, struct _diskfree_t* d)
/*********************************************************************
* _mkdir (MSVCRT.@)
*
* Create a directory.
*
* PARAMS
* newdir [I] Name of directory to create.
*
* RETURNS
* Success: 0. The directory indicated by newdir is created.
* Failure: -1. errno indicates the error.
*
* NOTES
* See CreateDirectoryA.
*/
int
_mkdir
(
const
char
*
newdir
)
{
...
...
@@ -509,6 +649,8 @@ int _mkdir(const char * newdir)
/*********************************************************************
* _wmkdir (MSVCRT.@)
*
* Unicode version of _mkdir.
*/
int
_wmkdir
(
const
MSVCRT_wchar_t
*
newdir
)
{
...
...
@@ -520,6 +662,18 @@ int _wmkdir(const MSVCRT_wchar_t* newdir)
/*********************************************************************
* _rmdir (MSVCRT.@)
*
* Delete a directory.
*
* PARAMS
* dir [I] Name of directory to delete.
*
* RETURNS
* Success: 0. The directory indicated by newdir is deleted.
* Failure: -1. errno indicates the error.
*
* NOTES
* See RemoveDirectoryA.
*/
int
_rmdir
(
const
char
*
dir
)
{
...
...
@@ -531,6 +685,8 @@ int _rmdir(const char * dir)
/*********************************************************************
* _wrmdir (MSVCRT.@)
*
* Unicode version of _rmdir.
*/
int
_wrmdir
(
const
MSVCRT_wchar_t
*
dir
)
{
...
...
@@ -542,6 +698,8 @@ int _wrmdir(const MSVCRT_wchar_t * dir)
/*********************************************************************
* _wsplitpath (MSVCRT.@)
*
* Unicode version of _splitpath.
*/
void
_wsplitpath
(
const
MSVCRT_wchar_t
*
inpath
,
MSVCRT_wchar_t
*
drv
,
MSVCRT_wchar_t
*
dir
,
MSVCRT_wchar_t
*
fname
,
MSVCRT_wchar_t
*
ext
)
...
...
@@ -625,7 +783,7 @@ static void wmsvcrt_fln_fix(MSVCRT_wchar_t *path)
{
/* Ignore leading ".." */
for
(
p
=
(
r
+=
2
);
*
p
&&
(
*
p
!=
'\\'
);
++
p
)
;
;
}
else
{
...
...
@@ -653,20 +811,20 @@ static void wmsvcrt_fln_fix(MSVCRT_wchar_t *path)
q
=
p
-
1
;
while
(
q
>
r
)
/* Backup one level */
{
if
(
*
q
==
'\\'
)
break
;
--
q
;
if
(
*
q
==
'\\'
)
break
;
--
q
;
}
if
(
q
>
r
)
{
strcpyW
(
q
,
p
+
3
);
s
=
q
;
strcpyW
(
q
,
p
+
3
);
s
=
q
;
}
else
if
(
'.'
!=
*
q
)
{
strcpyW
(
q
+
((
*
q
==
'\\'
)
?
1
:
0
),
p
+
3
+
((
*
(
p
+
3
))
?
1
:
0
));
s
=
q
;
strcpyW
(
q
+
((
*
q
==
'\\'
)
?
1
:
0
),
p
+
3
+
((
*
(
p
+
3
))
?
1
:
0
));
s
=
q
;
}
else
s
=
++
p
;
}
...
...
@@ -675,7 +833,7 @@ static void wmsvcrt_fln_fix(MSVCRT_wchar_t *path)
/* Execute this section if "." found */
q
=
p
+
2
;
for
(
;
*
q
&&
(
*
q
!=
'\\'
);
++
q
)
;
;
strcpyW
(
p
,
q
);
}
}
...
...
@@ -691,13 +849,15 @@ static void wmsvcrt_fln_fix(MSVCRT_wchar_t *path)
if
(
dir_flag
)
{
MSVCRT_wchar_t
szbs
[]
=
{
'\\'
,
0
};
strcatW
(
path
,
szbs
);
}
}
/*********************************************************************
* _wfullpath (MSVCRT.@)
*
* Unicode version of _fullpath.
*/
MSVCRT_wchar_t
*
_wfullpath
(
MSVCRT_wchar_t
*
absPath
,
const
MSVCRT_wchar_t
*
relPath
,
MSVCRT_size_t
size
)
{
...
...
@@ -789,12 +949,12 @@ static void msvcrt_fln_fix(char *path)
{
/* Ignore leading ".." */
for
(
p
=
(
r
+=
2
);
*
p
&&
(
*
p
!=
'\\'
);
++
p
)
;
;
}
else
{
for
(
p
=
r
+
1
;
*
p
&&
(
*
p
!=
'\\'
);
++
p
)
;
;
}
strcpy
(
r
,
p
+
((
*
p
)
?
1
:
0
));
}
...
...
@@ -817,20 +977,20 @@ static void msvcrt_fln_fix(char *path)
q
=
p
-
1
;
while
(
q
>
r
)
/* Backup one level */
{
if
(
*
q
==
'\\'
)
break
;
--
q
;
if
(
*
q
==
'\\'
)
break
;
--
q
;
}
if
(
q
>
r
)
{
strcpy
(
q
,
p
+
3
);
s
=
q
;
strcpy
(
q
,
p
+
3
);
s
=
q
;
}
else
if
(
'.'
!=
*
q
)
{
strcpy
(
q
+
((
*
q
==
'\\'
)
?
1
:
0
),
p
+
3
+
((
*
(
p
+
3
))
?
1
:
0
));
s
=
q
;
strcpy
(
q
+
((
*
q
==
'\\'
)
?
1
:
0
),
p
+
3
+
((
*
(
p
+
3
))
?
1
:
0
));
s
=
q
;
}
else
s
=
++
p
;
}
...
...
@@ -839,7 +999,7 @@ static void msvcrt_fln_fix(char *path)
/* Execute this section if "." found */
q
=
p
+
2
;
for
(
;
*
q
&&
(
*
q
!=
'\\'
);
++
q
)
;
;
strcpy
(
p
,
q
);
}
}
...
...
@@ -858,6 +1018,18 @@ static void msvcrt_fln_fix(char *path)
/*********************************************************************
* _fullpath (MSVCRT.@)
*
* Create an absolute path from a relative path.
*
* PARAMS
* absPath [O] Destination for absolute path
* relPath [I] Relative path to convert to absolute
* size [I] Length of absPath in characters.
*
* RETURNS
* Success: If absPath is NULL, returns an allocated string containing the path.
* Otherwise populates absPath with the path and returns it.
* Failure: NULL. errno indicates the error.
*/
char
*
_fullpath
(
char
*
absPath
,
const
char
*
relPath
,
unsigned
int
size
)
{
...
...
@@ -914,10 +1086,23 @@ char *_fullpath(char * absPath, const char* relPath, unsigned int size)
/*********************************************************************
* _makepath (MSVCRT.@)
*
* Create a pathname.
*
* PARAMS
* path [O] Destination for created pathname
* drive [I] Drive letter (e.g. "A:")
* directory [I] Directory
* filename [I] Name of the file, excluding extension
* extension [I] File extension (e.g. ".TXT")
*
* RETURNS
* Nothing. If path is not large enough to hold the resulting pathname,
* random process memory will be overwritten.
*/
VOID
_makepath
(
char
*
path
,
const
char
*
drive
,
const
char
*
directory
,
const
char
*
filename
,
const
char
*
extension
)
const
char
*
directory
,
const
char
*
filename
,
const
char
*
extension
)
{
char
ch
;
char
tmpPath
[
MAX_PATH
];
...
...
@@ -959,13 +1144,15 @@ VOID _makepath(char * path, const char * drive,
/*********************************************************************
* _wmakepath (MSVCRT.@)
*
* Unicode version of _wmakepath.
*/
VOID
_wmakepath
(
MSVCRT_wchar_t
*
path
,
const
MSVCRT_wchar_t
*
drive
,
const
MSVCRT_wchar_t
*
directory
,
const
MSVCRT_wchar_t
*
filename
,
const
MSVCRT_wchar_t
*
extension
)
const
MSVCRT_wchar_t
*
filename
,
const
MSVCRT_wchar_t
*
extension
)
{
MSVCRT_wchar_t
ch
;
TRACE
(
"%s %s %s %s
\n
"
,
debugstr_w
(
drive
),
debugstr_w
(
directory
),
debugstr_w
(
filename
),
debugstr_w
(
extension
));
debugstr_w
(
filename
),
debugstr_w
(
extension
));
if
(
!
path
)
return
;
...
...
@@ -982,10 +1169,10 @@ VOID _wmakepath(MSVCRT_wchar_t *path, const MSVCRT_wchar_t *drive, const MSVCRT_
strcatW
(
path
,
directory
);
ch
=
path
[
strlenW
(
path
)
-
1
];
if
(
ch
!=
'/'
&&
ch
!=
'\\'
)
{
static
const
MSVCRT_wchar_t
backslashW
[]
=
{
'\\'
,
0
};
{
static
const
MSVCRT_wchar_t
backslashW
[]
=
{
'\\'
,
0
};
strcatW
(
path
,
backslashW
);
}
}
}
if
(
filename
&&
filename
[
0
])
{
...
...
@@ -993,10 +1180,10 @@ VOID _wmakepath(MSVCRT_wchar_t *path, const MSVCRT_wchar_t *drive, const MSVCRT_
if
(
extension
&&
extension
[
0
])
{
if
(
extension
[
0
]
!=
'.'
)
{
static
const
MSVCRT_wchar_t
dotW
[]
=
{
'.'
,
0
};
{
static
const
MSVCRT_wchar_t
dotW
[]
=
{
'.'
,
0
};
strcatW
(
path
,
dotW
);
}
}
strcatW
(
path
,
extension
);
}
}
...
...
@@ -1006,6 +1193,17 @@ VOID _wmakepath(MSVCRT_wchar_t *path, const MSVCRT_wchar_t *drive, const MSVCRT_
/*********************************************************************
* _searchenv (MSVCRT.@)
*
* Search for a file in a list of paths from an envronment variable.
*
* PARAMS
* file [I] Name of the file to search for.
* env [I] Name of the environment variable containing a list of paths.
* buf [O] Destination for the found file path.
*
* RETURNS
* Nothing. If the file is not found, buf will contain an empty string
* and errno is set.
*/
void
_searchenv
(
const
char
*
file
,
const
char
*
env
,
char
*
buf
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment