Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
aaefbdee
Commit
aaefbdee
authored
Aug 08, 2013
by
Ben Straub
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Discriminate path-specific and general UTF-X conversions
parent
2c0128ee
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
48 additions
and
37 deletions
+48
-37
src/fileops.c
+1
-1
src/path.c
+1
-1
src/transports/winhttp.c
+3
-3
src/win32/dir.c
+3
-3
src/win32/findfile.c
+2
-2
src/win32/posix.h
+1
-1
src/win32/posix_w32.c
+13
-13
src/win32/utf-conv.c
+4
-4
src/win32/utf-conv.h
+14
-3
tests-clar/clar_libgit2.c
+6
-6
No files found.
src/fileops.c
View file @
aaefbdee
...
...
@@ -60,7 +60,7 @@ int git_futils_creat_locked(const char *path, const mode_t mode)
#ifdef GIT_WIN32
git_win32_path_utf16
buf
;
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
fd
=
_wopen
(
buf
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
|
O_EXCL
|
O_BINARY
|
O_CLOEXEC
,
mode
);
#else
...
...
src/path.c
View file @
aaefbdee
...
...
@@ -493,7 +493,7 @@ bool git_path_is_empty_dir(const char *path)
if
(
!
git_path_isdir
(
path
))
return
false
;
git_buf_printf
(
&
pathbuf
,
"%s
\\
*"
,
path
);
git__utf8_to_16
(
wbuf
,
git_buf_cstr
(
&
pathbuf
));
git__
win32_path_
utf8_to_16
(
wbuf
,
git_buf_cstr
(
&
pathbuf
));
hFind
=
FindFirstFileW
(
wbuf
,
&
ffd
);
if
(
INVALID_HANDLE_VALUE
==
hFind
)
{
...
...
src/transports/winhttp.c
View file @
aaefbdee
...
...
@@ -264,7 +264,7 @@ static int winhttp_stream_connect(winhttp_stream *s)
if
(
git_buf_printf
(
&
buf
,
"Content-Type: application/x-git-%s-request"
,
s
->
service
)
<
0
)
goto
on_error
;
git__utf8_to_16
(
ct
,
git_buf_cstr
(
&
buf
));
git__utf8_to_16
(
ct
,
MAX_CONTENT_TYPE_LEN
,
git_buf_cstr
(
&
buf
));
if
(
!
WinHttpAddRequestHeaders
(
s
->
request
,
ct
,
(
ULONG
)
-
1L
,
WINHTTP_ADDREQ_FLAG_ADD
))
{
giterr_set
(
GITERR_OS
,
"Failed to add a header to the request"
);
...
...
@@ -593,7 +593,7 @@ replay:
else
snprintf
(
expected_content_type_8
,
MAX_CONTENT_TYPE_LEN
,
"application/x-git-%s-advertisement"
,
s
->
service
);
git__utf8_to_16
(
expected_content_type
,
expected_content_type_8
);
git__utf8_to_16
(
expected_content_type
,
MAX_CONTENT_TYPE_LEN
,
expected_content_type_8
);
content_type_length
=
sizeof
(
content_type
);
if
(
!
WinHttpQueryHeaders
(
s
->
request
,
...
...
@@ -920,7 +920,7 @@ static int winhttp_connect(
return
-
1
;
/* Prepare host */
git__utf8_to_16
(
host
,
t
->
host
);
git__
win32_path_
utf8_to_16
(
host
,
t
->
host
);
/* Establish session */
t
->
session
=
WinHttpOpen
(
...
...
src/win32/dir.c
View file @
aaefbdee
...
...
@@ -40,7 +40,7 @@ git__DIR *git__opendir(const char *dir)
if
(
!
new
->
dir
)
goto
fail
;
git__utf8_to_16
(
filter_w
,
filter
);
git__
win32_path_
utf8_to_16
(
filter_w
,
filter
);
new
->
h
=
FindFirstFileW
(
filter_w
,
&
new
->
f
);
if
(
new
->
h
==
INVALID_HANDLE_VALUE
)
{
...
...
@@ -80,7 +80,7 @@ int git__readdir_ext(
if
(
wcslen
(
d
->
f
.
cFileName
)
>=
sizeof
(
entry
->
d_name
))
return
-
1
;
git__utf16_to_8
(
entry
->
d_name
,
d
->
f
.
cFileName
);
git__
win32_path_
utf16_to_8
(
entry
->
d_name
,
d
->
f
.
cFileName
);
entry
->
d_ino
=
0
;
*
result
=
entry
;
...
...
@@ -116,7 +116,7 @@ void git__rewinddir(git__DIR *d)
if
(
!
init_filter
(
filter
,
sizeof
(
filter
),
d
->
dir
))
return
;
git__utf8_to_16
(
filter_w
,
filter
);
git__
win32_path_
utf8_to_16
(
filter_w
,
filter
);
d
->
h
=
FindFirstFileW
(
filter_w
,
&
d
->
f
);
if
(
d
->
h
==
INVALID_HANDLE_VALUE
)
...
...
src/win32/findfile.c
View file @
aaefbdee
...
...
@@ -27,7 +27,7 @@ static int win32_path_utf16_to_8(git_buf *path_utf8, const wchar_t *path_utf16)
{
char
temp_utf8
[
GIT_PATH_MAX
];
git__utf16_to_8
(
temp_utf8
,
path_utf16
);
git__utf16_to_8
(
temp_utf8
,
GIT_PATH_MAX
,
path_utf16
);
git_path_mkposix
(
temp_utf8
);
return
git_buf_sets
(
path_utf8
,
temp_utf8
);
...
...
@@ -53,7 +53,7 @@ int git_win32__find_file(
if
(
*
filename
==
'/'
||
*
filename
==
'\\'
)
filename
++
;
git__utf8_to_16
(
file_utf16
+
root
->
len
-
1
,
filename
);
git__utf8_to_16
(
file_utf16
+
root
->
len
-
1
,
alloc_len
-
root
->
len
,
filename
);
/* check access */
if
(
_waccess
(
file_utf16
,
F_OK
)
<
0
)
{
...
...
src/win32/posix.h
View file @
aaefbdee
...
...
@@ -22,7 +22,7 @@ GIT_INLINE(int) p_mkdir(const char *path, mode_t mode)
{
git_win32_path_utf16
buf
;
GIT_UNUSED
(
mode
);
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
return
_wmkdir
(
buf
);
}
...
...
src/win32/posix_w32.c
View file @
aaefbdee
...
...
@@ -17,7 +17,7 @@
int
p_unlink
(
const
char
*
path
)
{
git_win32_path_utf16
buf
;
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
_wchmod
(
buf
,
0666
);
return
_wunlink
(
buf
);
}
...
...
@@ -63,7 +63,7 @@ static int do_lstat(
wchar_t
lastch
;
int
flen
;
flen
=
git__utf8_to_16
(
fbuf
,
file_name
);
flen
=
git__
win32_path_
utf8_to_16
(
fbuf
,
file_name
);
/* truncate trailing slashes */
for
(;
flen
>
0
;
--
flen
)
{
...
...
@@ -189,7 +189,7 @@ int p_readlink(const char *link, char *target, size_t target_len)
}
}
git__utf8_to_16
(
link_w
,
link
);
git__
win32_path_
utf8_to_16
(
link_w
,
link
);
hFile
=
CreateFileW
(
link_w
,
// file to open
GENERIC_READ
,
// open for reading
...
...
@@ -258,7 +258,7 @@ int p_open(const char *path, int flags, ...)
git_win32_path_utf16
buf
;
mode_t
mode
=
0
;
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
if
(
flags
&
O_CREAT
)
{
va_list
arg_list
;
...
...
@@ -274,7 +274,7 @@ int p_open(const char *path, int flags, ...)
int
p_creat
(
const
char
*
path
,
mode_t
mode
)
{
git_win32_path_utf16
buf
;
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
return
_wopen
(
buf
,
_O_WRONLY
|
_O_CREAT
|
_O_TRUNC
|
_O_BINARY
,
mode
);
}
...
...
@@ -317,14 +317,14 @@ int p_stat(const char* path, struct stat* buf)
int
p_chdir
(
const
char
*
path
)
{
git_win32_path_utf16
buf
;
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
return
_wchdir
(
buf
);
}
int
p_chmod
(
const
char
*
path
,
mode_t
mode
)
{
git_win32_path_utf16
buf
;
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
return
_wchmod
(
buf
,
mode
);
}
...
...
@@ -332,7 +332,7 @@ int p_rmdir(const char* path)
{
int
error
;
git_win32_path_utf16
buf
;
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
error
=
_wrmdir
(
buf
);
...
...
@@ -349,7 +349,7 @@ int p_rmdir(const char* path)
int
p_hide_directory__w32
(
const
char
*
path
)
{
git_win32_path_utf16
buf
;
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
return
(
SetFileAttributesW
(
buf
,
FILE_ATTRIBUTE_HIDDEN
)
!=
0
)
?
0
:
-
1
;
}
...
...
@@ -359,7 +359,7 @@ char *p_realpath(const char *orig_path, char *buffer)
git_win32_path_utf16
orig_path_w
;
git_win32_path_utf16
buffer_w
;
git__utf8_to_16
(
orig_path_w
,
orig_path
);
git__
win32_path_
utf8_to_16
(
orig_path_w
,
orig_path
);
/* Implicitly use GetCurrentDirectory which can be a threading issue */
ret
=
GetFullPathNameW
(
orig_path_w
,
GIT_WIN_PATH_UTF16
,
buffer_w
,
NULL
);
...
...
@@ -450,7 +450,7 @@ int p_setenv(const char* name, const char* value, int overwrite)
int
p_access
(
const
char
*
path
,
mode_t
mode
)
{
git_win32_path_utf16
buf
;
git__utf8_to_16
(
buf
,
path
);
git__
win32_path_
utf8_to_16
(
buf
,
path
);
return
_waccess
(
buf
,
mode
);
}
...
...
@@ -459,8 +459,8 @@ int p_rename(const char *from, const char *to)
git_win32_path_utf16
wfrom
;
git_win32_path_utf16
wto
;
git__utf8_to_16
(
wfrom
,
from
);
git__utf8_to_16
(
wto
,
to
);
git__
win32_path_
utf8_to_16
(
wfrom
,
from
);
git__
win32_path_
utf8_to_16
(
wto
,
to
);
return
MoveFileExW
(
wfrom
,
wto
,
MOVEFILE_REPLACE_EXISTING
|
MOVEFILE_COPY_ALLOWED
)
?
0
:
-
1
;
}
...
...
src/win32/utf-conv.c
View file @
aaefbdee
...
...
@@ -70,12 +70,12 @@ void git__utf8_to_16(wchar_t *dest, size_t length, const char *src)
}
#endif
int
git__utf8_to_16
(
git_win32_path_utf16
dest
,
const
git_win32_path_utf8
src
)
int
git__utf8_to_16
(
wchar_t
*
dest
,
size_t
dest_size
,
const
char
*
src
)
{
return
MultiByteToWideChar
(
CP_UTF8
,
0
,
src
,
-
1
,
dest
,
GIT_WIN_PATH_UTF16
);
return
MultiByteToWideChar
(
CP_UTF8
,
0
,
src
,
-
1
,
dest
,
dest_size
);
}
int
git__utf16_to_8
(
git_win32_path_utf8
dest
,
const
git_win32_path_utf16
src
)
int
git__utf16_to_8
(
char
*
dest
,
size_t
dest_size
,
const
wchar_t
*
src
)
{
return
WideCharToMultiByte
(
CP_UTF8
,
0
,
src
,
-
1
,
dest
,
GIT_WIN_PATH_UTF8
,
NULL
,
NULL
);
return
WideCharToMultiByte
(
CP_UTF8
,
0
,
src
,
-
1
,
dest
,
dest_size
,
NULL
,
NULL
);
}
src/win32/utf-conv.h
View file @
aaefbdee
...
...
@@ -16,8 +16,19 @@
typedef
wchar_t
git_win32_path_utf16
[
GIT_WIN_PATH_UTF16
];
typedef
char
git_win32_path_utf8
[
GIT_WIN_PATH_UTF8
];
int
git__utf8_to_16
(
git_win32_path_utf16
dest
,
const
git_win32_path_utf8
src
);
int
git__utf16_to_8
(
git_win32_path_utf8
dest
,
const
git_win32_path_utf16
src
);
// dest_size is the size of dest in wchar_t's
int
git__utf8_to_16
(
wchar_t
*
dest
,
size_t
dest_size
,
const
char
*
src
);
// dest_size is the size of dest in char's
int
git__utf16_to_8
(
char
*
dest
,
size_t
dest_size
,
const
wchar_t
*
src
);
#endif
GIT_INLINE
(
int
)
git__win32_path_utf8_to_16
(
git_win32_path_utf16
dest
,
const
git_win32_path_utf8
src
)
{
return
git__utf8_to_16
(
dest
,
GIT_WIN_PATH_UTF16
,
src
);
}
GIT_INLINE
(
int
)
git__win32_path_utf16_to_8
(
git_win32_path_utf8
dest
,
const
git_win32_path_utf16
src
)
{
return
git__utf16_to_8
(
dest
,
GIT_WIN_PATH_UTF8
,
src
);
}
#endif
tests-clar/clar_libgit2.c
View file @
aaefbdee
...
...
@@ -61,7 +61,7 @@ char *cl_getenv(const char *name)
wchar_t
*
value_utf16
;
char
*
value_utf8
;
git__utf8_to_16
(
name_utf16
,
name
);
git__
win32_path_
utf8_to_16
(
name_utf16
,
name
);
alloc_len
=
GetEnvironmentVariableW
(
name_utf16
,
NULL
,
0
);
if
(
alloc_len
<=
0
)
return
NULL
;
...
...
@@ -72,7 +72,7 @@ char *cl_getenv(const char *name)
GetEnvironmentVariableW
(
name_utf16
,
value_utf16
,
alloc_len
);
cl_assert
(
value_utf8
=
git__malloc
(
alloc_len
));
git__utf16_to_8
(
value_utf8
,
value_utf16
);
git__
win32_path_
utf16_to_8
(
value_utf8
,
value_utf16
);
git__free
(
value_utf16
);
...
...
@@ -84,10 +84,10 @@ int cl_setenv(const char *name, const char *value)
git_win32_path_utf16
name_utf16
;
git_win32_path_utf16
value_utf16
;
git__utf8_to_16
(
name_utf16
,
name
);
git__
win32_path_
utf8_to_16
(
name_utf16
,
name
);
if
(
value
)
{
git__utf8_to_16
(
value_utf16
,
value
);
git__
win32_path_
utf8_to_16
(
value_utf16
,
value
);
cl_assert
(
SetEnvironmentVariableW
(
name_utf16
,
value_utf16
));
}
else
{
/* Windows XP returns 0 (failed) when passing NULL for lpValue when
...
...
@@ -111,8 +111,8 @@ int cl_rename(const char *source, const char *dest)
git_win32_path_utf16
dest_utf16
;
unsigned
retries
=
1
;
git__utf8_to_16
(
source_utf16
,
source
);
git__utf8_to_16
(
dest_utf16
,
dest
);
git__
win32_path_
utf8_to_16
(
source_utf16
,
source
);
git__
win32_path_
utf8_to_16
(
dest_utf16
,
dest
);
while
(
!
MoveFileW
(
source_utf16
,
dest_utf16
))
{
/* Only retry if the error is ERROR_ACCESS_DENIED;
...
...
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