Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
wine
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Package registry
Container Registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Zsolt Vadász
wine
Commits
f90092c4
Commit
f90092c4
authored
21 years ago
by
Jon Griffiths
Committed by
Alexandre Julliard
21 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Use Unicode calls instead of ASCII where applicable.
Documentation updates.
parent
541545b2
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
dlls/msvcrt/dir.c
+238
-40
238 additions, 40 deletions
dlls/msvcrt/dir.c
with
238 additions
and
40 deletions
dlls/msvcrt/dir.c
+
238
−
40
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
)
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment