Merge branch 'backport/jx/ci-ubuntu-fix' into maint-2.30
[git.git] / compat / precompose_utf8.h
blob6f843d3e1a121cf8f73409bc66898f74a9f14f2c
1 #ifndef PRECOMPOSE_UNICODE_H
2 #define PRECOMPOSE_UNICODE_H
4 #include <sys/stat.h>
5 #include <sys/types.h>
6 #include <dirent.h>
7 #include <iconv.h>
10 typedef struct dirent_prec_psx {
11 ino_t d_ino; /* Posix */
12 size_t max_name_len; /* See below */
13 unsigned char d_type; /* available on all systems git runs on */
16 * See http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/dirent.h.html
17 * NAME_MAX + 1 should be enough, but some systems have
18 * NAME_MAX=255 and strlen(d_name) may return 508 or 510
19 * Solution: allocate more when needed, see precompose_utf8_readdir()
21 char d_name[NAME_MAX+1];
22 } dirent_prec_psx;
25 typedef struct {
26 iconv_t ic_precompose;
27 DIR *dirp;
28 struct dirent_prec_psx *dirent_nfc;
29 } PREC_DIR;
31 void precompose_argv(int argc, const char **argv);
32 void probe_utf8_pathname_composition(void);
34 PREC_DIR *precompose_utf8_opendir(const char *dirname);
35 struct dirent_prec_psx *precompose_utf8_readdir(PREC_DIR *dirp);
36 int precompose_utf8_closedir(PREC_DIR *dirp);
38 #ifndef PRECOMPOSE_UNICODE_C
39 #define dirent dirent_prec_psx
40 #define opendir(n) precompose_utf8_opendir(n)
41 #define readdir(d) precompose_utf8_readdir(d)
42 #define closedir(d) precompose_utf8_closedir(d)
43 #define DIR PREC_DIR
44 #endif /* PRECOMPOSE_UNICODE_C */
46 #endif /* PRECOMPOSE_UNICODE_H */