diff options
-rw-r--r-- | src/path.c | 30 | ||||
-rw-r--r-- | src/path.h | 10 | ||||
-rw-r--r-- | src/refs.c | 7 | ||||
-rw-r--r-- | tests-clar/core/iconv.c | 14 | ||||
-rw-r--r-- | tests-clar/repo/init.c | 2 |
5 files changed, 47 insertions, 16 deletions
diff --git a/src/path.c b/src/path.c index d45751cd1..750dd3ef7 100644 --- a/src/path.c +++ b/src/path.c @@ -834,7 +834,12 @@ int git_path_direach( DIR *dir; path_dirent_data de_data; struct dirent *de, *de_buf = (struct dirent *)&de_data; + + (void)flags; + +#ifdef GIT_USE_ICONV git_path_iconv_t ic = GIT_PATH_ICONV_INIT; +#endif if (git_path_to_dir(path) < 0) return -1; @@ -846,8 +851,10 @@ int git_path_direach( return -1; } +#ifdef GIT_USE_ICONV if ((flags & GIT_PATH_DIR_PRECOMPOSE_UNICODE) != 0) (void)git_path_iconv_init_precompose(&ic); +#endif while (p_readdir_r(dir, de_buf, &de) == 0 && de != NULL) { char *de_path = de->d_name; @@ -856,8 +863,12 @@ int git_path_direach( if (git_path_is_dot_or_dotdot(de_path)) continue; - if ((error = git_path_iconv(&ic, &de_path, &de_len)) < 0 || - (error = git_buf_put(path, de_path, de_len)) < 0) +#ifdef GIT_USE_ICONV + if ((error = git_path_iconv(&ic, &de_path, &de_len)) < 0) + break; +#endif + + if ((error = git_buf_put(path, de_path, de_len)) < 0) break; error = fn(arg, path); @@ -871,7 +882,10 @@ int git_path_direach( } closedir(dir); + +#ifdef GIT_USE_ICONV git_path_iconv_clear(&ic); +#endif return error; } @@ -888,7 +902,12 @@ int git_path_dirload( size_t path_len; path_dirent_data de_data; struct dirent *de, *de_buf = (struct dirent *)&de_data; + + (void)flags; + +#ifdef GIT_USE_ICONV git_path_iconv_t ic = GIT_PATH_ICONV_INIT; +#endif assert(path && contents); @@ -903,8 +922,10 @@ int git_path_dirload( return -1; } +#ifdef GIT_USE_ICONV if ((flags & GIT_PATH_DIR_PRECOMPOSE_UNICODE) != 0) (void)git_path_iconv_init_precompose(&ic); +#endif path += prefix_len; path_len -= prefix_len; @@ -917,8 +938,10 @@ int git_path_dirload( if (git_path_is_dot_or_dotdot(de_path)) continue; +#ifdef GIT_USE_ICONV if ((error = git_path_iconv(&ic, &de_path, &de_len)) < 0) break; +#endif alloc_size = path_len + need_slash + de_len + 1 + alloc_extra; if ((entry_path = git__calloc(alloc_size, 1)) == NULL) { @@ -937,7 +960,10 @@ int git_path_dirload( } closedir(dir); + +#ifdef GIT_USE_ICONV git_path_iconv_clear(&ic); +#endif if (error != 0) giterr_set(GITERR_OS, "Failed to process directory entry in '%s'", path); diff --git a/src/path.h b/src/path.h index 17f4f7726..3daafd265 100644 --- a/src/path.h +++ b/src/path.h @@ -425,16 +425,6 @@ extern void git_path_iconv_clear(git_path_iconv_t *ic); */ extern int git_path_iconv(git_path_iconv_t *ic, char **in, size_t *inlen); -#else - -typedef struct { - int unused; -} git_path_iconv_t; -#define GIT_PATH_ICONV_INIT { 0 } -#define git_path_iconv_init_precompose(X) 0 -#define git_path_iconv_clear(X) (void)(X) -#define git_path_iconv(X,Y,Z) 0 - #endif /* GIT_USE_ICONV */ #endif diff --git a/src/refs.c b/src/refs.c index 269c5f54e..472a79890 100644 --- a/src/refs.c +++ b/src/refs.c @@ -737,7 +737,10 @@ int git_reference__normalize_name( int segment_len, segments_count = 0, error = GIT_EINVALIDSPEC; unsigned int process_flags; bool normalize = (buf != NULL); + +#ifdef GIT_USE_ICONV git_path_iconv_t ic = GIT_PATH_ICONV_INIT; +#endif assert(name); @@ -750,6 +753,7 @@ int git_reference__normalize_name( if (normalize) git_buf_clear(buf); +#ifdef GIT_USE_ICONV if ((flags & GIT_REF_FORMAT__PRECOMPOSE_UNICODE) != 0) { size_t namelen = strlen(current); if ((error = git_path_iconv_init_precompose(&ic)) < 0 || @@ -757,6 +761,7 @@ int git_reference__normalize_name( goto cleanup; error = GIT_EINVALIDSPEC; } +#endif while (true) { segment_len = ensure_segment_validity(current); @@ -834,7 +839,9 @@ cleanup: if (error && normalize) git_buf_free(buf); +#ifdef GIT_USE_ICONV git_path_iconv_clear(&ic); +#endif return error; } diff --git a/tests-clar/core/iconv.c b/tests-clar/core/iconv.c index 73bc99a23..8aedab206 100644 --- a/tests-clar/core/iconv.c +++ b/tests-clar/core/iconv.c @@ -1,22 +1,29 @@ #include "clar_libgit2.h" #include "path.h" +#ifdef GIT_USE_ICONV static git_path_iconv_t ic; static char *nfc = "\xC3\x85\x73\x74\x72\xC3\xB6\x6D"; static char *nfd = "\x41\xCC\x8A\x73\x74\x72\x6F\xCC\x88\x6D"; +#endif void test_core_iconv__initialize(void) { +#ifdef GIT_USE_ICONV cl_git_pass(git_path_iconv_init_precompose(&ic)); +#endif } void test_core_iconv__cleanup(void) { +#ifdef GIT_USE_ICONV git_path_iconv_clear(&ic); +#endif } void test_core_iconv__unchanged(void) { +#ifdef GIT_USE_ICONV char *data = "Ascii data", *original = data; size_t datalen = strlen(data); @@ -25,10 +32,12 @@ void test_core_iconv__unchanged(void) /* There are no high bits set, so this should leave data untouched */ cl_assert(data == original); +#endif } void test_core_iconv__decomposed_to_precomposed(void) { +#ifdef GIT_USE_ICONV char *data = nfd; size_t datalen = strlen(nfd); @@ -38,15 +47,13 @@ void test_core_iconv__decomposed_to_precomposed(void) /* The decomposed nfd string should be transformed to the nfc form * (on platforms where iconv is enabled, of course). */ -#ifdef GIT_USE_ICONV cl_assert_equal_s(nfc, data); -#else - cl_assert_equal_s(nfd, data); #endif } void test_core_iconv__precomposed_is_unmodified(void) { +#ifdef GIT_USE_ICONV char *data = nfc; size_t datalen = strlen(nfc); @@ -57,4 +64,5 @@ void test_core_iconv__precomposed_is_unmodified(void) * the high-bit set, the iconv transform should result in no change. */ cl_assert_equal_s(nfc, data); +#endif } diff --git a/tests-clar/repo/init.c b/tests-clar/repo/init.c index 617fdf879..aea383c64 100644 --- a/tests-clar/repo/init.c +++ b/tests-clar/repo/init.c @@ -232,6 +232,7 @@ void test_repo_init__detect_ignorecase(void) void test_repo_init__detect_precompose_unicode_required(void) { +#ifdef GIT_USE_ICONV char *composed = "ḱṷṓn", *decomposed = "ḱṷṓn"; struct stat st; bool found_with_nfd; @@ -240,7 +241,6 @@ void test_repo_init__detect_precompose_unicode_required(void) found_with_nfd = (p_stat(decomposed, &st) == 0); cl_must_pass(p_unlink(composed)); -#ifdef GIT_USE_ICONV assert_config_entry_on_init("core.precomposeunicode", found_with_nfd); #else assert_config_entry_on_init("core.precomposeunicode", GIT_ENOTFOUND); |